m3u8点播文件下载
要使用m3u8点播文件下载功能,需要导入m3u8组件。
使用#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切片注解👈