m3u8Downloader实现了m3u8流下载功能,如果是视频流一般保存为.mp4,如果是音频流一般保存为.mp3,请根据你下载的具体内容设置文件扩展名。
简单说一下插件的下载流程:
首先调用startService方法启动服务,然后调用downloadM3u8File方法开始下载,后台服务会启动下载任务,在指定root文件夹下
先生成一个以md5(url)为名字的缓存目录,这里面会缓存下载的文件,当下载到100%的时候,会合并缓存里面的文件,新建一个命名为saveName(如果指定了的话,没有指定用默认的)
的文件,这个就是用户想要下载的文件,然后会删除对应的缓存目录和缓存文件。
文件默认是下载 到sdcard的,现在主流的手机都基本上有16G内存大小。目前插件限制了用户必须有内存卡(包括内置的或扩展的)才能调用。要知道现在没内存卡的手机微信都拒绝安装了。
启动下载服务。
startService({params}, callback(ret))
root:
ret:
{
status: 2 , //服务启动中=1,服务已启动或服务启动成功=2
msg : "" //提示信息
}
var m3u8Downloader = api.require('m3u8Downloader');
m3u8Downloader.startService({
"root": "123"
}, function(ret){
api.alert({msg: JSON.stringify(ret)})
});
Android系统
下载m3u8文件。因为下载是耗时操作,虽然downloadM3u8File就立即返回结果,但并不表示已经下载完成,想查询下载进度,要调用后面的方法getProgress。
downloadM3u8File({params}, callback(ret))
url:
saveName:
ret:
{
code: -1 , //-1表示失败,其它数字表示已经开始在下载。
msg : "" , //提示信息
saveName : "" //保存的文件名
}
var m3u8Downloader = api.require('m3u8Downloader');
m3u8Downloader.startService({
"root": "123"
},function(ret){
alert("startService=" + JSON.stringify(ret));
if(ret.status==2){
m3u8Downloader.downloadM3u8File({
"url": "http://vfile1.grtn.cn/2017/1495/8032/4055/149580324055.ssm/149580324055.m3u8",
"saveName":"test.mp4"
}, function(ret){
alert("downloadM3u8File=" + JSON.stringify(ret));
})
}
});
Android系统
查询下载进度。
getProgress({params}, callback(ret))
url:
ret:
{
code: 0 , //-1表示失败,其它数字表示成功。
msg : "" , //提示信息
progress : 0.262656 //0到1之间的浮点数,自己可以*100并且toFixed(2)换算成2位数的百分比。
}
var m3u8Downloader = api.require('m3u8Downloader');
m3u8Downloader.getProgress({
"url": "http://vfile1.grtn.cn/2017/1495/8032/4055/149580324055.ssm/149580324055.m3u8"
}, function(ret){
if(ret.code==0){
if(ret.progress==1){
alert("下载完成");
}else{
var p = (ret.progress*100).toFixed(2);
alert(p + "%");
}
}
});
Android系统