m3u8点播文件下载(需要3.6.5_beta_1以上版本)
使用asM3U8()
方法下载m3u8点播文件
Aria.download(this)
.load(mUrl) // 设置点播文件下载地址
.setFilePath(mFilePath, true) // 设置点播文件保存路径
.asM3U8() // 调整下载模式为m3u8点播
.start()
一、ts文件处理
当所有的ts文件都下载完成后,aria框架会自动将所有ts文件合并为一个文件,如果你不希望合并ts文件,那么你可以使用merge(false)
设置不合并文件ts文件。</br>
ts文件路径说明:</br>
如果filePath为/sdcard/download/test.ts
,那么ts文件路径就是/sdcard/download/.test.ts/
1.1、自动合并ts文件
merge(boolean merge)
参数 | 类型 | 说明 |
---|---|---|
Merge | Boolean | True:下载完成后自动将所有ts文件合并为一个文件 |
1.2、手动合并ts文件
如果你希望手动合并ts文件或ts文件是加密的,你可以使用以下接口完成你需要的操作。
setMergeHandler(ITsMergeHandler handler)
参数 | 类型 | 说明 |
---|---|---|
keyInfo | M3U8KeyInfo | 密钥信息,如果没有密钥则为空 |
tsPath | List |
ts文件保存地址列表 |
Aria.download(M3U8VodDownloadActivity.this)
.load(mUrl)
.setFilePath(mFilePath, true)
.asM3U8()
.setMergeHandler(new ITsMergeHandler() {
@Override public boolean merge(@Nullable M3U8KeyInfo keyInfo, List<String> tsPath) {
return false;
}
})
.start();
二、url转换器
对于某些m3u8文件来说,ts文件的url地址有可能不是可直接下载的http连接,为来能正常下载ts文件,你需要使用以下接口将url转换为可正常访问的http地址。
setTsUrlConvert(IVodTsUrlConverter converter)
参数 | 类型 | 说明 |
---|---|---|
converter | IVodTsUrlConverter |
IVodTsUrlConverter的convert
说明
参数 | 类型 | 说明 |
---|---|---|
m3u8Url | String | m3u8文件下载地址 |
tsUrls | List |
ts文件下载地址列表 |
Aria.download(M3U8VodDownloadActivity.this)
.load(mUrl)
.setFilePath(filePath)
.asM3U8()
.setTsUrlConvert(new IVodTsUrlConverter() {
@Override public List<String> convert(String m3u8Url, List<String> tsUrls) {
int index = m3u8Url.lastIndexOf("/");
String parentUrl = m3u8Url.substring(0, index + 1);
List<String> newUrls = new ArrayList<>();
for (String url : tsUrls) {
newUrls.add(parentUrl + url);
}
return newUrls;
}
})
.start();
三、多码率适配
3.1 选择码率
如果你的m3u8文件是支持多码率的,并且你希望下载指定码率的文件,那么你可以使用setBandWidth()
来设置对应码率,如果不设置码率,架默认采用第一个码率。
Aria.download(this)
.load(mUrl)
.setFilePath(filePath)
.asM3U8()
.setBandWidth(11111) // 码率
.start();
3.2、m3u8码率url转换器
对于某些服务器返回的多码率m3u8文件来说,对于码率的m3u8文件地址可能不是可直接访问的http地址,为了能正常获取到对应码率的m3u8文件,你需要使用以下方法转换url。
setBandWidthUrlConverter(String bandWidthUrl)
参数 | 类型 | 说明 |
---|---|---|
bandWidthUrl | String | 原始码率地址 |
Aria.download(M3U8VodDownloadActivity.this)
.load(mUrl)
.setFilePath(mFilePath, true)
.asM3U8()
.setBandWidthUrlConverter(new IBandWidthUrlConverter() {
@Override public String convert(String bandWidthUrl) {
int index = mUrl.lastIndexOf("/");
return mUrl.substring(0, index + 1) + bandWidthUrl;
}
})
.start();
四、其它api
4.1 设置点播文件大小
由于m3u8协议的特殊性质,无法有效快速获取到正确到文件长度,如果你需要显示文件中长度,你需要自行设置文件大小。
.asVod().setFileSize(long fileSize)
4.2 设置同时下载的ts分片数量
默认情况下,对于同一点播文件的下载,最多同时下载4个ts分片,如果你希望增加或减少同时下载的ts分片数量,可以使用以下方法。
.asVod().setMaxTsQueueNum(int num)