欢迎光临散文网 会员登陆 & 注册

Promise并发下载m3u8视频

2023-05-15 22:49 作者:小老虎Tigger  | 我要投稿

由于很多视频网站是根据m3u8文件来播放视频,所以如果要下载视频,就要下载对应m3u8文件,再去根据m3u8文件解析获取到所有单个文件的url,然后下载每一个单独的文件,再合并。

我们先需要解析一下m3u8文件,获取所有url

m3u8文件

如果视频文件比较大,那么获取到的url数量可能会有上百个,如果我们每一个请求都是同步顺序完成,比较耗费时间。一般情况下,都会使用Promise.all来处理,但是Promise.all并不能一直保持固定的请求数,假设我们有100个请求,在100个请求没有完成之前,需要一直保持有10个请求在执行(不考虑浏览器限制),如果每次使用Promise.all发送10个请求,那么在这10个请求中的其中两个完成后,并没有其他请求补充进来,这个时候实际上只有8个请求在执行。

那么,我们来简单实现一个并发的函数,让100个请求在完全执行完之前,都保持着固定数量的连接数量。

首先,我们定义一个函数,接受两个参数,一个是url列表,一个是最大连接数。函数返回一个Promise,所有请求成功,返回所有结果的result,如果有某个请求失败,则reject。

核心是在每个请求完成之后继续消耗url列表,一直保持设置的并发数量。


Promise并发下载m3u8视频的评论 (共 条)

分享到微博请遵守国家法律