阿里云SDK提供了点播服务视频的下载功能,通过本文节您将了解Android端与iOS端使用SDK安全下载的操作步骤、示例及说明。

简介

阿里云SDK提供了点播服务视频的下载功能,能够通过VidSts和VidAuth下载点播服务上的视频,安全下载可确保下载的视频为加密视频,仅能通过在控制台下载加密文件时填写的bundleID或签名绑定的应用进行播放。
说明
  • 需要保护视频版权的用户使用,仅限点播用户。
  • 标准加密使用播放器可以缓存到本地,需要视频点播开启安全下载功能。
  • 安全下载视频为加密视频,请参见HLS标准加密(私有加密)
  • 私有加密暂不支持IOS系统的网页端播放。

Android端关键实现

  1. 创建并设置下载器。
    创建下载器,通过AliDownloaderFactory创建。示例如下:
    AliMediaDownloader mAliDownloader = null;
    ......
    //创建下载器
    mAliDownloader = AliDownloaderFactory.create(getApplicationContext());
    //配置下载保存的路径
    mAliDownloader.setSaveDir("保存的文件夹地址");
    如果下载的视频是经过阿里云加密转码过后的,那么还需要设置一个加密校验信息文件(encryptedApp.dat)获取方式,请参见安全文件获取问题。示例如下:
     PrivateService.initService(getApplicationContext(), "encryptedApp.dat的本地路径");
  2. 设置监听事件。
    下载器提供了多个事件监听。示例如下:
            mAliDownloader.setOnPreparedListener(new AliMediaDownloader.OnPreparedListener() {
                @Override
                public void onPrepared(MediaInfo mediaInfo) {
                    //准备下载项成功
                }
            });
            mAliDownloader.setOnProgressListener(new AliMediaDownloader.OnProgressListener() {
                @Override
                public void onDownloadingProgress(int percent) {
                    //下载进度百分比
                }
                @Override
                public void onProcessingProgress(int percent) {
                   //处理进度百分比
                }
            });
            mAliDownloader.setOnErrorListener(new AliMediaDownloader.OnErrorListener() {
                @Override
                public void onError(ErrorInfo errorInfo) {
                    //下载出错
                }
            });
            mAliDownloader.setOnCompletionListener(new AliMediaDownloader.OnCompletionListener() {
                @Override
                public void onCompletion() {
                    //下载成功
                }
            });
    说明 下载进度与处理进度的回调区别:下载进度完成前,是需要进行网络交互的;处理进度回调时,无需网络交互。
  3. 准备下载源。
    通过preapre方法准备下载源。下载源支持VidSts和VidAuth两种。以VidSts举例。示例如下:
    //创建VidSts
     VidSts aliyunVidSts = new VidSts();
     aliyunVidSts.setVid(视频vid);
     aliyunVidSts.setAccessKeyId(临时akId);
     aliyunVidSts.setAccessKeySecret(临时akSecret);
     aliyunVidSts.setSecurityToken(安全token);
     aliyunVidSts.setRegion(接入区域);
    //准备下载源
     mAliDownloader.prepare(aliyunVidSts)
  4. 选择下载任务。
    准备成功后,会回调OnPreparedListener方法。选择某个Track进行下载,示例如下:
    public void onPrepared(MediaInfo mediaInfo) {
          //准备下载项成功
          List<TrackInfo> trackInfos = mediaInfo.getTrackInfos();
         //比如:下载第一个TrackInfo
          mAliDownloader.selectItem(trackInfos.get(0).getIndex());
    }
  5. 更新下载源并开始下载。
    完成以上操作步骤后,开始下载。示例如下:
    //更新下载源
      mAliDownloader.updateSource(mVidSts);
    //开始下载
      mAliDownloader.start();
    说明 为了防止VidSts和VidAuth过期,请更新下载源的信息。
  6. 下载成功或失败后,释放下载器。
    下载成功后,调用release释放下载器。在onCompletion或者onError回调中。示例如下:
    mAliDownloader.stop();
    mAliDownloader.release();

iOS系统关键实现

  1. 创建并设置下载器。
    创建下载器,示例如下:
    AliMediaDownloader *downloader = [[AliMediaDownloader alloc] init];
    [downloader setSaveDirectory:self.downLoadPath];
    [downloader setDelegate:self];
    如果下载的视频是经过阿里云加密转码过后的,那么还需要设置一个加密校验信息文件(encryptedApp.dat)获取方式,请参见安全文件获取问题。示例如下:
    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. 准备下载源。
    通过preapre方法准备下载源。下载源支持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. 更新下载源并开始下载。
    完成以上操作步骤后,开始下载。示例如下:
    //更新下载源
      [downloader updateWithVid:vidSource]
    //开始下载
      [downloader start];
    说明 为了防止VidSts和VidAuth过期,请更新下载源的信息。
  6. 下载成功或失败后,释放下载器。
    下载成功后,调用release释放下载器。在onCompletion或者onError回调中。示例如下:
    [self.downloader destroy];
    self.downloader = nil;
    说明 如果需要重新下载,请重新创建下载器。