阿里雲播放器SDK的安全下載功能,可使視頻下載到本地時經密鑰檔案進行加密,讓其僅能通過預先綁定的唯一App產生的密鑰檔案進行解密播放,可有效保護視頻內容,防止下載到本地的視頻被惡意播放或傳播。本文為您介紹如何在Android端或iOS端使用阿里雲播放器SDK進行安全下載。
功能簡介
ApsaraVideo for VOD服務針對移動端的使用情境,提供了視頻下載功能。視頻下載分為安全下載和普通下載兩種方式,具體區別如下:
安全下載(推薦):允許使用者通過移動端阿里雲播放器將視頻緩衝至本地觀看,但下載到本地的視頻檔案會使用產生的密鑰檔案進行加密,僅支援使用阿里雲播放器進行解密播放;使用第三方播放器或未經解密,都將無法觀看視頻。
普通下載:允許使用者通過移動端阿里雲播放器將視頻緩衝至本地觀看,且下載到本地的視頻檔案未經加密,可拷貝,也可使用任意播放器播放,請謹慎使用。
安全下載可確保下載的視頻為加密視頻,且僅能通過預先綁定的App(通過在點播控制台產生密鑰檔案時填寫APP唯一標識進行App綁定)進行播放。相比普通下載更加安全可靠,適用於需要保護視頻著作權的使用情境,非特殊情境下,都推薦您使用安全下載方式。
使用限制
安全下載功能整合在阿里雲播放器SDK內,使用安全下載功能需要結合阿里雲播放器SDK使用。
目前阿里雲播放器SDK僅VidSts和VidAuth方式支援安全下載功能。
安全下載下來的視頻會在本地加密,且只能使用預先綁定的App以阿里雲播放器SDK的URL方式進行視頻播放。
前提條件
已在ApsaraVideo for VOD控制台開啟下載功能並配置下載方式為安全下載,詳細操作請參見安全下載。
已整合阿里雲播放器SDK,詳細操作請參見Android播放器快速整合或iOS播放器快速整合。
已對視頻進行阿里雲視頻加密(私人加密)或HLS標準加密。
Android端關鍵實現
安全下載設定
配置安全下載的加密校正檔案。
將在點播控制台產生的密鑰檔案配置到播放器SDK中,用於視頻下載的加密和視頻播放的解密,密鑰檔案的產生請參見安全下載。
說明請確保配置的加密校正檔案與預先綁定的App資訊一致,否則會導致視頻下載失敗。
建議在Application中配置一次即可,樣本如下:
PrivateService.initService(getApplicationContext(), "encryptedApp.dat所在的檔案路徑"); //建議將encryptedApp.dat加密校正檔案存放到手機中後,此處設定加密校正檔案的手機本地檔案路徑
建立並設定下載器。
建立下載器,通過AliDownloaderFactory建立。樣本如下:
AliMediaDownloader mAliDownloader = null; ...... //建立下載器 mAliDownloader = AliDownloaderFactory.create(getApplicationContext()); //配置下載儲存的路徑 mAliDownloader.setSaveDir("儲存的檔案夾地址");
設定監聽事件。
下載器提供了多個事件監聽。樣本如下:
準備下載源。
通過
prepare
方法準備下載源。下載源支援VidSts和VidAuth兩種方式。樣本如下:VidSts
//建立VidSts VidSts aliyunVidSts = new VidSts(); aliyunVidSts.setVid("Vid資訊");// 視頻ID(VideoId)。 aliyunVidSts.setAccessKeyId("<yourAccessKeyId>");// STS臨時AK對的存取金鑰ID,需要調用STS服務的AssumeRole介面產生。 aliyunVidSts.setAccessKeySecret"<yourAccessKeySecret>");// STS臨時AK對的存取金鑰,需要調用STS服務的AssumeRole介面產生。 aliyunVidSts.setSecurityToken("<yourSecurityToken>");// STS安全性權杖,需要調用STS服務的AssumeRole介面產生。 aliyunVidSts.setRegion("接入地區");// 點播服務的接入地區,預設為cn-shanghai。 //準備下載源 mAliDownloader.prepare(aliyunVidSts)
VidAuth
//建立VidAuth VidAuth vidAuth = new VidAuth(); vidAuth.setVid("Vid資訊");// 視頻ID(VideoId)。 vidAuth.setPlayAuth("<yourPlayAuth>");// 播放憑證,需要調用點播服務的GetVideoPlayAuth介面產生。 vidAuth.setRegion("接入地區");// 5.5.5.0及之後版本播放器SDK,本參數已棄用,無需設定region,播放器會自動解析region;5.5.5.0之前版本播放器SDK,本參數必選,點播服務的接入地區,預設為cn-shanghai。 //準備下載源 mAliDownloader.prepare(vidAuth);
說明源檔案格式與輸出的下載檔案格式保持一致,不支援更改。
準備成功後,選擇下載項並開始下載。
準備成功後,會回調
OnPreparedListener
方法。返回的TrackInfo中會包含各視頻流的清晰度等資訊,請選擇一個Track進行下載,樣本如下:public void onPrepared(MediaInfo mediaInfo) { //準備下載項成功 List<TrackInfo> trackInfos = mediaInfo.getTrackInfos(); //比如:下載第一個TrackInfo mAliDownloader.selectItem(trackInfos.get(0).getIndex()); //開始下載 mAliDownloader.start(); }
(可選)更新下載源。
為了防止VidSts和VidAuth到期,您也可以更新下載源的資訊後開始下載。樣本如下:
//更新下載源 mAliDownloader.updateSource(VidSts); //開始下載 mAliDownloader.start();
下載成功或失敗後,釋放下載器。
下載成功後,在
onCompletion
或者onError
回調中調用release
釋放下載器。樣本如下:mAliDownloader.stop(); mAliDownloader.release();
可選:刪除下載的檔案。
下載過程中,或者下載完成後,可以刪除下載的檔案。樣本如下:
//通過對象刪除檔案 mAliDownloader.deleteFile(); //通過靜態方法刪除,若刪除成功則返回0 AliDownloaderFactory.deleteFile("待刪除的下載檔案夾路徑","視頻ID","視頻格式","下載的視頻索引");
下載後播放
通過安全下載方式下載到本地的視頻,僅支援使用阿里雲播放器SDK以URL方式進行解密播放,具體方法如下:
下載完成後擷取視頻檔案的絕對路徑。
String path = mAliDownloader.getFilePath();
通過點播UrlSource方式設定絕對路徑進行播放。
UrlSource urlSource = new UrlSource(); urlSource.setUri("播放地址");//設定下載視頻的絕對路徑。 aliPlayer.setDataSource(urlSource);
iOS端關鍵實現
安全下載設定
配置安全下載的加密校正檔案。
需要將在點播控制台產生的密鑰檔案配置到播放器SDK中,用於視頻下載的加密和視頻播放的解密,密鑰檔案的產生請參見安全下載。
說明請確保配置的加密校正檔案與預先綁定的App資訊一致,否則會導致視頻下載失敗。
建議在Application中配置一次即可,樣本如下:
NSString *encrptyFilePath = [[NSBundle mainBundle] pathForResource:@"encryptedApp" ofType:@"dat"]; [AliPrivateService initKey:encrptyFilePath];
建立並設定下載器。
樣本如下:
AliMediaDownloader *downloader = [[AliMediaDownloader alloc] init]; [downloader setSaveDirectory:self.downLoadPath]; [downloader setDelegate:self];
設定監聽事件。
下載器提供了多個事件監聽。樣本如下:
-(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
方法準備下載源,支援VidSts和VidAuth兩種方式。樣本如下:VidSts
//建立VidSts AVPVidStsSource* stsSource = [[AVPVidStsSource alloc] init]; stsSource.region = @"接入地區"; // 點播服務的接入地區,預設為cn-shanghai。 stsSource.vid = @"Vid資訊"; // 視頻ID(VideoId)。 stsSource.securityToken = @"<yourSecurityToken>"; // STS安全性權杖,需要調用STS服務的AssumeRole介面產生。 stsSource.accessKeySecret = @"<yourAccessKeySecret>"; // STS臨時AK對的存取金鑰,需要調用STS服務的AssumeRole介面產生。 stsSource.accessKeyId = @"<yourAccessKeyId>"; // STS臨時AK對的存取金鑰ID,需要調用STS服務的AssumeRole介面產生。 //準備下載源 [downloader prepareWithVid:stsSource];
VidAuth
//建立VidAuth AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init]; authSource.vid = @"Vid資訊"; // 視頻ID(VideoId)。 authSource.playAuth = @"<yourPlayAuth>"; // 播放憑證,需要調用點播服務的GetVideoPlayAuth介面產生。 authSource.region = @"接入地區"; // 5.5.5.0及之後版本播放器SDK,本參數已棄用,無需設定region,播放器會自動解析region;5.5.5.0之前版本播放器SDK,本參數必選,點播服務的接入地區,預設為cn-shanghai。 //準備下載源 [downloader prepareWithVid:authSource];
準備成功後,選擇下載項。
準備成功後,會回調
onPrepared
方法。返回的TrackInfo中會包含各視頻流的清晰度等資訊,請選擇一個Track進行下載,樣本如下:-(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info { NSArray<AVPTrackInfo*>* tracks = info.tracks; //比如:下載第一個TrackInfo [downloader selectTrack:[tracks objectAtIndex:0].trackIndex]; }
更新下載源並開始下載。
為了防止VidSts和VidAuth到期,建議更新下載源的資訊後開始下載。樣本如下:
//更新下載源 [downloader updateWithVid:vidSource] //開始下載 [downloader start];
下載成功或失敗後,釋放下載器。
下載成功後,調用
destroy
釋放下載器。[self.downloader destroy]; self.downloader = nil;
下載後播放
通過安全下載方式下載到本地的視頻,僅支援使用阿里雲播放器SDK以URL方式進行解密播放,具體方法如下:
下載完成後擷取視頻檔案的絕對路徑。
說明由於iOS沙箱路徑機制,建議您取到沙箱目錄下自訂設定的下載儲存路徑,取得
downloadedFilePath
中的自訂設定的下載儲存路徑+產生的檔案名稱字,拼接上當前擷取的沙箱目錄,產生新的視頻檔案路徑。NSString *downloadedFilePath = downloader.downloadedFilePath;
通過點播UrlSource方式設定絕對路徑進行播放。
AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:downloadedFilePath]; [self.player setUrlSource:urlSource];