说实话之前都没做过视频下载,这次做了才了解一下,我写博客就是为了防止忘记.好记性不如烂笔头,我记性很差,简单记录一下方便以后查找.
1.我做视频下载的时候Http三方库用的是ASIHttp,很古老的一个,几年前已经停止更新了,公司项目一直用的这个,我这个刚来的一时想改也改不了.后期肯定会替换.
2.视频下载其实很简单,创建下载请求,然后给他一个临时文件路径,一个最终存储路径,请求启动就OK了,剩下的不用操心了.
临时文件路径存储视频下载的中间文件.下载成功后会自动存储到最终存储路径中.
设置临时路径.
request.temporaryFileDownloadPath = tempFilepath;
很关键的一点,设置允许断点续传.
request.allowResumeForFileDownloads = YES;
3.关于下载队列
多个视频下载免不了用到队列,ASI中已经封装好了一个类ASINetwokQueue,创建的请求都加到queue里面,他就会一个个执行,当然你可以同时下载多个,这个可以设置.
4.当然下载对应的还有取消下载,怎么取消?
找到你要取消那个请求,调用 [operation cancel] 或者[operation clearDelegatesAndCancel],只不过前者是会调用请求失败的回调,后者不会.看情况选择.
5.如果队列里其中一个请求失败了,默认其他请求也会自动取消下载,如果不想这样,就设置队列的一个属性:
[_requestQueue setShouldCancelAllRequestsOnFailure:NO];
6.关于进度每个请求都可以跟踪下载进度,你可以用第三方已经提供的 : [_request setDownloadProgressDelegate:self];然后就可以 利用下面这个回调去在UI上更新你的进度的.
- (void)setProgress:(float)newProgress{
//这个地方更新你的进度
}
当然这个是没有具体下载多少字节的数据的,你可以在 - (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data;这个方法里面去获取你下载的字节数
[self.fileData appendData:data];
self.fileData.length就是当前已下载的字节数.自己转化成K 或者MB 或者GB