m3u8点播文件下载

要使用m3u8点播文件下载功能,需要导入m3u8组件。

implementation 'com.arialyy.aria:m3u8Component:3.7.10'

使用#m3u8VodOption(option)方法下载m3u8点播文件。
⚠️在m3u8点播文件下载中,所有的设置都在M3U8VodOption中配置。

M3U8VodOption option = new M3U8VodOption(); // 创建m3u8点播文件配置
long taskId = Aria.download(this)
        .load(mUrl) // 设置点播文件下载地址
        .setFilePath(mFilePath, true) // 设置点播文件保存路径
        .m3u8VodOption(option)   // 调整下载模式为m3u8点播
        .create()

M3U8VodOption配置

创建点播下载配置对象。

M3U8VodOption option = new M3U8VodOption();

一、ts文件处理

当所有的ts文件都下载完成后,aria框架会自动将所有ts文件合并为一个文件,如果你不希望合并ts文件,那么你可以使用option.merge(false)设置不合并文件ts文件。
ts文件路径说明:
如果filePath为/sdcard/download/test.ts,那么ts文件路径就是/sdcard/download/.test.ts/

1.1、自动合并ts文件

option.merge(boolean merge)
参数 类型 说明
Merge Boolean True:下载完成后自动将所有ts文件合并为一个文件

1.2、手动合并ts文件

如果你希望手动合并ts文件或ts文件是加密的,你可以使用以下接口完成你需要的操作。
⚠️为了防止内存泄漏,请务必使用文件类或静态的成员类。

option.setMergeHandler(ITsMergeHandler handler);
参数 类型 说明
M3U8Entity m3u8实体对象 包含有m3u8下载信息,如:密钥信息,文件保存路径等
tsPath List ts文件保存地址列表

例子: 创建Ts文件合并器

private static class  TsMergeHandler implements ITsMergeHandler{
    public boolean merge(@Nullable M3U8Entity m3U8Entity, List<String> tsPath) {
      ALog.d("TsMergeHandler", "合并TS....");
         String keyPath = m3u8Entity.getKeyPath();
         String keyIv = m3u8Entity.getIv();
      return false;
    }
}

设置Ts文件合并器

optopn.setMergeHandler(new TsMergeHandler());
long taskId = Aria.download(this)
        .load(mUrl)
        .setFilePath(mFilePath, true)
        .m3u8VodOption(option)
        .create();

二、url转换器

对于某些m3u8文件来说,ts文件的url地址有可能不是可直接下载的http连接,为来能正常下载ts文件,你需要使用以下接口将url转换为可正常访问的http地址。
⚠️为了防止内存泄漏,请务必使用文件类或静态的成员类。

option.setVodTsUrlConvert(IVodTsUrlConverter converter)
参数 类型 说明
converter IVodTsUrlConverter

IVodTsUrlConverter的convert说明

参数 类型 说明
m3u8Url String m3u8文件下载地址
tsUrls List<String> ts文件下载地址列表

例子: 创建ts的url转换器

private static class VodTsUrlConverter implements IVodTsUrlConverter {
    @Override public List<String> convert(String m3u8Url, List<String> tsUrls) {
        // 转换ts文件的url地址
      Uri uri = Uri.parse(m3u8Url);
      String parentUrl = "http://" + uri.getHost();
      List<String> newUrls = new ArrayList<>();
      for (String url : tsUrls) {
        newUrls.add(parentUrl + url);
      }

      return newUrls; // 返回有效的ts文件url集合
    }
  }

设置ts文件的url转换器。

option.setVodTsUrlConvert(new VodTsUrlConverter());
long taskId = Aria.download(this)
        .load(mUrl)
        .setFilePath(filePath)
        .m3u8VodOption(option)
        .create();

三、多码率适配

3.1 选择码率

如果你的m3u8文件是支持多码率的,并且你希望下载指定码率的文件,那么你可以使用option.setBandWidth()来设置对应码率,如果不设置码率,架默认采用第一个码率。

 option.setBandWidth(11111) // 码率
 Aria.download(this)
     .load(mUrl)
     .setFilePath(filePath)
     .m3u8VodOption(option)
     .create();

3.2、m3u8码率url转换器

对于某些服务器返回的多码率m3u8文件来说,对于码率的m3u8文件地址可能不是可直接访问的http地址,为了能正常获取到对应码率的m3u8文件,你需要使用以下方法转换url。
⚠️为了防止内存泄漏,请务必使用文件类或静态的成员类。

option.setBandWidthUrlConverter(String bandWidthUrl)
参数 类型 说明
bandWidthUrl String 原始码率地址

例子: 创建码率url转换器

static class BandWidthUrlConverter implements IBandWidthUrlConverter {
    private String url;
    BandWidthUrlConverter(String url) {
      this.url = url;
    }

    @Override public String convert(String bandWidthUrl) {
      int index = url.lastIndexOf("/");
      return url.substring(0, index + 1) + bandWidthUrl;
    }
  }

设置码率转换器

option.setBandWidthUrlConverter(new BandWidthUrlConverter(mUrl));
long taskId = Aria.download(this)
        .load(mUrl)
        .setFilePath(mFilePath, true)
        .m3u8VodOption(option)
        .create();

四、其它api

4.1 设置点播文件大小

由于m3u8协议的特殊性质,无法有效快速获取到正确到文件长度,如果你需要显示文件中长度,你需要自行设置文件大小。

option.setFileSize(long fileSize)

4.2 设置同时下载的ts分片数量

默认情况下,对于同一点播文件的下载,最多同时下载4个ts分片,如果你希望增加或减少同时下载的ts分片数量,可以使用以下方法。

option.setMaxTsQueueNum(int num)

4.3 自动生成索引文件

设置自动生成索引文件后,将不会合并ts文件

option.generateIndexFile()

4.4 密钥url转换器

密钥url转换器,对于某些服务器,密钥的下载地址是被加密的,因此需要使用该方法将被加密的密钥解密成可被识别的http地址。 ⚠️为了防止内存泄漏,请务必使用文件类或静态的成员类。

option.setKeyUrlConverter(convert)

例子: 创建转换器

static  class KeyUrlConverter implements IKeyUrlConverter{

    @Override public String convert(String keyUrl) {
        ALog.d("TAG", "convertUrl....");
    return newUrl;
  }
}

设置转换器:

option.setKeyUrlConverter(new KeyUrlConverter());
long taskId = Aria.download(this)
        .load(mUrl)
        .setFilePath(mFilePath, true)
        .m3u8VodOption(option)
        .create();

其它

👉M3U8切片注解👈

Copyright © 2018 laoyuyu. | 蜀ICP备17031160号.            更新时间: 2019-12-03

results matching ""

    No results matching ""