鸿蒙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开发者轻松实现音视频的边播放边缓存功能。

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

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

相关推荐
Android系统攻城狮13 分钟前
Android16音频之获取音频时间戳AudioTrack.getTimestamp:用法实例(一百三十九)
音视频·android16·音频进阶
hqk3 小时前
鸿蒙ArkUI:状态管理、应用结构、路由全解析
android·前端·harmonyos
lang201509283 小时前
Kafka元数据缓存机制深度解析
分布式·缓存·kafka
ezeroyoung4 小时前
鸿蒙MindSpore Lite 离线模型转换指南
华为·大模型·harmonyos
简鹿视频5 小时前
视频转mp4格式具体作步骤
ffmpeg·php·音视频·实时音视频
Yutengii5 小时前
如何下载b站视频到本地(b站视频本地化指南)
音视频
大土豆的bug记录5 小时前
鸿蒙实现自定义类似活体检测功能
数码相机·华为·harmonyos·鸿蒙
奔跑的露西ly5 小时前
【HarmonyOS NEXT】顶象验证码 SDK 接入实践
华为·harmonyos
源代码•宸5 小时前
分布式缓存-GO(简历写法、常见面试题)
服务器·开发语言·经验分享·分布式·后端·缓存·golang
ezeroyoung5 小时前
环信em_chat_uikit(Flutter)适配鸿蒙
flutter·华为·harmonyos