阿里云SDK提供了点播服务视频的下载功能,能够通过VidSts和VidAuth下载点播服务上的视频。同时,下载的方式提供了安全下载和普通下载的模式(在控制台设置)。
普通下载含义是:即使点播服务已经加密过了,下载后的视频数据也不是经过阿里云加密的。也就是说,用户可以用第三方播放器播放。
安全下载含义是:即使点播服务没有加密视频,下载后的视频数据也是经过阿里云加密的。也就是说,用户用第三方播放器是播放不了的。只能使用阿里云的播放器去播放。安全下载可确保下载的视频为加密视频,仅能通过在控制台下载加密文件时填写的bundleID或签名绑定的应用播放(需要保护视频版权的用户使用,限点播用户)。
Android关键实现
视频下载的基本流程如下:
创建并设置下载器->设置事件监听->准备下载源->准备成功后选择下载项->更新下载源并开始下载->下载成功/失败后,释放下载器。
执行以下操作,完成Android关键实现。
- 创建并设置下载器。 创建下载器,通过
AliDownloaderFactory
创建。代码如下:AliMediaDownloader mAliDownloader = null; ...... //创建下载器 mAliDownloader = AliDownloaderFactory.create(getApplicationContext()); //配置下载保存的路径 mAliDownloader.setSaveDir("保存的文件夹地址");
如果下载的视频是经过阿里云加密转码过后的,那么还需要设置一个加密校验信息文件(即encryptedApp.dat, 获取方式参考:参考安全文件获取文档和下载安全文件帮助视频。PrivateService.initService(getApplicationContext(), "encryptedApp.dat的本地路径");
- 设置监听事件。 下载器提供了多个事件监听。设置代码如下。
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() { //下载成功 } });
下载进度与处理进度的回调区别: 下载进度完成前,是需要进行网络交互的;处理进度回调时,无需网络交互。
- 准备下载源。 通过prepare方法准备下载源。下载源支持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)
- 准备成功后选择下载项。 准备成功后,会回调
OnPreparedListener
方法。选择某个Track进行下载:public void onPrepared(MediaInfo mediaInfo) { //准备下载项成功 List<TrackInfo> trackInfos = mediaInfo.getTrackInfos(); //比如:下载第一个TrackInfo mAliDownloader.selectItem(trackInfos.get(0).getIndex()); }
- 更新下载源并开始下载。 经过第4步之后,就可以开始下载了(为了防止VidSts和VidAuth过期,最好更新一下下载源的信息)。
//更新下载源 mAliDownloader.updateSource(mVidSts); //开始下载 mAliDownloader.start();
- 下载成功/失败后,释放下载器。 下载成功后,调用release释放下载器。在onCompletion或者onError回调中:
mAliDownloader.stop(); mAliDownloader.release();
如果需要重新下载,那么就重新创建一个下载器即可。
iOS关键实现
视频下载的基本流程如下:
创建并设置下载器->设置事件监听->准备下载源->准备成功后选择下载项->更新下载源并开始下载->下载成功/失败后,释放下载器。
执行以下操作,完成ios关键实现。
- 创建并设置下载器。创建下载器。代码如下:
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];
- 设置监听事件。下载器提供了多个事件监听。设置代码如下:
-(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 { //下载成功 }
下载进度与处理进度的回调区别: 下载进度完成前,是需要进行网络交互的;处理进度回调时,无需网络交互。
- 准备下载源。通过
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];
- 准备成功后选择下载项。准备成功后,会回调onPrepared方法。选择某个Track进行下载:
-(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info { NSArray<AVPTrackInfo*>* tracks = info.tracks; //比如:下载第一个TrackInfo [downloader selectTrack:[tracks objectAtIndex:0].trackIndex]; }
- 更新下载源并开始下载。经过第4步之后,就可以开始下载了(为了防止VidSts和VidAuth过期,最好更新一下下载源的信息):
//更新下载源 [downloader updateWithVid:vidSource] //开始下载 [downloader start];
- 下载成功/失败后,释放下载器。下载成功后,调用destroy释放下载器。
[self.downloader destroy]; self.downloader = nil;
如果需要重新下载,那么就重新创建一个下载器即可。