介绍通过iOS系统安全下载的方法。

背景信息

视频下载的基本流程如下:

创建并设置下载器->设置事件监听->准备下载源->准备成功后选择下载项->更新下载源并开始下载->下载成功/失败后,释放下载器。

操作步骤

  1. 创建并设置下载器。
    创建下载器。代码如下:
    AliMediaDownloader *downloader = [[AliMediaDownloader alloc] init];
    [downloader setSaveDirectory:self.downLoadPath];
    [downloader setDelegate:self];
    如果下载的视频是经过阿里云加密转码过后的,那么还需要设置一个加密校验信息文件(即encryptedApp.dat, 获取方式参考:参考安全文件获取问题下载安全文件帮助视频。(建议在Application中配置一次即可)
    NSString *encrptyFilePath = [[NSBundle mainBundle] pathForResource:@"encryptedApp" ofType:@"dat"];
    [AliPrivateService initKey:encrptyFilePath];
  2. 设置监听事件。
    下载器提供了多个事件监听。设置代码如下:
    -(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info {
        //准备下载项成功
    }
    
    -(void)onError:(AliMediaDownloader *)downloader errorModel:(AVPErrorModel *)errorModel {
        //下载出错
    }
    
    -(void)onDownloadingProgress:(AliMediaDownloader *)downloader percentage:(int)percent {
        //下载进度百分比
    }
    
    -(void)onProcessingProgress:(AliMediaDownloader *)downloader percentage:(int)percent {
        //处理进度百分比
    }
    
    -(void)onCompletion:(AliMediaDownloader *)downloader {
        //下载成功
    }

    下载进度与处理进度的回调区别: 下载进度完成前,是需要进行网络交互的;处理进度回调时,无需网络交互。

  3. 准备下载源。
    通过prepare方法准备下载源。下载源支持AVPVidStsSource和AVPVidAuthSource两种。以AVPVidStsSource举例:
    //创建VidSts
    AVPVidStsSource* stsSource = [[AVPVidStsSource alloc] init];
    stsSource.vid = source.vid;//视频vid
    stsSource.region = DEFAULT_SERVER.region;//接入区域
    stsSource.securityToken = DEFAULT_SERVER.securityToken;//安全token
    stsSource.accessKeySecret = DEFAULT_SERVER.accessKeySecret;//临时akSecret
    stsSource.accessKeyId = DEFAULT_SERVER.accessKeyId;//临时akId
    //准备下载源
    [downloader prepareWithVid:stsSource];
  4. 准备成功后选择下载项。
    准备成功后,会回调onPrepared方法。选择某个Track进行下载:
    -(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info {
        NSArray<AVPTrackInfo*>* tracks = info.tracks;
        //比如:下载第一个TrackInfo
        [downloader selectTrack:[tracks objectAtIndex:0].trackIndex];
    }
  5. 更新下载源并开始下载。
    经过第4步之后,就可以开始下载了(为了防止VidSts和VidAuth过期,最好更新一下下载源的信息):
    //更新下载源
    [downloader updateWithVid:vidSource]
    //开始下载
    [downloader start];
  6. 下载成功/失败后,释放下载器。
    下载成功后,调用destroy释放下载器。
    [self.downloader destroy];
    self.downloader = nil;

    如果需要重新下载,那么就重新创建一个下载器即可。