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

embedded/2025/2/4 20:36:00/

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 提供的主要接口及其说明:

接口名参数返回值说明
getProxyUrlurl: string, allowCachedFileUri: boolean = truePromise<string>将原始音视频URL处理后返回代理URL,用于播放器请求。
registerCacheListenercacheListener: CacheListener, url: string | null = nullvoid注册缓存进度监听器。
unregisterCacheListenercacheListener: CacheListener, url: stringvoid取消注册缓存进度监听器。
shutdownvoid关闭代理服务器。
cacheDirectoryfile: stringHttpProxyCacheServerBuilder设置缓存文件存放的目录。
setFileNameGeneratorfileNameGenerator: FileNameGeneratorHttpProxyCacheServerBuilder设置自定义缓存文件命名规则。
maxCacheSizemaxSize: numberHttpProxyCacheServerBuilder设置最大缓存容量清理策略的最大缓存容量。
maxCacheFilesCountcount: numberHttpProxyCacheServerBuilder设置最大文件个数清理策略的最大文件个数。
setDiskUsagediskUsage: DiskUsageHttpProxyCacheServerBuilder设置自定义缓存文件清理规则。
setHeaderInjectorheaderInjector: HeaderInjectorHttpProxyCacheServerBuilder设置自定义请求头注入器。
buildHttpProxyCacheServer构造代理服务器实例。

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

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

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


总结

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

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

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


http://www.ppmy.cn/embedded/159564.html

相关文章

HTML(快速入门)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导&#xff0c;有错误的地方会改进的哦~点击这里了解更多内容 目录 一、前言二、HTML基础2.1 什么是HTML?2.2 认识HTML标签2.2.1 HTML标签当中的基本结构2.2.2 标签层次结构 2.3 HTML常见标签2.3.1 标题标签2.3.2 段落标签2.3.3…

本地部署 DeepSeek-R1 大模型

本地部署 DeepSeek-R1 大模型指南 1. 引言 1.1 DeepSeek-R1 模型简介 在人工智能的世界里&#xff0c;大型语言模型&#xff08;LLM&#xff09;正如一座巨大的宝库&#xff0c;里面储存着丰富的信息和无限的潜力。而DeepSeek-R1&#xff0c;就像那扇打开智慧之门的钥匙。它…

联想拯救者R720笔记本外接显示屏方法,显示屏是2K屏27英寸

现在某品牌的13/14代&#xff08;CPU是13或14开头&#xff09;CPU缩肛有设计质量问题、CPU容易氧化易损坏易蓝屏等问题&#xff0c;现在大家买笔记本或台式电脑请不要考虑这两代CPU&#xff0c;或考虑AMD的CPU。 晚上23点10分前下单&#xff0c;第二天上午显示屏送到&#xff…

我的世界(Minecraft)计算器python源码

我的世界(Minecraft)计算器python源码 1.介绍 使用教程 博客&#xff1a;【Python】python实现我的世界(Minecraft)计算器视频&#xff1a;Python实现我的世界(Minecraft)计算器(附源码与教程) 2.源码 文件一 # CreateBigScreen.py (创建大屏幕并返回大屏幕坐标)from m…

2025年1月31日(M_1.5.4)

%% M_1.5.4 % ; 分号用于隐藏输出 clear; % 清空工作区 clc; % 清空命令行窗口 close all; % 关闭所有图形窗口%% 参数 t 0:0.01:10; wn 5; % (rad/s) x0 1; % (m) v0 5; % (m/s)%% 创建一个 22 分块图布局 t1 % TileSpacing 属性设置为 compact 来减小图块的间距 t1…

2 MapReduce

2 MapReduce 1. MapReduce 介绍1.1 MapReduce 设计构思 2. MapReduce 编程规范3. Mapper以及Reducer抽象类介绍1.Mapper抽象类的基本介绍2.Reducer抽象类基本介绍 4. WordCount示例编写5. MapReduce程序运行模式6. MapReduce的运行机制详解6.1 MapTask 工作机制6.2 ReduceTask …

excel如何查找一个表的数据在另外一个表是否存在

比如“Sheet1”有“张三”、“李四”“王五”三个人的数据&#xff0c;“Sheet2”只有“张三”、“李四”的数据。我们通过修改“Sheet1”的“民族”或者其他空的列&#xff0c;修改为“Sheet2”的某一列。这样修改后筛选这个修改的列为空的或者为出错的&#xff0c;就能找到两…

Spring Boot基本项目结构

要写一个Spring Boot 项目对于新手小白来说&#xff0c;首先要了解Spring Boot 的基本架构&#xff0c;学会如何创建一个简单的spring boot项目。 springboot 基于maven做的&#xff08;前提保证maven是装好并且IDEA配置好的&#xff09;&#xff08;面向接口编程&#xff09;…