HarmonyOS三方件开发指南(16)-VideoCache 视频缓存
目录:
引言
对于视频播放器这个app大家都不陌生,在我们日常生活中随处可见,但对于用户而言,最重要的就是如何能节约流量,使用简单,观看视频流畅等体验。对于Android VideoCache 在各大网站的学习文档、教程已经很多,而且层出不穷,但是对于鸿蒙来讲,还是一个新的领域,因此,鸿蒙版的VideoCache 顺势而为,华丽的诞生了。
功能介绍
鸿蒙VideoCache视频缓存组件,主要功能包括:视频缓冲,在线播放视频,边下载边缓存,缓冲进度和播放进度同时进行,拖动播放,横竖屏切换,音量调节等主要功能。模拟机效果图如下:
1.竖屏状态:


2.横屏状态


接下来得内容就是重中之重,对于开发者来讲,如何简单并且快速的使用该VideoCache视频缓存组件,这才是开发者最关注的问题。下面则详细介绍VideoCache的使用以及开发指南。
VideoCache使用指南
Ø 新建工程, 添加组件Har包依赖
在应用模块中添加HAR,只需要将videocachelibrary-debug.har复制到entry\libs目录下即可
Ø 修改配置文件
1. 在entry下面的build.gradle添加library 的依赖,如图所示:

1. 修改代码中的配置:
a. 在基类中实例化代理服务,核心代码如下:
httpProxyCacheServer =
new HttpProxyCacheServer.Builder(theApplication).headerInjector(new UserAgentHeadersInjector())
.maxCacheSize(1024 * 1024 * 1024)// 1 Gb for cache
.singleFileBandwidth(600)//单位KB,https需要1.5倍左右
.build();
b.在使用的地方初始化播放器,并调用代理服务将新生成的路径传入播放器,代码如下:
proxyUrl = BaseSlice.getProxy().getProxyUrl("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4");
BaseSlice.getProxy().registerCacheListener(mCacheListener, proxyUrl);//缓存监听
playerVideo = new PlayerVideo(this, proxyUrl, this, layout);
playerVideo.setDisplayMath(0, 1000);
c.其他相关设置方法,代码如下:
* 设置播放器的宽高
dependentLayout.setWidth(width);
dependentLayout.setHeight(height);
或者:
dependentLayout.setWidth(ComponentContainer.LayoutConfig.MATCH_PARENT);
dependentLayout.setHeight(ComponentContainer.LayoutConfig.MATCH_PARENT);
* 设置播放器的横竖屏
//横屏
abilitySlice.getAbility().setDisplayOrientation(AbilityInfo.DisplayOrientation.LANDSCAPE);
//竖屏
abilitySlice.getAbility().setDisplayOrientation(AbilityInfo.DisplayOrientation.PORTRAIT);
//系统判断
abilitySlice.getAbility().setDisplayOrientation(AbilityInfo.DisplayOrientation.UNSPECIFIED);
//跟随栈中应用
abilitySlice.getAbility().setDisplayOrientation(AbilityInfo.DisplayOrientation.FOLLOWRECENT);
* 初始化播放器
player = new Player(context);
surfaceProvider.pinToZTop(false);
java.util.Optional<ohos.agp.graphics.SurfaceOps> optional = surfaceProvider.getSurfaceOps();
SurfaceOps surfaceOps = optional.get();
surfaceOps.addCallback(new VideoSurfaceCallback(surfaceOps, loadUrl,
player, this
));
* 播放方法
player.play();
* 暂停播放方法
player.pause();
VideoCache开发指南
在上述中,已经大概说了VideoCache 的功能点,视频缓冲,在线播放视频,边下载边缓存,缓冲进度和播放进度同时进行,拖动播放,横竖屏切换,音量调节等主要功能,接下来一 一说明主要实现方法。
在视频播放器中,最常见的就是缓冲进度条,进度条用户可以很直观的看到目前已经缓冲的视频有多少,缓冲了多长时间,进度条设置代码如下:
progressBar.setMaxValue(100);
progressBar.setMinValue(0);
progressBar.setProgressValue(cacheProgress);
通过根据已经缓冲的字节,即可计算出cacheProgress
MaxValue 值不是固定的100,也可以按照视频的时长、字节等设置,然后计算百分比即可,根据具体需求设计。
MinValue设置progress 的起始点,最初的起始点肯定是0,但是当视频在播放中途,暂停,在开始的时候,则需要设置为暂停时的值,这样不至于又回到0来观看视频。
最后,既然是视频缓存组件,那么重中之重就是如何缓存,接下来重点介绍
VideoCache主要通过代理策略将网络请求代理到本地服务,本地在决定是从本地缓存拿数据还是发起网络请求,如果发起网络请求就先将数据写入缓存,再从本地提供视频数据给视频播放器,参考下图
这样就达到了边播放边缓存的策略。
具体步骤如下:
1.在项目的基类初始化一个全局的代理服务HttpProxyCacheServer,
2.生成缓存文件名,默认是使用的 MD5 方式生成 key,考虑到一些业务逻辑,我们也可以继承一个 FileNameGenerator 来实现自己的策略,具体代码如下:
3.本地代理实现策略,首先是构造一个本地127.0.0.1的ServerSocker,随机分配了一个端口,然后启动一个线程去执行WaitRequestsRunnable,在这里面执行
waitForRequest,通过 accept() 方法监听这个服务器 socket 的入站连接,accept()
方法会一直阻塞,直到有一个客户端尝试建立连接。
1. FileCache类
类中规定了缓存文件的命名格式(后加.download)和存储的路径,完成了缓存文件的创建。

2. Files类
此类是对JAVA中原有的File类的封装,原File类仅可处理一个文件,Files类可同时对多个文件进行处理。
如下代码中,getLruListFiles()方法的参数是一个directory,在方法中对directory(文件夹路径)下的所有文件进行拆分,返回了一个File参数类型的List列表,后续可对列表中的各个File文件进行处理。
3. LruDiskUsage类
此类主要用于控制缓存文件的大小,它与Videocache平行开了一个线程,实时记录缓存文件的数量、大小、存储空间等,超过预设的阈值时,执行特定的优化操作。
4. Md5FileNameGenerator类
此类实现了为输入文件路径,生成对应的MD5值的功能。MD5值是一种被"压缩"的保密格式,可以确保信息完整传输。

5. TotalCountLruDiskUsage类、TotalSizeLruDiskUsage类和UnlimitedDiskUsage类
LruDiskUsage类是标题中前两个类的父类,同时控制缓存文件的大小和数量,需要判断当前缓存文件的(总大小
& 总数量)未超过阈值时,才会缓存新的文件。
TotalCountLruDiskUsage类和TotalSizeLruDiskUsage类分别只对缓存文件总数量或者缓存文件总大小进行限制,满足一个条件便可以缓存新的文件。
TotalCountLruDiskUsage类和TotalSizeLruDiskUsage类各有两个方法:一个方法用于设定缓存文件的阈值;一个方法用于判断当前缓存数据是否超过了设定的阈值。
当不需要进行磁盘的缓存限制时使用UnlimitedDiskUsage类,其本身是一个空的类,不对缓存文件的数量和大小做任何限制。

更多原创,请关注"软通动力HarmonyOS学院https://harmonyos.51cto.com/column/30
作者:软通田可辉
想了解更多内容,请访问51CTO和华为合作共建的鸿蒙社区:harmonyos.51cto.com
HarmonyOS三方件开发指南(16)-VideoCache 视频缓存的更多相关文章
- HarmonyOS三方件开发指南(15)-LoadingView功能介绍
目录: 1. LoadingView组件功能介绍2. Lottie使用方法3. Lottie开发实现4.<HarmonyOS三方件开发指南>系列文章合集 1. LoadingView组件功 ...
- HarmonyOS三方件开发指南(12)——cropper图片裁剪
鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->[课程入口] 目录:1. cropper组件功能介绍2. cropper使用方法3. cropper组件开发实现4. ...
- HarmonyOS三方件开发指南(13)-SwipeLayout侧滑删除
鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->[课程入口] 目录:1. SwipeLayout组件功能介绍2. SwipeLayout使用方法3. SwipeLa ...
- HarmonyOS三方件开发指南(14)-Glide组件功能介绍
<HarmonyOS三方件开发指南>系列文章合集 引言 在实际应用开发中,会用到大量图片处理,如:网络图片.本地图片.应用资源.二进制流.Uri对象等,虽然官方提供了PixelMap进行图 ...
- HarmonyOS三方件开发指南(17)-BottomNavigationBar
目录: 1.引言 2.功能介绍 3.BottomNavigationBar使用指南 4.BottomNavigationBar开发指南 5.<HarmonyOS三方件开发指南>文章合集 引 ...
- HarmonyOS三方件开发指南(19)-BGABadgeView徽章组件
目录: 1.引言 2.功能介绍 3.BGABadgeView 使用指南 4.BGABadgeView 开发指南 5.<HarmonyOS三方件开发指南>系列文章合集 引言 现在很多的APP ...
- HarmonyOS三方件开发指南(4)——Logger组件
目录: 1. Logger功能介绍 2. Logger使用方法 3. Logger开发实现 4. 源码上传地址 1. Logger功能介绍1.1. ...
- HarmonyOS三方件开发指南(5)——Photoview组件
PhotoView使用说明 1. PhotoView功能介绍1.1 组件介绍: PhotoView是一个继承自Image的组件,不同之处在于:它可以进行图击放大功能,手势缩放功能(暂无 ...
- HarmonyOS三方件开发指南(7)——compress组件
目录:1. 组件compress功能介绍2. 组件compress使用方法3. 组件compress开发实现 1. 组件compress功能介绍1.1. 组件介绍: compress是 ...
随机推荐
- Bastion Host (BH)
Bastion Host (BH) 堡垒机 堡垒主机是专门设计和构造成承受攻击网络上的专用计算机. 该计算机通常承载单个应用程序,例如代理服务器,并且所有其他服务都将被删除或限制以减少对计算机的威胁. ...
- ruby & rvm
ruby & rvm https://rvm.io/ Ruby Version Manager (RVM) RVM is a command-line tool which allows yo ...
- Android 获取apk的URL Schemes
1. 下载apk到你的PC上 2. 反向工程Android APK文件的工具 Apktool 3. 查看"AndroidManifest.xml"文件 See alse: http ...
- Dart http库
推荐下我写的一个http库ajanuw_http 最基本的获取数据 import 'package:http/http.dart' as http; main(List<String> a ...
- ⑧SpringCloud 实战:引入 Actuator监控+整合监控页面
Actuator是什么? Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用.这个模块是 ...
- HTML+CSS+JS速查手册下载
下载链接:https://files.cnblogs.com/files/waterr/HTML_CSS_JS%E9%80%9F%E6%9F%A5.zip
- listen EADDRINUSE: address already in use ::: 端口被占用
netstat -ano|findstr "端口号" // 查询被占用端口号的pid(3000,端口号则是被占用的端口号) taskkill /pid 8888 /F // 结束端 ...
- 免费的图片校正及漂白专业工具PicGrayRemover 0.96,专业去除文档图片黑底麻点杂色,还你一个清晰的文本。
当家长多年,每天都要拍照试卷打印.用App去掉图片黑底就成了每天必备工作.可是,有些图片文件不是来自手机,所以需要一个电脑版的图片漂白工具. 因此,经过几周的努力,图片漂白工具 PicGrayRemo ...
- Java基本概念:继承
一.简介 描述: 现实世界中的继承无处不在.比如:动物细分有哺乳动物.爬行动物等,哺乳动物细分有灵长目.鲸目等. 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模. 继承是类和类之间的一种关 ...
- Oracle VM VirtualBox的下载和安装
软件介绍 VirtualBox 是一款开源虚拟机软件,由德国 Innotek 公司开发,由Sun Microsystems公司出品的软件,使用Qt编写,在 Sun 被 Oracle 收购后正式更名成 ...