上一章传送:https://blog.csdn.net/mzy24511cs/article/details/80577418。

PS:最新补充说明,Vitamio各版本之间存在差异,我最近升级了5.0最新的版本,无法使用边播边缓存了。他们的最新版为了修复6.0以上系统的一个bug,更换了libffmpeg的库,估计还没有实现这个功能。否则会发生has text relocations 的闪退异常。如果你的编译版本低于23,可以继续使用4.2版本的Vitamio。否则,建议升级5.0版本并且暂时不要使用这个方法。

上一篇介绍了怎样做一款功能强大的视频播放器,是基于Vitamio框架开发的。这里我们再补充一个功能:如何做到视频边播放边缓存到本地?

这个需求还挺常见的。由于用户的网络环境复杂,经常会有网速较慢看视频时卡顿、缓冲的现象,并且有时候我们需要频繁的拖拽进度条,如果播放的是在线视频每次拖拽后的loading间隔十分影响用户体验。那么我们能不能在播放视频的时候同时将视频缓存保存到手机本地,再次播放的时候直接使用缓存播放呢?

答案是肯定的。 下面我们就来讲一下Vitamio框架下如何让自己的播放器实现边播边缓存。

首先我们找到这个方法:

io.vov.vitamio.MediaPlayer.setDataSource()
io.vov.vitamio.widget.VideoView.setVideoPath()

这两个方法是一样的,用来设置播放路径。既可以是离线的,也可以是在线的。现在只需要在播放路径参数前加一串字符,即:

cache:本地缓存的路径:视频播放路径

例如:

cache:/storage/emulated/0/Android/data/com.shengcai/readideoCache/0ad4144c-8f01-4e84-e32e-b7202ae.MP4:视频播放路径

这样Vitamio就会自动处理,将在线视频播放的同时,缓存到你制定的路径下面了。只要缓存文件存在,再次播放该视频时,将使用缓存文件,播放时的卡顿、缓冲,以及拖拽进度后的延迟都不复存在了。是不是很爽呢。

PS:这里不需要做任何处理,当然如果你想要在界面上显示缓存的信息或者提示。Vitamio也提供了相应的监听接口:

public interface OnCachingUpdateListener {/*** Called to update status in caching a media stream. Caching is storing* data on external storage while buffering in memory.** @param mp       the MediaPlayer the update pertains to* @param segments the cached segments in bytes, in format [s1begin, s1end,*                 s2begin, s2end], s1begin < s1end < s2begin < s2end. e.g. [124,*                 100423, 4321412, 214323433]*/void onCachingUpdate(MediaPlayer mp, long[] segments);/*** Cache speed** @param mp    the MediaPlayer the update pertains to* @param speed the cached speed size kb/s*/void onCachingSpeed(MediaPlayer mp, int speed);/*** Cache start* @param mp*/void onCachingStart(MediaPlayer mp);/**  * Cache compelete  */  void onCachingComplete(MediaPlayer mp); /*** Cache not available** @param mp   the MediaPlayer the update pertains to* @param info the not available info*             <ul>*             <li>{@link #CACHE_INFO_NO_SPACE}*             <li>{@link #CACHE_INFO_STREAM_NOT_SUPPORT}*             </ul>*/void onCachingNotAvailable(MediaPlayer mp, int info);
}

你只需要设置setOnCachingUpdateListener()方法就行了。

说明:onCachingUpdate将返回视频缓存片段的进度信息,单位时字节B

onCachingSpeed将返回视频缓存的速度,单位是KB/S

onCachingNotAvailable在视频无法缓存时返回,例如缓存路径不存在时。

需要注意的时onCachingStart和onCachingComplete这两个方法不知道是不是API的问题,缓存时并没有触发。若有需要监听缓存完成事件的,可以考虑从onCachingUpdate方法入手。

最后要做的就是缓存的管理了,毕竟缓存多了的话还是很消耗手机存储的。记得及时清理哦。

【原创】关于视频播放器如何做到边播边缓存?【如何用Vitamio做一款功能强大的视频播放器补充篇】相关推荐

  1. 游戏修改器(Quick Memory Editor) - 是一款功能强大的游戏修改工具

    继上期介绍GameEnchanter游戏修改器和萝卜游侠之后,今天我再来介绍一款全新的游戏修改器.游戏修改器(Quick Memory Editor)是一款功能强大的游戏修改(作弊)工具.游戏修改器通 ...

  2. 用Python做一款自己的TK创建器

    很多人想做一款属于自己的编译器吧!今天,我们来做一款简易TK创建器. 分析: 1,询问模式 2,根据模式输入指令个数 3,创建GUI和该指令 4,显示 首先,我们要询问模式.这边分为2种模式,分别是单 ...

  3. 评测三款功能强大的epub阅读器(windows适用)

    epub格式的电子书,其强大之处相比于txt.pdf来说,相比书迷们都有所体会.但它也有个弊端,不像txt.pdf一样有那么多阅读器支持解析和编辑.下面我下载了几款epub阅读器,简要评测一下,为大家 ...

  4. (转载)封装bilibili播放器,自定义边下边播和缓存功能

    感谢并转载自:https://www.jianshu.com/p/264324559c07 源码下载,欢迎star 演示Demo下载 image 本项目使用播放器是ijkplay, 并且进行封装和修改 ...

  5. php音视频边下边播,封装bilibili播放器,自定义边下边播和缓存功能

    image 本项目使用播放器是ijkplay, 并且进行封装和修改主要功能: 1.重新编辑ijkplay的so库, 使其更精简和支持https协议 2.自定义MediaDataSource, 使用ok ...

  6. 【原创】从头开始,使用安卓系统WebView做一个功能强大的Epub阅读器(五)

    上一章传送:https://blog.csdn.net/mzy24511cs/article/details/80563448. 这一章专门讲一下阅读器的各种工具栏. 1.背景音乐.这个工具简单,用M ...

  7. Mac上几款好用的视频播放器推荐

    在这个普遍都压力很大的时代,摆脱了繁忙的工作之后,最最重要的,就是娱乐生活了.而娱乐生活中,大部分的小伙伴们又以看视频为主.那么想要愉快的观看视频,一个好用的视频播放器就必不可少啦~今天佐佐就要给大家 ...

  8. html查看器查看图片,jQuery功能强大的图片查看器插件

    viewer是一款功能强大的图片查看器jQuery插件.它可以实现ACDsee等看图软件的部分功能.它可以对图片进行移动,缩放,旋转,翻转,可以前后浏览一组图片.该图片查看器还支持移动设备,支持键盘控 ...

  9. Extreme Picture Finder(网络图片下载器)官方中文版V3.53.3 | 下载网页图片的软件 | 图片助手批量图片下载器

    Extreme Picture Finder 是一款功能强大的集网络图片下载器软件和网页视频下载软件于一体的综合性互联网素材采集工具,能帮助广大用户自动下载并保存几乎所有互联网上面的图像.视频.音乐以 ...

最新文章

  1. eval解析json注意点
  2. 安徽 职称 计算机 英语,【安徽省评职称不再考职称英语、职称计算机】- 环球网校...
  3. DLNA, PulseAudio, diffpatch, bash
  4. java ee junit_JavaEE——Junit
  5. python 识别 None,NaN,null,‘‘,‘ ‘ 等无意义的值
  6. MyEclipse配置进行Hibernate逆映射
  7. VS2013 调用的目标发生了异常
  8. python如何导入hotp库_Google Authenticator在Python中的实现
  9. php和xml区别,html与xhtml和xml有什么区别
  10. linux 串口终端源码,LINUX 串口通讯源码
  11. 阿里P3C自定义规则后本地打包成IDEA插件
  12. 实用PS-抠图换背景
  13. SHIMANO各个等级配件的区别
  14. springboot整合log4j2报错Unexpected filename extension of file[file__E__classes_log4j2.yml].Should be .xm
  15. 用python对S曲线加减速建模
  16. RPM软件包和YUM软件仓库的实例
  17. 恶意代码修改IE和注册表恢复全集
  18. 在win10下安装eclipse
  19. jar包(依赖jar 运行jar)
  20. CPU比GPU训练神经网络快十几倍,英特尔:别用矩阵运算了

热门文章

  1. 信息安全学习1. 基本概念及一些国家标准
  2. OpenStack保姆级别安装教程
  3. [双系统]安装双系统的步骤及注意事项(含分区工具介绍)
  4. PB反编译专家 PB Decompiler V2020.01.21 支持PB5.0到2019全部版本
  5. 前端技术周刊 2018-10-08:WebGL
  6. JS扫雷小游戏(DOM (html+css+js))
  7. Sublime Text配置及运行
  8. Java实现蜘蛛纸牌
  9. squid for windows 2.6版
  10. 名编辑电子杂志大师教程 | 名编辑电子杂志大师能制作高清电子期刊吗?