android实现m3u8直播缓存/下载,M3U8Manger

尊重原创,转载请注明出处,原文地址: http://blog.csdn.net/qq137722697

  • M3U8格式视频下载
  • 获取M3U8格式信息
  • 中途停止任务
  • 获取下载速度
  • 支持多任务下载
  • 支持url重定向处理过的m3u8
  • 支持直播缓存

温馨提示: 项目会一直维护, 请尽量通过issue渠道提bug和改进建议(绑定过邮箱,会第一时间回复)

最新版本见GitHub仓库:https://github.com/huangdali/M3U8Manger

体验app

扫描二维码:

或打开下面的地址

https://fir.im/2g5c

适用性

适用以下格式的m3u8格式(如果名字不是时间毫秒值的话,调用获取m3u8信息的方法将得不到开始时间,但不影响下载),当然有鉴权信息也是允许的

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:10
#EXTINF:9.960,
1500480000074.ts
#EXTINF:10.190,
1500480009999.ts
#EXTINF:9.960,
1500480020246.ts
#EXTINF:9.960,
1500480030189.ts
#EXTINF:10.030,
...

导入:

compile 'com.jwkj:M3U8Manger:v2.3.0'

获取M3U8信息:

   M3U8InfoManger.getInstance().getM3U8Info(url, new OnM3U8InfoListener() {@Overridepublic void onSuccess(M3U8 m3U8) {ELog.e("获取成功了" + m3U8);}@Overridepublic void onStart() {ELog.e("开始获取信息");}@Overridepublic void onError(Throwable errorMsg) {ELog.e("出错了" + errorMsg);}});

点播下载

下载M3U8格式的视频文件:

 M3U8DownloadTask task1 = new M3U8DownloadTask("1001");
//下载按钮监听事件public void onDownload(View view) {task1.download(url, new OnDownloadListener() {@Overridepublic void onDownloading(final long itemFileSize, final int totalTs, final int curTs) {ELog.e(task1.getTaskId() + "下载中.....itemFileSize=" + itemFileSize + "\ttotalTs=" + totalTs + "\tcurTs=" + curTs);}/*** 下载成功*/@Overridepublic void onSuccess() {ELog.e(task1.getTaskId() + "下载完成了");}/*** 当前的进度回调** @param curLenght*/@Overridepublic void onProgress(final long curLenght) {if (curLenght - lastLength > 0) {final String speed = NetSpeedUtils.getInstance().displayFileSize(curLenght - lastLength) + "/s";ELog.e(task1.getTaskId() + "speed = " + speed);runOnUiThread(new Runnable() {@Overridepublic void run() {ELog.e("更新了");tvSpeed1.setText(speed);ELog.e(tvSpeed1.getText().toString());}});lastLength = curLenght;}}@Overridepublic void onStart() {ELog.e(task1.getTaskId() + "开始下载了");}@Overridepublic void onError(Throwable errorMsg) {ELog.e(task1.getTaskId() + "出错了" + errorMsg);}});}

停止任务:

      task1.stop();

直播缓存

开启缓存

 String toFile="/sdcard/" + System.currentTimeMillis() + ".ts";tvSaveFilePathTip.setText("缓存目录在:/sdcard/11m3u8/\n最终导出的缓存文件在:"+toFile);M3U8LiveManger.getInstance().setTempDir("/sdcard/11m3u8/").setSaveFile(toFile)//(设置导出缓存文件)必须以.ts结尾.caching(url, new OnDownloadListener() {@Overridepublic void onDownloading(long itemFileSize, int totalTs, int curTs) {//此回调只有curTs有意义,表示开始缓存第几个ts}@Overridepublic void onSuccess() {//此回调没有什么意义}@Overridepublic void onProgress(long curLength) {if (curLength - lastLength > 0) {//计算缓存速度final String speed = NetSpeedUtils.getInstance().displayFileSize(curLength - lastLength) + "/s";lastLength = curLength;}}@Overridepublic void onStart() {//开始缓存}@Overridepublic void onError(Throwable errorMsg) {//缓存出错了}});

获取开始缓存到当前时间的ts文件

 String filePath = M3U8LiveManger.getInstance().getCurrentTs();

温馨提示:此方法会自动合并当次任务所下载的所有ts文件,如果你不需要此方法,也可以使用com.hdl.m3u8.utils.MUtils.merge(java.util.List

停止缓存

 M3U8LiveManger.getInstance().stop();

版本记录

v2.x

v2.3.0(2018.03.07)
- 【新增】支持缓存直播类型的m3u8

v2.2.3(2018.03.06)
- 【优化】支持更多格式的ts命名

v2.1.9(2017.11.21)
- 【优化】支持url重定向处理过的m3u8

v2.1.8(2017.11.21)
- 【新增】支持m3u8中的ts名字为非时间毫秒值的格式(此时ts的开始时间为0)

v2.1.7(2017.09.12)
- 【新增】设置下载线程数方法(默认3个,建议不要设置超过5个)

v2.1.6(2017.08.15)
- 【新增】设置连接超时时间、读取超时时间

v2.1.4、v2.1.5(2017.08.14)
- 【优化】延迟删除临时文件(因为存取速度比较低的设备可能存在未移动完成而被删除情况)

v2.1.3(2017.08.14)
- 【优化】网络不稳定时的数据抖动问题

v2.1.2(2017.08.14)
- 【新增】设置是否清除临时目录的方法

v2.1.1(2017.08.14)
- 【修复】文件生成与设置的文件名字不一致问题

v2.0.8(2017.08.14)
- 【修复】设置文件保存路径时,会多出文件夹

v2.0.7(2017.08.14)
- 【修复】设置文件保存路径方法被隐藏

v2.0.6(2017.08.14)
- 【新增】断点续传
- 【新增】支持多任务
- 【优化】下载速度不准确问题

V1.x

v1.0.8(2017.08.08)
- 【新增】onLoadFileSizeForItem方法(获取单个ts文件的平均大小)
- 可根据这个平均值x总的切片个数(total)=总文件的大小

v1.0.7(2017.07.31)
- 【修复】获取M3U8信息不走onStart的bug

v1.0.6
- 【修复】指定下载的区间时间不准问题

v1.0.5
- 【修复】下载成功走的是onStart
- 【新增】指定下载的区间

v1.0.4
- 【新增】获取M3U8基本信息方法
- 【新增】停止任务方法

v1.0.3
- 【修复】url失效时抛出异常
- 【新增】M3U8开始、结束时间

android实现m3u8直播缓存/下载,M3U8Manger相关推荐

  1. Android——实现m3u8视频缓存

    1.M3U8协议 HLS(HTTP Live Streaming)是苹果公司针对iPhone.iPod.iTouch和iPad等移动设备而开发的基于HTTP协议的流媒体解决方案.在 HLS 技术中 W ...

  2. Android,播放m3u8视频和下载m3u8的视频

    因最近项目需要,研究了一个礼拜的m3u8.格式为m3u8的视频,其实是由多个.ts文件组成在一起播放的.下面有些资料是参考了网上的,总体概括下实现思路: 1.根据后台给出的m3u8的地址,实现播放,核 ...

  3. Android端M3U8视频下载管理器----M3U8Manger

    转载请注明出处,大力哥的博客:http://blog.csdn.net/qq137722697 M3U8Manger (M3U8管理器) M3U8Manger ,android端M3U8文件下载管理器 ...

  4. iOS m3u8本地缓存播放(控制下载并发、暂停恢复)

    一m3u8缓存播放的整个流程 二控制媒体下载的并发数 三控制单个媒体的切片下载并发数 四下载的中断和恢复 总结下任务生命周期中的任务状态变化 五注意的问题与思路延伸 一.m3u8缓存播放的整个流程 1 ...

  5. Android进阶之路 - 批量下载、缓存图片、视频

    之前已经记录过,批量下载图片和缓存本地的方式,此篇主要记录批量下载图片.视频,同时缓存在本地的功能实现 关联篇 Android进阶之路 - 批量下载.缓存图片 Android进阶之路 - 批量下载.缓 ...

  6. Android进阶之路 - 批量下载、缓存图片

    在日常项目开发中,关于图片批量下载,数据缓存的相关功能比比皆是,这次也是去年在项目中需要在本地缓存商品数据,所以用到了批量下载的功能,特此记录 ~ 关联篇 Android进阶之路 - 批量下载.缓存图 ...

  7. android 直播 app下载地址,蓝泡泡直播

    蓝泡泡直播安卓app带你引领最新的直播潮流,更多精彩的节目,更加有趣的平台互动,全都可以在这里体验到,你可以随时随地的打开手机,观看美轮美奂的精彩节目,各种精彩节目让你看了还想看,每时每刻都有人陪伴你 ...

  8. Android电视直播 v5.6,龙龙直播app下载|龙龙直播apk2019官方版下载 v5.6.1 安卓版 - 数码资源网...

    用手机看电视直播,首先你需要把龙龙直播app下载到手机上,龙龙直播apk2019官方版值得推荐,因为龙龙直播apk2019官方版支持全国各地的地方电视台的直播节目,而且都是高清的哦!同时APP支持手机 ...

  9. uniapp项目引入Dplayer.js以及hls.js用来解析播放m3u8直播流视频文件,文末有项目代码可供下载

    1.下载依赖 npm i dplayer -S npm i hls.js -S 2.vue页面 <template><view class="content"&g ...

  10. 音视频开发之旅(51)-M3U8边缓存边播放

    目录 MP4的"问题" m3u8是什么 m3u8的好处 源码分析 扩展思考:mp4能不能像m3u8一样进行分片缓存呐? 资料 收获 一.MP4的"问题" 我们上 ...

最新文章

  1. SpiderMonkey-让你的C++程序支持JavaScript脚本
  2. 如何理解clone对象
  3. python文件写入字典格式输出_Python把对应格式的csv文件转换成字典类型存储脚本的方法...
  4. Archive object standard check
  5. 【原创】MapReduce编程系列之表连接
  6. redis笔记——redis事务及锁应用
  7. LeetCode 97. 交错字符串(DP)
  8. 利用DAAB 获取存储过程返回值的方法
  9. 简单php web ftp服务器,php 上传文件到ftp服务器的简单示例(单文件)
  10. 一个js编写全选、弹出对话框、ajax-json的案例
  11. java sql小区物业管理系统_小区物业管理系统javasql.doc
  12. QT Libvlc播放视频时捕获鼠标和键盘事件
  13. 小米电视换鸿蒙,DIY 篇一:迟来的小米电视主机改造,完美增加红外接收(红外遥控)...
  14. 炒币碰到熊市的应对方法,炒币者的八大口诀
  15. python爬取豆瓣电影top250_【Python3爬虫教程】Scrapy爬取豆瓣电影TOP250
  16. DB DBS 和DBMS区别
  17. 使用JAVA调用U盾进行客户认证的total solution
  18. web服务器—nginx
  19. 电动机降压启动电路图全解
  20. SETI@home——在家搜寻外星人的计划

热门文章

  1. flashfxp连接centos7失败原因之一
  2. url转码解码工具类
  3. 基于连续小波变换和卷积神经网络的轴承故障诊断研究
  4. 电脑上的字体安装教程
  5. JSON 对比工具,优秀的JSON对比工具,对比json数据
  6. 关于java语言的基本介绍
  7. 半空间数据空间化相关接口
  8. (FPGA学习)环境及入门-------基于黑金FPGA cyclone IV EP4CE15F17开发板
  9. Chapter 6. MATLAB数值计算基础
  10. 计算机编码--3.GB2312与GBK