基本介绍
优酷、爱奇艺、腾讯等主流的视频类App都有视频离线下载的功能,主要目的是在wifi下将视频离线在本地,然后在无网或者4G的情况下去观看离线视频。那么阿里云播放器也提供了视频下载的功能。这个功能主要针对的是点播视频,也就是vid播放的视频的下载。
主要问题
- m3u8如何下载?我们知道m3u8是一个索引文件,真正的视频文件是各个ts的分片,那么如何下载成一个完成的视频呢?
- 如何对视频下载进行多线程控制?在一些app中,多个视频同时下载被认为是高级VIP才有的功能。
- 如何实现断点续传?当在下载过程中突然中断了,那么下次再启动的时候要能够实现续传。
- 下载过程中sts等信息过期怎么处理?
- 加密的视频下载到本地如何保障安全性呢?
实现原理
下载过程
阿里云播放器支持mp4文件和m3u8视频文件两种格式下载。其下载过程基本一致。流程图如下:
从上述流程图中可以看到,m3u8文件的下载我们会mux成一个mp4文件,首先将各个ts文件分别下载,最后的过程中再进行mux。
多线程控制
/*
功能:设置同时下载的数量,最大4个
参数:count:同时下载的个数
*/
-(void)setMaxDownloadOperationCount:(int)count;
通过上述的接口,可以设置并行下载的个数。当添加到队列中的数量多于这个设定的个数后,会在队列中进行等待,当之前的下载完成后会自动进行下一个视频的下载。
异常中断
经常有的情况是:不小心将app杀掉了,或者手机没电关机了等其他中断的因素。这个时候下次下载的时候要能够恢复之前的现场。我们提供了一个回调来通知app:
/*
功能:未完成回调,异常中断导致下载未完成,下次启动后会接收到此回调。
回调数据