目录

鸿蒙HarmonyOS Next 视频边播放边缓存- OhosVideoCache

OhosVideoCache 是一个专为OpenHarmony开发(HarmonyOS也可以用)的音视频缓存库,旨在帮助开发者轻松实现音视频的边播放边缓存功能。以下是关于 OhosVideoCache 的详细介绍:


1. 核心功能
  • 边播放边缓存 :将音视频URL传递给 OhosVideoCache 处理后,播放器可以一边播放内容,一边将数据缓存到本地。这一功能极大地提升了用户体验,尤其是在网络不稳定的情况下。

  • 离线播放支持:音视频下载完成后,即使设备断网,用户也可以继续播放已缓存的内容。

  • 断点续传:如果音视频下载中断,再次播放时会从上次缓存的位置继续下载,而不是重新开始,节省时间和流量。

  • 自动清理缓存 :根据用户设置的参数,OhosVideoCache 可以自动清理缓存文件,避免占用过多磁盘空间。

  • 高度可定制:支持添加自定义请求头、自定义缓存文件命名规则、设置缓存目录等,满足不同开发场景的需求。


2. 使用方法
安装

通过以下命令安装 OhosVideoCache

复制代码
ohpm install @ohos/video-cache
初始化代理服务器

建议使用单例模式维护代理服务器对象,避免重复创建多个代理服务器实例,从而节省资源并提高应用性能。以下是初始化代理服务器的示例代码:

复制代码
import { HttpProxyCacheServer, HttpProxyCacheServerBuilder } from '@ohos/video-cache';
import common from '@ohos.app.ability.common';

export default class GlobalProxyServer {
  private static instance: GlobalProxyServer;
  private _objects: Map<string, Object | null> = new Map<string, Object | null>();

  private constructor() {}

  public static getInstance(): GlobalProxyServer {
    if (!GlobalProxyServer.instance) {
      GlobalProxyServer.instance = new GlobalProxyServer();
    }
    return GlobalProxyServer.instance;
  }

  setServer(objectClass: HttpProxyCacheServer) {
    this._objects.set('server', objectClass);
  }

  getServer(): HttpProxyCacheServer {
    return this._objects.get('server') as HttpProxyCacheServer;
  }
}

// 初始化代理服务器
let server: HttpProxyCacheServer = new HttpProxyCacheServerBuilder(getContext()).build();
GlobalProxyServer.getInstance().setServer(server);
处理音视频URL

将原始音视频URL传递给 OhosVideoCache 处理,获取代理URL,并将其设置给播放器:

复制代码
let originUrl = 'https://example.com/video.mp4'; // 原始音视频URL
let tempUrl = await GlobalProxyServer.getInstance().getServer().getProxyUrl(originUrl);
let proxyUrl: string | undefined = tempUrl ? tempUrl : originUrl;

// 设置给播放器
this.avPlayer!.url = proxyUrl;

3. 进阶功能
设置缓存文件夹位置

可以指定缓存文件存放的目录,默认为应用沙箱的 cache 目录:

复制代码
let server: HttpProxyCacheServer = new HttpProxyCacheServerBuilder(getContext())
  .cacheDirectory(getContext().cacheDir) // 设置缓存文件夹位置
  .build();
设置缓存清理策略
  • 最大缓存容量:限制缓存文件夹的最大容量(如1G):

    复制代码
    let server: HttpProxyCacheServer = new HttpProxyCacheServerBuilder(getContext())
      .maxCacheSize(1024 * 1024 * 1024) // 设置最大缓存容量为1G
      .build();
  • 最大缓存文件个数:限制缓存文件夹的最大文件数量:

    复制代码
    let server: HttpProxyCacheServer = new HttpProxyCacheServerBuilder(getContext())
      .maxCacheFilesCount(10) // 设置最大缓存文件个数为10个
      .build();
添加请求头

通过自定义请求头注入器,为音视频请求添加额外的头信息:

复制代码
class MyHeaderInject implements HeaderInjector {
  addHeaders(url: string): HashMap<string, string> {
    let header: HashMap<string, string> = new HashMap<string, string>();
    header.set('allowCrossProtocolRedirects', 'true');
    header.set('name', '张三');
    header.set('fakeToken', '123456789');
    return header;
  }
}

let server: HttpProxyCacheServer = new HttpProxyCacheServerBuilder(getContext())
  .setHeaderInjector(new MyHeaderInject())
  .build();
自定义缓存文件命名规则

通过实现 FileNameGenerator 接口,自定义缓存文件的命名规则:

复制代码
class MyFileNameGenerator implements FileNameGenerator {
  generate(url: string): string {
    let start: number = url.lastIndexOf('/');
    let end: number = url.lastIndexOf('.');
    let newName: string = url.substring(start, end);
    return newName;
  }
}

let server: HttpProxyCacheServer = new HttpProxyCacheServerBuilder(getContext())
  .setFileNameGenerator(new MyFileNameGenerator())
  .build();
注册缓存进度监听器

监听音视频文件的下载缓存进度,并更新到界面:

复制代码
class MyCacheListener implements CacheListener {
  onCacheAvailable(cacheFilePath: string, url: string, percentsAvailable: number) {
    // 在这里处理缓存进度更新
  }
}

let listener: MyCacheListener = new MyCacheListener();
server.registerCacheListener(listener); // 注册监听器
server.unregisterCacheListener(listener); // 取消注册监听器
自定义缓存文件清理规则

通过实现 DiskUsage 接口,自定义缓存文件的清理逻辑:

复制代码
class MyDiskUsage implements DiskUsage {
  touch(filePath: string) {
    // 在这里实现自定义的缓存文件清理逻辑
  }
}

let server: HttpProxyCacheServer = new HttpProxyCacheServerBuilder(getContext())
  .setDiskUsage(new MyDiskUsage())
  .build();

4. 接口说明

以下是 OhosVideoCache 提供的主要接口及其说明:

接口名 参数 返回值 说明
getProxyUrl url: string, allowCachedFileUri: boolean = true Promise<string> 将原始音视频URL处理后返回代理URL,用于播放器请求。
registerCacheListener `cacheListener: CacheListener, url: string null = null` void
unregisterCacheListener cacheListener: CacheListener, url: string void 取消注册缓存进度监听器。
shutdown void 关闭代理服务器。
cacheDirectory file: string HttpProxyCacheServerBuilder 设置缓存文件存放的目录。
setFileNameGenerator fileNameGenerator: FileNameGenerator HttpProxyCacheServerBuilder 设置自定义缓存文件命名规则。
maxCacheSize maxSize: number HttpProxyCacheServerBuilder 设置最大缓存容量清理策略的最大缓存容量。
maxCacheFilesCount count: number HttpProxyCacheServerBuilder 设置最大文件个数清理策略的最大文件个数。
setDiskUsage diskUsage: DiskUsage HttpProxyCacheServerBuilder 设置自定义缓存文件清理规则。
setHeaderInjector headerInjector: HeaderInjector HttpProxyCacheServerBuilder 设置自定义请求头注入器。
build HttpProxyCacheServer 构造代理服务器实例。

6. 适用场景
  • 多媒体应用开发:适用于需要实现音视频缓存功能的OpenHarmony应用,如视频播放器、音乐播放器等。

  • 离线内容体验:支持用户在无网络环境下继续播放已缓存的音视频内容。

  • 优化用户体验:通过断点续传和自动清理缓存功能,提升应用的性能和用户体验。


总结

OhosVideoCache 是一个功能强大且高度可定制的音视频缓存库,能够帮助OpenHarmony开发者轻松实现音视频的边播放边缓存功能。

它支持离线播放、断点续传、自动清理缓存等多种实用功能,同时提供了丰富的自定义选项,满足不同开发场景的需求。

开发者可以通过简单的安装和配置,快速集成该库到自己的项目中,提升应用的多媒体处理能力。

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
yqcoder7 小时前
Redis 的应用场景
数据库·redis·缓存
申未曲7 小时前
如何解决Redis的缓存雪崩、缓存击穿、缓存穿透?
redis·缓存·mybatis
djykkkkkk8 小时前
二.使用ffmpeg对原始音频数据重采样并进行AAC编码
ffmpeg·音视频·aac
别说我什么都不会9 小时前
OpenHarmony源码分析之分布式软总线:trans_service模块(2)/会话管理之新会话
分布式·嵌入式·harmonyos
一只_程序媛9 小时前
【leetcode hot 100 146】LRU缓存
算法·leetcode·缓存
西门吹雪分身10 小时前
Redis复制(replica)主从模式
数据库·redis·缓存
蓝枫Amy11 小时前
鸿蒙应用程序包HAP的开发与使用
harmonyos
别说我什么都不会13 小时前
OpenHarmony源码分析之分布式软总线:trans_service模块(1)/认证通道管理
分布式·嵌入式·harmonyos
AI服务老曹13 小时前
以实现生产制造、科技研发、人居生活等一种或多种复合功能的智慧油站开源了
人工智能·科技·自动化·音视频·生活·制造
全栈若城13 小时前
84.HarmonyOS NEXT 路由导航与页面管理:构建清晰的应用架构
华为·架构·harmonyos·harmonyos next