全部产品
云市场

安全下载

更新时间:2019-09-02 19:37:03

简介

阿里云SDK提供了点播服务视频的下载功能,能够通过VidSts和VidAuth下载点播服务上的视频。同时,下载的方式提供了安全下载和普通下载的模式(在控制台设置)。普通下载含义是:即使点播服务已经加密过了,下载后的视频数据也不是经过阿里云加密的。也就是说,用户可以用第三方播放器播放。安全下载含义是:即使点播服务没有加密视频,下载后的视频数据也是经过阿里云加密的。也就是说,用户用第三方播放器是播放不了的。只能使用阿里云的播放器去播放。安全下载可确保下载的视频为加密视频,仅能通过在控制台下载加密文件时填写的bundleID或签名绑定的应用播放(需要保护视频版权的用户使用,限点播用户)。

Android关键实现

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

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

1. 创建并设置下载器

创建下载器,通过AliDownloaderFactory 创建。代码如下:

  1. AliMediaDownloader mAliDownloader = null;
  2. ......
  3. //创建下载器
  4. mAliDownloader = AliDownloaderFactory.create(getApplicationContext());
  5. //配置下载保存的路径
  6. mAliDownloader.setSaveDir("保存的文件夹地址");

如果下载的视频是经过阿里云加密转码过后的,那么还需要设置一个加密校验信息文件(即encryptedApp.dat, 获取方式参考:参考安全文件获取文档 下载安全文件帮助视频)。(建议在Application中配置一次即可):

  1. PrivateService.initService(getApplicationContext(), "encryptedApp.dat的本地路径");

2. 设置监听事件

下载器提供了多个事件监听。设置代码如下:

  1. mAliDownloader.setOnPreparedListener(new AliMediaDownloader.OnPreparedListener() {
  2. @Override
  3. public void onPrepared(MediaInfo mediaInfo) {
  4. //准备下载项成功
  5. }
  6. });
  7. mAliDownloader.setOnProgressListener(new AliMediaDownloader.OnProgressListener() {
  8. @Override
  9. public void onDownloadingProgress(int percent) {
  10. //下载进度百分比
  11. }
  12. @Override
  13. public void onProcessingProgress(int percent) {
  14. //处理进度百分比
  15. }
  16. });
  17. mAliDownloader.setOnErrorListener(new AliMediaDownloader.OnErrorListener() {
  18. @Override
  19. public void onError(ErrorInfo errorInfo) {
  20. //下载出错
  21. }
  22. });
  23. mAliDownloader.setOnCompletionListener(new AliMediaDownloader.OnCompletionListener() {
  24. @Override
  25. public void onCompletion() {
  26. //下载成功
  27. }
  28. });

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

3.准备下载源

通过preapre方法准备下载源。下载源支持VidSts和VidAuth两种。以VidSts举例:

  1. //创建VidSts
  2. VidSts aliyunVidSts = new VidSts();
  3. aliyunVidSts.setVid(视频vid);
  4. aliyunVidSts.setAccessKeyId(临时akId);
  5. aliyunVidSts.setAccessKeySecret(临时akSecret);
  6. aliyunVidSts.setSecurityToken(安全token);
  7. aliyunVidSts.setRegion(接入区域);
  8. //准备下载源
  9. mAliDownloader.prepare(aliyunVidSts)

4.准备成功后选择下载项

准备成功后,会回调OnPreparedListener方法。选择某个Track进行下载:

  1. public void onPrepared(MediaInfo mediaInfo) {
  2. //准备下载项成功
  3. List<TrackInfo> trackInfos = mediaInfo.getTrackInfos();
  4. //比如:下载第一个TrackInfo
  5. mAliDownloader.selectItem(trackInfos.get(0).getIndex());
  6. }

5.更新下载源并开始下载

经过第4步之后,就可以开始下载了(为了防止VidSts和VidAuth过期,最好更新一下下载源的信息):

  1. //更新下载源
  2. mAliDownloader.updateSource(mVidSts);
  3. //开始下载
  4. mAliDownloader.start();

6.下载成功/失败后,释放下载器

下载成功后,调用release释放下载器。在onCompletion或者onError回调中:

  1. mAliDownloader.stop();
  2. mAliDownloader.release();

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

iOS关键实现

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

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

1. 创建并设置下载器

创建下载器。代码如下:

  1. AliMediaDownloader *downloader = [[AliMediaDownloader alloc] init];
  2. [downloader setSaveDirectory:self.downLoadPath];
  3. [downloader setDelegate:self];

如果下载的视频是经过阿里云加密转码过后的,那么还需要设置一个加密校验信息文件(即encryptedApp.dat, 获取方式参考:参考安全文件获取文档 下载安全文件帮助视频)。(建议在Application中配置一次即可):

  1. NSString *encrptyFilePath = [[NSBundle mainBundle] pathForResource:@"encryptedApp" ofType:@"dat"];
  2. [AliPrivateService initKey:encrptyFilePath];

2. 设置监听事件

下载器提供了多个事件监听。设置代码如下:

  1. -(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info {
  2. //准备下载项成功
  3. }
  4. -(void)onError:(AliMediaDownloader *)downloader errorModel:(AVPErrorModel *)errorModel {
  5. //下载出错
  6. }
  7. -(void)onDownloadingProgress:(AliMediaDownloader *)downloader percentage:(int)percent {
  8. //下载进度百分比
  9. }
  10. -(void)onProcessingProgress:(AliMediaDownloader *)downloader percentage:(int)percent {
  11. //处理进度百分比
  12. }
  13. -(void)onCompletion:(AliMediaDownloader *)downloader {
  14. //下载成功
  15. }

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

3.准备下载源

通过preapre方法准备下载源。下载源支持AVPVidStsSource和AVPVidAuthSource两种。以AVPVidStsSource举例:

  1. //创建VidSts
  2. AVPVidStsSource* stsSource = [[AVPVidStsSource alloc] init];
  3. stsSource.vid = source.vid;//视频vid
  4. stsSource.region = DEFAULT_SERVER.region;//接入区域
  5. stsSource.securityToken = DEFAULT_SERVER.securityToken;//安全token
  6. stsSource.accessKeySecret = DEFAULT_SERVER.accessKeySecret;//临时akSecret
  7. stsSource.accessKeyId = DEFAULT_SERVER.accessKeyId;//临时akId
  8. //准备下载源
  9. [downloader prepareWithVid:stsSource];

4.准备成功后选择下载项

准备成功后,会回调onPrepared方法。选择某个Track进行下载:

  1. -(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info {
  2. NSArray<AVPTrackInfo*>* tracks = info.tracks;
  3. //比如:下载第一个TrackInfo
  4. [downloader selectTrack:[tracks objectAtIndex:0].trackIndex];
  5. }

5.更新下载源并开始下载

经过第4步之后,就可以开始下载了(为了防止VidSts和VidAuth过期,最好更新一下下载源的信息):

  1. //更新下载源
  2. [downloader updateWithVid:vidSource]
  3. //开始下载
  4. [downloader start];

6.下载成功/失败后,释放下载器

下载成功后,调用destroy释放下载器。

  1. [self.downloader destroy];
  2. self.downloader = nil;

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