更多内容请访问:Harmonyos技术社区https://harmonyos.51cto.com与华为合作搭建官方介绍对于视频播放器app大家都是熟悉它,在我们的日常生活中随处可见,但对于用户来说,最重要的是如何节省流量,使用方便,观看视频顺畅。AndroidVideoCache的学习文档和教程在各大网站上已经很多了,层出不穷,但是对于鸿蒙来说,还是一个全新的领域。于是,鸿蒙版VideoCache顺势而为,华丽诞生。功能介绍鸿蒙VideoCache视频缓存组件,主要功能包括:视频缓冲、在线视频播放、下载时缓存、同时缓冲进度和播放进度、拖放播放、横竖屏切换、音量调节等主要功能。模拟器效果图如下:1.竖屏状态:2.横屏状态接下来的内容是重中之重。对于开发者来说,如何简单快速的使用VideoCache视频缓存组件是开发者最关心的问题。下面详细介绍VideoCache的使用和开发指南。VideoCache使用指南?新建项目,添加组件Har包依赖在application模块中添加HAR,复制videocachelibrary-debug.har到entry\libs目录即可?修改配置文件1.在entry下的build.gradle中添加依赖库的结构如图所示:1.修改代码中的配置:a. 在基类中实例化代理服务,核心代码如下:httpProxyCacheServer=newHttpProxyCacheServer.Builder(theApplication).headerInjector(newUserAgentHeadersInjector()).maxCacheSize(1024*1024*1024)//1Gbforcache.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=newPlayerVideo(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().setDisplayOriento(AbilityInf.DisplayOrientation.UNSPECIFIED);//AbilitySlice.getAbility().setDisplayOrientation(AbilityInfo.DisplayOrientation.FOLLOWRECENT);*初始化播放器player=newPlayer(context);surfaceProvider.pinToZTop(false);java.util.Optionaloptional=surfaceProvider.getSurfaceOps();SurfaceOpssurfaceOps=optional.get();surfaceOps.addCallback(newVideoSurfaceCallback(surfaceOps,loadUrl,player,this));*播放方法player.play();*暂停播放方法player.pause();1.VideoCache开发指南上面已经大致提到了VideoCache的功能点,视频缓冲,在线视频播放,下载时缓存,同时缓冲进度和播放进度,拖动播放,横竖屏切换,音量调整等主要功能,然后对主要实现方式一一讲解在视频播放器中,最常见的就是缓冲进度条。进度条用户可以直观的看到缓冲了多少视频,缓冲了多长时间。进度条设置代码如下:progressBar.setMaxValue(100);progressBar.setMinValue(0);progressBar.setProgressValue(cacheProgress);根据缓冲的字节,可以计算cacheProgressMaxValue。cacheProgressMaxValue的值不固定为100,也可以根据视频的时长和字节数来设置,然后计算百分比,根据具体需要设计。MinValue设置进度的起点。初始起始点必须为0,但是当视频播放到一半的时候暂停,开始的时候需要设置为暂停时的值,这样就不会回0到观看视频。最后,既然是视频缓存组件,那么最重要的就是如何缓存。接下来重点介绍:VideoCache主要通过代理策略将网络请求代理到本地服务。本地端决定是从本地缓存中获取数据还是发起网络请求。如果发起网络请求时,首先将数据写入缓存,然后在本地提供视频数据给视频播放器。参考下图:这样就实现了边播放边缓存的策略。具体步骤如下:1.在项目的基类中初始化一个全局代理服务HttpProxyCacheServer。2.生成缓存文件名。默认是使用MD5方法生成密钥。考虑到一些业务逻辑,我们也可以继承一个FileNameGenerator来实现自己的策略,具体代码如下:3.本地代理实现策略,先在本地构造一个127.0.0.1的ServerSocker,随机分配一个端口,然后启动一个线程来执行WaitRequestsRunnable,在其中执行waitForRequest,并通过accept()方法监听此服务器套接字上的入站连接,accept()方法将阻塞,直到客户端尝试建立连接。1、FileCache类规定缓存文件的命名格式(后面加.download)和存储路径,完成缓存文件的创建。2.Files类该类是对JAVA中原有File类的封装。原来的File类只能处理一个文件,Files类可以同时处理多个文件。在下面的代码中,getLruListFiles()方法的参数是一个目录。方法中,拆分目录(文件夹路径)下的所有文件,返回一个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”更多内容请访问:与华为官方共建的Harmonyos技术社区https://harmonyos.51cto.com