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

转载请注明出处,大力哥的博客:http://blog.csdn.net/qq137722697

M3U8Manger (M3U8管理器)

M3U8Manger ,android端M3U8文件下载管理器,下载完成自动合并为一个ts文件

最新在做视频点播功能,有一个下载m3u8格式视频的需求,网上找了一下基本没有相关的程序,怎么办呢?自己搞一个呗。大体功能基本实现,代码还有很多需要优化的地方,欢迎fork。

  • M3U8格式视频下载(下载完成自动合并为一个ts视频文件)
  • 带下载进度(伪进度)
  • 指定下载时间段
  • 获取M3U8格式信息
  • 中途停止任务

项目地址:https://github.com/huangdali/M3U8Manger

适用性:(最新版已支持更多格式,详情见github) 适用以下格式的m3u8格式(ts切片的名字就是当前时间eg:1500480000074.ts)

#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,
...

导入:(最新版见github)

compile 'com.jwkj:M3U8Manger:v1.0.7'

获取M3U8信息:

 M3U8Manger.getInstance()
                .setUrl(url)//设置m3u8文件的url
                .getM3U8(new M3U8Listener() {
                    @Override
                    public void onStart() {
                        Log.e("hdltag", "onStart(MainActivity.java:75):开始了" );
                    }

                    @Override
                    public void onError(Throwable errorMsg) {
                        Log.e("hdltag", "onStart(MainActivity.java:75):出错了"+errorMsg );
                    }

                    @Override
                    public void onCompleted() {
                        Log.e("hdltag", "onStart(MainActivity.java:75):完成了" );
                    }

                    @Override
                    public void onM3U8Info(M3U8 m3U8) {
                        Log.e("hdltag", "onStart(MainActivity.java:75):拿到结果了"+m3U8 );
                        Log.e("hdltag", "onM3U8Info(MainActivity.java:91):" + m3U8.getTsList());
                    }
                });

下载M3U8格式的视频文件:

M3U8Manger.getInstance()
                .setUrl(url)
                .setSaveFilePath("/sdcard/11/"+System.currentTimeMillis()+".ts")
                .download(new M3U8Listener() {
                    @Override
                    public void onStart() {
                        Toast.makeText(MainActivity.this, "开始下载了", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onError(Throwable errorMsg) {
                        Log.e("hdltag", "onError(MainActivity.java:28):下载出错了" + errorMsg);
                    }

                    @Override
                    public void onCompleted() {
                        Log.e("hdltag", "onCompleted(MainActivity.java:33):下载完成了");
                    }
                      @Override
                    public void onDownloadingProgress(int total, int progress) {
                        Log.e("hdltag", "onDownloadingProgress(MainActivity.java:126):" + total + " ------ " + progress);
                    }
                });

停止任务:

    M3U8Manger.getInstance().stop();

监听器类结构体

/**
 * 加载监听器(接口类,推荐使用M3U8Listener类)
 * Created by HDL on 2017/7/24.
 */

public interface DownLoadListener {
    /**
     * 开始的时候回调
     */
    void onStart();

    /**
     * 错误的时候回调
     *
     * @param errorMsg
     */
    void onError(Throwable errorMsg);

    /**
     * 下载完成的时候回调
     */
    void onCompleted();
}
/**
 * 监听器
 * Created by HDL on 2017/7/25.
 */

public abstract class M3U8Listener implements DownLoadListener {
    public void onM3U8Info(M3U8 m3U8) {
    }

    public void onDownloadingProgress(int total, int progress) {
    }
}

版本记录(最新版见github)

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开始、结束时间

欢迎来fork,填充m3u8方面的空白。https://github.com/huangdali/M3U8Manger

你可能感兴趣的:(android)