m3u8直播文件下载

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

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

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

M3U8LiveOption配置

创建点播下载配置对象。

M3U8LiveOption option = new M3U8LiveOption();

一、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)
        .m3u8LiveOption(option)
        .create();

二、url转换器

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

option.setTsUrlConvert(ILiveTsUrlConverter converter)
参数 类型 说明
converter ILiveTsUrlConverter

ILiveTsUrlConverter的convert说明 | 参数 | 类型 | 说明 | | :---: | :---: | :---: | | m3u8Url | String | m3u8文件下载地址 | | tsUrl | tsUrl | ts文件下载地址 |

例子: 创建ts的url转换器

  private static class LiveTsUrlConverter implements ILiveTsUrlConverter {
    @Override public String convert(String m3u8Url, String tsUrl) {
      int index = m3u8Url.lastIndexOf("/");
      String parentUrl = m3u8Url.substring(0, index + 1);
      return parentUrl + tsUrl; // 组成有效的下载地址
    }
  }

设置ts文件的url转换器。

option.setLiveTsUrlConvert(new LiveTsUrlConverter());
long taskId = Aria.download(this)
        .load(mUrl)
        .setFilePath(filePath)
        .m3u8LiveOption(option)
        .create();

三、多码率适配

3.1 选择码率

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

 option.setBandWidth(11111) // 码率
 Aria.download(this)
     .load(mUrl)
     .setFilePath(filePath)
     .m3u8LiveOption(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)
        .m3u8LiveOption(option)
        .create();

四、其它api

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

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

option.setMaxTsQueueNum(int num)

4.2 自动生成索引文件

设置自动生成索引文件后,将不会合并ts文件。如果是直播文件下载,创建索引文件的操作将导致只能同时下载一个切片。

option.generateIndexFile()

4.3 密钥解密转换器

密钥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();

更多设置

Copyright © 2018 laoyuyu. | 蜀ICP备17031160号.            更新时间: 2020-04-18

results matching ""

    No results matching ""