鸿蒙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开发者轻松实现音视频的边播放边缓存功能。
它支持离线播放、断点续传、自动清理缓存等多种实用功能,同时提供了丰富的自定义选项,满足不同开发场景的需求。
开发者可以通过简单的安装和配置,快速集成该库到自己的项目中,提升应用的多媒体处理能力。
相关文章:
鸿蒙HarmonyOS Next 视频边播放边缓存- OhosVideoCache
OhosVideoCache 是一个专为OpenHarmony开发(HarmonyOS也可以用)的音视频缓存库,旨在帮助开发者轻松实现音视频的边播放边缓存功能。以下是关于 OhosVideoCache 的详细介绍: 1. 核心功能 边播放边缓存:将音视频URL传递给 OhosVideoCache 处理后…...
(10) 如何获取 linux 系统上的 TCP 、 UDP 套接字的收发缓存的默认大小,以及代码范例
(1) 先介绍下后面的代码里要用到的基础函数: 以及: (2) 接着给出现代版的 读写 socket 参数的系统函数 : 以及: (3) 给出 一言的 范例代码,获取…...
程序代码篇---项目目录结构HSV掩膜Opencv图像处理
文章目录 前言第一部分:项目目录结构第二部分:HSV提取HSV色调(Hue)含义取值范围 饱和度(Saturation)含义取值范围 亮度(Value)含义取值范围 第三部分:Opencv图像处理1. 读…...
注解与反射基础
注解 概述 注解(Annotation),从jdk5.0引入。 作用 不是程序本身,可以对程序作出解释(这一点和注释没什么区别)可以被其他程序读取 格式 注释是以“注释名”在代码中存在的,还可以添加一些…...
Vue指令v-html
目录 一、Vue中的v-html指令是什么?二、v-html指令与v-text指令的区别? 一、Vue中的v-html指令是什么? v-html指令的作用是:设置元素的innerHTML,内容中有html结构会被解析为标签。 二、v-html指令与v-text指令的区别…...
院校联合以项目驱动联合培养医工计算机AI人才路径探析
一、引言 1.1 研究背景与意义 在科技飞速发展的当下,医疗人工智能作为一个极具潜力的新兴领域,正深刻地改变着传统医疗模式。从疾病的早期诊断、个性化治疗方案的制定,到药物研发的加速,人工智能技术的应用极大地提升了医疗服务…...
CDDIS从2025年2月开始数据迁移
CDDIS 将从 2025 年 2 月开始将我们的网站从 cddis.nasa.gov 迁移到 earthdata.nasa.gov,并于 2025 年 6 月结束。 期间可能对GAMIT联网数据下载造成影响。...
前端 | JavaScript中的reduce方法
1. 什么是reduce reduce 方法是 JavaScript 中数组的重要方法之一,用于对数组中的元素进行累积计算。它接收一个回调函数作为参数,并返回一个最终计算结果。reduce 在许多场景下都非常有用,比如求和、数组扁平化、对象计数、数据转换等。 2…...
【C++】B2124 判断字符串是否为回文
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式:输出格式:样例: 💯方法一:我的第一种做法思路代码实现解析 💯方法二:我…...
人工智能学习(五)之机器学习逻辑回归算法
深入剖析机器学习逻辑回归算法 一、引言 在机器学习领域,逻辑回归是一种极为经典且应用广泛的算法。虽说名字里带有 “回归”,但它主要用于解决分类问题,在医学、金融、互联网等多个领域都发挥着关键作用。例如,在医学上辅助判断…...
Bash 基础与进阶实践指南
目录 Bash 简介与基础基本命令与文件操作权限管理与用户管理重定向与管道变量与环境变量通配符与正则表达式Shell 脚本结构与控制流常用内建命令与技巧文本处理常用命令作业控制与进程管理别名与函数实用技巧与注意事项更多 Bash 进阶话题参考资源 1. Bash 简介与基础 1.1 什…...
基于开源AI智能名片2 + 1链动模式S2B2C商城小程序视角下的个人IP人设构建研究
摘要:本文深入探讨在开源AI智能名片2 1链动模式S2B2C商城小程序的应用场景下,个人IP人设构建的理论与实践。通过剖析个人IP人设定义中的“诉求”“特质”“可感知”三要素,结合该小程序特点,阐述其对个人IP打造的影响与推动作用&…...
基于springboot+vue的航空散货调度系统
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...
【C++】B2122 单词翻转
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 💯一、我的做法代码实现:代码解析思路分析 💯二、老师的第一种做法代码实现&a…...
OSCP 渗透测试:网络抓包工具的使用指南
在 OSCP 考试和渗透测试中,网络数据分析是至关重要的技能。无论是嗅探明文密码、分析恶意流量,还是溯源攻击,抓包工具都是我们的得力助手。 本文将介绍 OSI 七层网络模型 及其在网络分析中的作用,并详细讲解 Wireshark 和 tcpdum…...
Android 进程间通信
什么是IPC? Android 进程间通信(IPC,Inter-Process Communication)是Android操作系统中不同进程间交换数据和资源的一种机制。由于Android是多任务操作系统,每个应用通常运行在自己的进程中,以提高安全性和…...
Kubernetes学习之通过Service访问Pod
一、基础概述 1.当通过deployment等controller动态创建和销毁pod使得每个pod都有自己的ip地址,当controller用新的pod替代发生故障的pod时,新的pod会分配到新的ip地址,那么客户端如何稳定的找到并访问pod提供的服务。 2.创建service service从…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.18 对象数组:在NumPy中存储Python对象
2.18 对象数组:在NumPy中存储Python对象 目录 #mermaid-svg-shERrGOBuM2rBzeB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-shERrGOBuM2rBzeB .error-icon{fill:#552222;}#mermaid-svg-shERrGOBuM2rB…...
Web - CSS3基础语法与盒模型
概述 这篇文章是关于 Web 前端 CSS3 的基础语法与盒模型的讲解。包括 CSS3 层叠性及处理冲突规则、伪元素和新增伪类元素、属性选择器等。还介绍了文本与字体属性,如段落和行相关属性、字体文本属性。最后阐述了盒子模型,如元素隐藏、行内与块元素转换、…...
CSS知识总结
CSS(层叠样式表,Cascading Style Sheets)是一种用于描述网页内容视觉表现的样式语言,与HTML(结构)和JavaScript(行为)共同构成现代Web开发的三大核心技术。 一、基本概念 定义&…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
