ApsaraVideo for VOD和ApsaraVideo for Live提供多種方式為視頻加密,搭配阿里雲播放器SDK進行解密播放,可用於防止視頻內容被盜鏈、非法下載和傳播,本文介紹如何使用阿里雲播放器SDK播放HLS標準加密、阿里雲視頻加密(私人加密)及DRM加密視頻。
視頻加密簡介
阿里雲ApsaraVideo for VOD已經擁有一套完善的Alibaba Content Security Service保護機制,可用於保障視頻內容不被盜鏈、非法下載和傳播。安全機制包括訪問限制、URL鑒權、遠程鑒權、視頻加密和安全下載等。
有關訪問限制、URL鑒權及遠程鑒權等安全機制的詳細內容請參見視頻安全概述,本文主要介紹三種視頻加密方式的視頻播放。三種視頻加密的簡介如下:
安全機制 | 安全手段 | 特點 | 安全等級 | 使用門檻 |
視頻加密 | 阿里雲視頻加密(私人加密) | 雲端一體的視頻加密解決方案,採用私人密碼編譯演算法,並確保鏈路的安全傳輸。 | 高 | 較低,簡單配置並整合阿里雲播放器即可。 |
HLS標準加密 | HLS通用加密方案,使用AES_128對內容加密,適配所有HLS播放器,但密鑰容易被竊取。 | 較高 | 高,需自建密鑰管理和令牌頒發服務,並確保鏈路傳輸安全。 | |
商業DRM | 蘋果Fairplay、GoogleWidevine的原生支援,安全層級很高,滿足大的著作權內容供應商的要求。 | 高 | 高,按調用License次數收費,只需整合阿里雲播放器SDK。 |
播放器SDK加密播放相容說明
終端 | 播放方式 | HLS(M3U8)私人加密 | MP4私人加密 | HLS(M3U8)標準加密 | HLS(M3U8) DRM加密 |
Web端 | 點播UrlSource | ❌ | ❌ | ✔️ | ❌ |
點播VidAuth | ✔️ | ❌ | ✔️ | ❌ | |
點播VidSts | ❌ | ❌ | ✔️ | ✔️ | |
直播UrlSource | ❌ | - | ✔️ | ❌ | |
直播LiveStsSource | ✔️ | - | ❌ | ✔️ | |
Android端 | 點播UrlSource | ❌ | ✔️,SDK版本需為6.8.0及以上版本 | ❌ | ❌ |
點播VidAuth | ✔️ | ✔️ | ✔️ | ❌ | |
點播VidSts | ✔️ | ✔️ | ✔️ | ✔️ | |
直播UrlSource | ❌ | - | ✔️ | ❌ | |
直播LiveStsSource | ✔️ | - | ❌ | ✔️ | |
iOS端 | 點播UrlSource | ❌ | ✔️,SDK版本需為6.8.0及以上版本 | ❌ | ❌ |
點播VidAuth | ✔️ | ✔️ | ✔️ | ❌ | |
點播VidSts | ✔️ | ✔️ | ✔️ | ✔️ | |
直播UrlSource | ❌ | - | ✔️ | ❌ | |
直播LiveStsSource | ✔️ | - | ❌ | ✔️ |
阿里雲視頻加密(私人加密)
簡介
阿里雲視頻加密是對視頻資料加密,即使下載到本地,視頻本身也是被加密的,無法惡意二次分發,可有效防止視頻泄露和盜鏈問題。有關阿里雲視頻加密的加密機制及核心優勢等更多內容,請參見阿里雲視頻加密(私人加密)。
阿里雲播放器將內部解密邏輯、服務端互動邏輯都封裝到了SDK內部。您只需要配置加密轉碼,再整合播放器播放視頻即可低成本使用加密播放。
阿里雲視頻加密僅支援輸出HLS協議(M3U8格式)、MP4格式的視頻,且只能使用阿里雲播放器播放加密視頻。
配置私人加密
阿里雲視頻加密的詳細流程及配置,請參見如何使用。
播放私人加密視頻-Web端
使用限制
經過阿里雲視頻加密(私人加密)加密過的HLS協議視頻,現僅支援使用阿里雲播放器播放。
操作步驟
使用者可以在自己的Web頁面中嵌入Web播放器並實現播放。程式碼範例如下:
使用阿里雲Web播放器SDK之前,請先瞭解瀏覽器及阿里雲視頻加密(私人加密)視頻播放功能的適配情況,具體如下:
H5 模式支援案頭端和移動端瀏覽器環境,具體支援情況請參見H5功能適配說明。
Flash模式僅支援案頭端瀏覽器環境,具體的瀏覽器支援情況請參見Flash瀏覽器適配說明。
出於安全考慮,阿里雲視頻加密(私人加密)不支援用真實的加密視頻調試。
私人加密播放-ApsaraVideo for VODVidAuth播放(HLS協議)
經過私人加密的視頻通過點播VidAuth方式播放時,與播放普通視頻相比,需額外傳入參數encryptType: 1,來啟用私人加密。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
<title>點播私人加密播放測試案例</title>
<link rel="stylesheet" href="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/skins/default/aliplayer-min.css" />
<script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/aliplayer-min.js"></script>
</head>
<body>
<div class="prism-player" id="J_prismPlayer"></div>
<script>
var player = new Aliplayer({
id: 'J_prismPlayer',
width: '100%',
vid : '<your video ID>',// 必選參數,可以通過點播控制台(路徑:媒資庫>音/視頻)查詢。樣本:1e067a2831b641db90d570b6480f****。
playauth : '<your PlayAuth>',// 必選參數,參數值可通過調用GetVideoPlayAuth介面擷取。
encryptType: 1, // 必選參數,當播放私人加密流時需要設定本參數值為1。其它情況無需設定。
playConfig:{EncryptType:'AliyunVoDEncryption'}, // 當您輸出的M3U8流中,含有其他非私人加密流時,需要指定此參數。
// authTimeout: 7200, // 選擇性參數,播放地址的有效時間長度,單位:秒。該時間長度會覆蓋在ApsaraVideo for VOD控制台設定的URL鑒權的有效時間長度。如果不傳,則取預設值7200。如需設定此參數,請確保該時間大於視頻的實際時間長度,防止播放地址在播放完成前到期。
},function(player){
console.log('The player is created.')
});
</script>
</body>
</html>
如果希望支援 iOS 17.1 以下瀏覽器的點播私人加密,需要您自行部署一個額外的播放器外掛程式指令碼,具體步驟如下:
原理說明:iOS 17.1 以下私人加密需要一個額外的外掛程式,該外掛程式使用了 Service Worker 技術,由於瀏覽器的安全性原則限制,僅允許網站訪問和當前網站同源的 service worker 指令碼,因此需要您將播放器外掛程式指令碼部署到和您網站相同的網域名稱下使用。
一、下載指令碼:https://g.alicdn.com/apsara-media-box/imp-web-player/<版本號碼>/aliplayer-worker-min.js
二、部署指令碼:假設您播放私人加密視頻的網站為 https://www.aliyun.com/a/b.html,您需要將指令碼部署到 https://www.aliyun.com/a/aliplayer-worker-min.js,即和當前網站同級目錄。
三、初始化播放器時傳入此地址:
new Aliplayer({
// ...其它參數
swScriptURL: 'https://www.aliyun.com/a/aliplayer-worker-min.js' // 請填寫完整的外掛程式指令碼地址,確保此地址可以訪問
})
注意:請確保播放器的版本和外掛程式的版本完全一致。
私人加密播放-ApsaraVideo for LiveLiveStsSource播放(HLS協議)
經過私人加密的視頻通過直播LiveStsSource方式播放時,需要傳入URL和STS臨時身份憑證等資訊,STS臨時身份憑證的產生請參見使用STS臨時授權方案上傳視頻。範例程式碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
<title>直播私人加密播放測試案例</title>
<link rel="stylesheet" href="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/skins/default/aliplayer-min.css" />
<script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/aliplayer-min.js"></script>
</head>
<body>
<div class="prism-player" id="J_prismPlayer"></div>
<script>
var player = new Aliplayer({
id: 'J_prismPlayer',
width: '100%',
isLive: true, // 直播設定為true。
source: '<your live stream url>',// 必選參數。播放地址為經過私人加密的HLS直播流地址。
accessKeyId: '<your AccessKey ID>',// 必選參數。STS臨時AK對的存取金鑰ID,需要調用STS服務的AssumeRole介面產生。
accessKeySecret: '<your AccessKey Secret>',//必選參數。STS臨時AK對的存取金鑰,需要調用STS服務的AssumeRole介面產生。
securityToken: '<your STS token>',// 必選參數。STS安全性權杖,需要調用STS服務的AssumeRole介面產生。
domain: '<your Domain>',// 必選參數。直播流的拉流網域名稱。
app:'<your App Name>',// 必選參數。直播流的AppName。
stream:'<your Stream Name>',// 必選參數。直播流的StreamName。
regionId: '<region of your video>',// 必選參數。服務地區。如cn-shanghai、eu-central-1, ap-southeast-1等。
},function(player){
console.log('The player is created.')
});
</script>
</body>
</html>
播放私人加密視頻-Android端
使用限制
經過阿里雲視頻加密(私人加密)加密過的HLS協議、MP4格式視頻,現僅支援使用阿里雲播放器播放。
操作步驟
使用者可以通過快速整合Android播放器到自己的應用中並實現播放。步驟及範例程式碼如下:
整合阿里雲Android播放器SDK。
Android播放器SDK的整合操作請參見快速整合。
建立播放器播放視頻。
建立播放器的操作請參見建立播放器。其中,步驟3.建立DataSource的操作請根據實際需求選擇以下任一方式建立。
私人加密播放-ApsaraVideo for VODUrlSource播放(MP4格式)
說明僅6.8.0及以後版本的Android播放器SDK支援通過點播UrlSource方式播放MP4格式的私人加密視頻。
經過私人加密輸出的MP4格式視頻通過點播UrlSource方式播放時,可調用GetPlayInfo - 擷取音視頻播放地址介面擷取視頻的播放地址,擷取到的視頻URL需要您按協議在URL尾部自行拼接
etavirp_nuyila=1
後再傳入播放器進行播放,播放器SDK的配置與播放普通視頻配置一致,無需額外設定參數。播放URL樣本:
https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1
UrlSource urlSource = new UrlSource(); urlSource.setUri("播放地址");// 必選參數,視頻的播放地址(URL),可調用GetPlayInfo介面擷取視頻URL // 擷取到的視頻URL需要在尾部自行拼接etavirp_nuyila=1後再傳入,樣本:https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1 aliPlayer.setDataSource(urlSource);
私人加密播放-ApsaraVideo for VODVidAuth播放(HLS協議+MP4格式)
經過私人加密輸出的HLS協議或MP4格式視頻通過點播VidAuth方式播放時,若當前視頻存在其他非私人加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為AliyunVoDEncryption來篩選私人加密流進行播放。
VidAuth vidAuth = new VidAuth(); VidPlayerConfigGen vidPlayerConfigGen = new VidPlayerConfigGen(); vidPlayerConfigGen.setEncryptType(VidPlayerConfigGen.EncryptType.AliyunVoDEncryption);// 選擇性參數,設定加密類型為AliyunVoDEncryption時,則只會返回經過私人加密的視頻流。 vidAuth.setPlayConfig(vidPlayerConfigGen); 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。 // vidAuth.setAuthTimeout(3600); // 選擇性參數,播放地址的有效時間長度,單位:秒。該時間長度會覆蓋在ApsaraVideo for VOD控制台設定的URL鑒權的有效時間長度。如果不傳,則取預設值3600。如需設定此參數,請確保該時間大於視頻的實際時間長度,防止播放地址在播放完成前到期。 aliPlayer.setDataSource(vidAuth);
私人加密播放-ApsaraVideo for VODVidSts播放(HLS協議+MP4格式)
經過私人加密輸出的HLS協議或MP4格式視頻通過點播VidSts方式播放時,若當前視頻存在其他非私人加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為AliyunVoDEncryption來篩選私人加密流進行播放。
VidSts vidSts = new VidSts(); VidPlayerConfigGen vidPlayerConfigGen = new VidPlayerConfigGen(); vidPlayerConfigGen.setEncryptType(VidPlayerConfigGen.EncryptType.AliyunVoDEncryption);// 選擇性參數,設定加密類型為AliyunVoDEncryption時,則只會返回經過私人加密的視頻流。 vidSts.setPlayConfig(vidPlayerConfigGen); vidSts.setVid("Vid資訊");// 必選參數,視頻ID(VideoId)。 vidSts.setAccessKeyId("<yourAccessKeyId>");// 必選參數,STS臨時AK對的存取金鑰ID,需要調用STS服務的AssumeRole介面產生。 vidSts.setAccessKeySecret("<yourAccessKeySecret>");// 必選參數,STS臨時AK對的存取金鑰,需要調用STS服務的AssumeRole介面產生。 vidSts.setSecurityToken("<yourSecurityToken>");// 必選參數,STS安全性權杖,需要調用STS服務的AssumeRole介面產生。 vidSts.setRegion("接入地區");// 必選參數,點播服務的接入地區,預設為cn-shanghai。 // vidSts.setAuthTimeout(3600); // 選擇性參數,播放地址的有效時間長度,單位:秒。該時間長度會覆蓋在ApsaraVideo for VOD控制台設定的URL鑒權的有效時間長度。如果不傳,則取預設值3600。如需設定此參數,請確保該時間大於視頻的實際時間長度,防止播放地址在播放完成前到期。 aliPlayer.setDataSource(vidSts);
私人加密播放-ApsaraVideo for LiveLiveStsSource播放(HLS協議)
經過私人加密輸出的HLS協議視頻通過直播LiveStsSource方式播放時,需要傳入URL和STS憑證,並設定視頻加密類型為AliEncryption。範例程式碼如下:
建立DataSource。
需傳遞AVPLiveStsSource作為播放源。
// 建立LiveSts,EncryptionType需要設定為AliEncryption LiveSts liveSts = new LiveSts(); liveSts.setUrl("<your live stream url>");// 必選參數,播放地址為經過私人加密的HLS直播流地址。 liveSts.setAccessKeyId("<your AccessKey ID>");// 必選參數,STS臨時AK對的存取金鑰ID,需要調用STS服務的AssumeRole介面產生。 liveSts.setAccessKeySecret("<your AccessKey Secret>");// 必選參數,STS臨時AK對的存取金鑰,需要調用STS服務的AssumeRole介面產生。 liveSts.setSecurityToken("<your STS token>");// 必選參數,STS安全性權杖,需要調用STS服務的AssumeRole介面產生。 liveSts.setDomain("<your Domain>");// 必選參數,直播流的播流網域名稱。 liveSts.setApp("<your App Name>");// 必選參數,直播流的AppNam。 liveSts.setStream("<your Stream Name>");// 必選參數,直播流的StreamName。 liveSts.setEncryptionType(LiveSts.LiveEncryptionType.AliEncryption);// 必選參數,設定加密類型為AliEncryption。 liveSts.setRegion("<region of your video>");// 必選參數,服務地區。如cn-shanghai等。 // 設定播放源 aliPlayer.setDataSource(liveSts); // 準備播放 aliPlayer.prepare();
監聽STS是否無效。
加密直播播放過程中可能會有更換加密Key的過程,換Key時則會通過STS去請求到最新的Key。開發人員需要監聽STS是否有效。如果無效則會影響加密直播流的播放。
mAliyunVodPlayer.setOnVerifyTimeExpireCallback(new AliPlayer.OnVerifyTimeExpireCallback() { @Override public AliPlayer.Status onVerifySts(StsInfo info) { if(info 可以使用){ return IPlayer.StsStatus.Valid; } if(可以擷取有效STS){ 擷取STS();// 非同步同步均可。 return IPlayer.StsStatus.Pending; } // 如果info無效,且無法擷取到最新的STS,那麼建議停止播放。防止出現花屏。 mAliyunVodPlayer.stop(); return IPlayer.StsStatus.Invalid; } @Override public AliPlayer.Status onVerifyAuth(VidAuth auth) { return AliPlayer.Status.Valid; } });
說明擷取STS成功之後,需要調用
updateLiveStsInfo
方法去更新STS。如果擷取失敗,則建議停止播放。如果不更新STS,逾時之後播放器會繼續使用之前的STS去擷取Key。如果STS失效,則可能會出現花屏或者播放失敗。mAliyunVodPlayer.updateStsInfo(stsInfo);
播放私人加密視頻-iOS端
使用限制
經過阿里雲視頻加密(私人加密)加密過的HLS協議、MP4格式視頻,現僅支援使用阿里雲播放器播放。
操作步驟
使用者可以通過快速整合iOS播放器到自己的應用中並實現播放。步驟如下:
整合阿里雲iOS播放器SDK。
iOS播放器SDK的整合操作請參見快速整合。
建立播放器播放視頻。
建立播放器的操作步驟請參見建立播放器。其中,步驟3.建立DataSource的操作請根據實際需求選擇以下任一方式建立。
私人加密播放-ApsaraVideo for VODUrlSource播放(MP4格式)
說明僅6.8.0及以後版本的iOS播放器SDK支援通過點播UrlSource方式播放MP4格式的私人加密視頻。
經過私人加密輸出的MP4格式視頻通過點播UrlSource方式播放時,可調用GetPlayInfo - 擷取音視頻播放地址介面擷取視頻的播放地址,擷取到的視頻URL需要您按協議在URL尾部自行拼接
etavirp_nuyila=1
後再傳入播放器進行播放,播放器SDK的配置與播放普通視頻配置一致,無需額外設定參數。播放URL樣本:
https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1
AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:url]; // 必選參數,視頻的播放地址(URL),可調用GetPlayInfo介面擷取視頻URL,擷取到的視頻URL需要在尾部自行拼接etavirp_nuyila=1後再傳入,樣本:https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1 [self.player setUrlSource:urlSource];
私人加密播放-ApsaraVideo for VODVidAuth(HLS協議+MP4格式)
經過私人加密輸出的HLS協議或MP4格式視頻通過點播VidAuth方式播放時,若當前視頻存在其他非私人加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為AliyunVoDEncryption來篩選私人加密流進行播放。
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。 // authSource.authTimeout = 3600; // 選擇性參數,播放地址的有效時間長度,單位:秒。該時間長度會覆蓋在ApsaraVideo for VOD控制台設定的URL鑒權的有效時間長度。如果不傳,則取預設值3600。如需設定此參數,請確保該時間大於視頻的實際時間長度,防止播放地址在播放完成前到期。 //通過VidPlayerConfigGenerator構建config VidPlayerConfigGenerator* config = [[VidPlayerConfigGenerator alloc]init]; [config addVidPlayerConfigByStringValue:@"EncryptType" value:@"AliyunVoDEncryption"]; //選擇性參數,設定加密類型為AliyunVoDEncryption時,則只會返回經過私人加密的視頻流。 authSource.playConfig = [config generatePlayerConfig]; [self.player setAuthSource:authSource];
私人加密播放-ApsaraVideo for VODVidSts(HLS協議+MP4格式)
經過私人加密輸出的HLS協議或MP4格式視頻通過點播VidSts方式播放時,若當前視頻存在其他非私人加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為AliyunVoDEncryption來篩選私人加密流進行播放。
AVPVidStsSource *source = [[AVPVidStsSource alloc] init]; source.region = @"接入地區"; // 必選參數,點播服務的接入地區,預設為cn-shanghai。 source.vid = @"Vid資訊"; // 必選參數,視頻ID(VideoId)。 source.securityToken = @"<yourSecurityToken>"; // 必選參數,STS安全性權杖,需要調用STS服務的AssumeRole介面產生。 source.accessKeySecret = @"<yourAccessKeySecret>"; // 必選參數,STS臨時AK對的存取金鑰,需要調用STS服務的AssumeRole介面產生。 source.accessKeyId = @"<yourAccessKeyId>"; // 必選參數,STS臨時AK對的存取金鑰ID,需要調用STS服務的AssumeRole介面產生。 // source.authTimeout = 3600; // 選擇性參數,播放地址的有效時間長度,單位:秒。該時間長度會覆蓋在ApsaraVideo for VOD控制台設定的URL鑒權的有效時間長度。如果不傳,則取預設值3600。如需設定此參數,請確保該時間大於視頻的實際時間長度,防止播放地址在播放完成前到期。 //通過VidPlayerConfigGenerator構建config VidPlayerConfigGenerator* config = [[VidPlayerConfigGenerator alloc]init]; [config addVidPlayerConfigByStringValue:@"EncryptType" value:@"AliyunVoDEncryption"]; //選擇性參數,設定加密類型為AliyunVoDEncryption時,則只會返回經過私人加密的視頻流。 source.playConfig = [config generatePlayerConfig]; //設定播放源 [self.player setStsSource:source];
私人加密播放-ApsaraVideo for LiveLiveStsSource(HLS協議)
經過私人加密輸出的HLS協議視頻通過直播LiveStsSource方式播放時,需要傳入URL和STS憑證,並設定視頻加密類型為ENCRYPTION_TYPE_ALIVODENCRYPTION。範例程式碼如下:
建立DataSource。
需傳遞AVPLiveStsSource作為播放源。
// 建立LiveSts,encryptionType需要設定為ENCRYPTION_TYPE_ALIVODENCRYPTION AVPLiveStsSource *liveStsSource = [[AVPLiveStsSource alloc] initWithUrl:@"加密直播url" accessKeyId:@"臨時akId" accessKeySecret:@"臨時akId" securityToken:@"安全token" region:@"region值" domain:@"url播流網域名稱" app:@"播流應用程式名稱" stream:@"播流流名" encryptionType:ENCRYPTION_TYPE_ALIVODENCRYPTION];// 必選參數,設定加密類型為ENCRYPTION_TYPE_ALIVODENCRYPTION。 // 設定播放源 [self.aliPlayer setLiveStsSource:liveStsSource]; ...... // 準備播放 [self.aliPlayer prepare];
監聽STS是否無效。
加密直播播放過程中可能會有更換加密Key的過程,換Key時則會通過STS去請求到最新的Key。開發人員需要監聽STS是否有效。如果無效則會影響加密直播流的播放。
__weak typeof(self) weakSelf = self; [self.aliPlayer setVerifyStsCallback:^AVPStsStatus(AVPStsInfo info) { if (info 可以使用) { return Valid; } if(可以擷取有效STS){ 擷取STS();// 非同步同步均可。 return Pending; } [weakSelf.aliPlayer stop]; return Invalid; }];
說明擷取STS成功之後,需要調用
updateLiveStsInfo
方法去更新STS。如果擷取失敗,則建議停止播放。如果不更新STS,逾時之後播放器會繼續使用之前的STS去擷取Key。如果STS失效,則可能會出現花屏或者播放失敗。[self.aliPlayer updateLiveStsInfo:self.liveStsSource.accessKeyId accKey:self.liveStsSource.accessKeySecret token:self.liveStsSource.securityToken region:self.liveStsSource.region];
播放私人加密視頻-Flutter端
使用限制
經過阿里雲視頻加密(私人加密)加密過的HLS協議、MP4格式視頻,現僅支援使用阿里雲播放器播放。
操作步驟
使用者可以通過快速整合Flutter播放器到自己的應用中並實現播放。步驟如下:
整合阿里雲Flutter播放器SDK。
Flutter播放器SDK的整合操作請參見快速整合。
建立播放器播放視頻。
建立播放器的操作步驟請參見建立播放器。其中,步驟3.建立播放源的操作請根據實際需求選擇以下任一方式建立。
私人加密播放-ApsaraVideo for VODUrlSource播放(MP4格式)
說明僅6.8.0及以後版本的Flutter播放器SDK支援通過點播UrlSource方式播放MP4格式的私人加密視頻。
經過私人加密輸出的MP4格式視頻通過點播UrlSource方式播放時,可調用GetPlayInfo - 擷取音視頻播放地址介面擷取視頻的播放地址,擷取到的視頻URL需要您按協議在URL尾部自行拼接
etavirp_nuyila=1
後再傳入播放器進行播放,播放器SDK的配置與播放普通視頻配置一致,無需額外設定參數。播放URL樣本:
https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1
String urlSource="播放地址"; fAliplayer.setUrl(urlSource);
私人加密播放-ApsaraVideo for VODVidAuth(HLS協議+MP4格式)
經過私人加密輸出的HLS協議或MP4格式視頻通過點播VidAuth方式播放時,若當前視頻存在其他非私人加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為AliyunVoDEncryption來篩選私人加密流進行播放。
FlutterAliplayer.setEncryptType(EncryptType.AliyunVoDEncryption);// 選擇性參數,設定加密類型為AliyunVoDEncryption時,則只會返回經過私人加密的視頻流。 FlutterAliplayer.generatePlayerConfig().then((value) { this.fAliplayer.setVidAuth( vid: "Vid資訊", region: "接入地區",// 必選參數,點播服務的接入地區,預設為cn-shanghai。 playAuth: "<yourPlayAuth>",// 必選參數,播放憑證,需要調用點播服務的GetVideoPlayAuth介面產生。 playConfig: value); });
私人加密播放-ApsaraVideo for VODVidSts(HLS協議+MP4格式)
經過私人加密輸出的HLS協議或MP4格式視頻通過點播VidSts方式播放時,若當前視頻存在其他非私人加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為AliyunVoDEncryption來篩選私人加密流進行播放。
FlutterAliplayer.setEncryptType(EncryptType.AliyunVoDEncryption);// 選擇性參數,設定加密類型為AliyunVoDEncryption時,則只會返回經過私人加密的視頻流。 FlutterAliplayer.generatePlayerConfig().then((value) { this.fAliplayer.setVidSts( vid: "Vid資訊", region: "接入地區", accessKeyId: "<yourAccessKeyId>", accessKeySecret: "<yourAccessKeySecret>", securityToken: "<yourSecurityToken>", playConfig: value); });
HLS標準加密
簡介
HLS標準加密支援HTTP Live Streaming中規定的通用加密方案,使用AES-128對視頻內容本身進行加密,同時能支援所有的HLS播放器,您可選擇使用自研或開源的播放器。相比私人加密方案靈活性更好,但使用門檻更高、安全性更低。
有關HLS標準加密的加密機制及使用限制等更多內容,請參見HLS標準加密。
配置HLS標準加密
HLS標準加密的詳細流程及配置,請參見接入流程。
播放HLS標準加密視頻-Web端
使用限制
HLS標準加密支援所有的HLS播放器,使用者可選擇使用自研或開源的播放器。本文以介紹如何使用阿里雲播放器播放HLS標準加密視頻為例進行說明。阿里雲播放器支援使用者令牌傳遞,阿里雲CDN服務會動態修改M3U8檔案中的解密URI,解密URI中會帶上使用者的令牌,業務方可以對令牌進行驗證。
操作步驟
使用者可以在自己的Web頁面中嵌入Web播放器並實現播放。
請先參考快速接入,將Web播放器SDK引入到自己的頁面中。
使用阿里雲Web播放器SDK之前,請先瞭解瀏覽器及HLS標準加密視頻播放功能的適配情況,具體如下:
H5模式支援案頭端和移動端瀏覽器環境,具體的瀏覽器支援情況請參見H5功能適配說明。
Flash模式僅支援案頭端瀏覽器環境,具體的瀏覽器支援情況請參見Flash瀏覽器適配說明。
2.
HLS標準加密播放-ApsaraVideo for VODVidAuth播放
經過HLS標準加密的視頻通過點播VidAuth方式播放時,若當前視頻存在其他非HLS標準加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為HLSEncryption來篩選HLS標準加密流進行播放,範例程式碼如下:
let player = new Aliplayer({
id:'J_prismPlayer',
vid:'<your video ID>', // 必選參數。音視頻ID。樣本:1e067a2831b641db90d570b6480f****。
playauth:'<your PlayAuth>', // 必選參數。音視頻播放憑證。
playConfig: { // 選擇性參數
MtsHlsUriToken: '', // 選擇性參數,如需校正MtsHlsUriToken(使用者令牌),可使用此參數傳遞。
EncryptType: 'HLSEncryption', // 選擇性參數,設定加密類型為HLSEncryption時,則只會返回經過HLS標準加密的視頻流。
},
});
HLS標準加密播放-ApsaraVideo for VODVidSts播放
經過HLS標準加密的視頻通過點播VidSts方式播放時,若當前視頻存在其他非HLS標準加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為HLSEncryption來篩選HLS標準加密流進行播放,範例程式碼如下:
let player = new Aliplayer({
id: 'J_prismPlayer',
vid : '<your video ID>', // 必選參數。音視頻ID可以在音視頻上傳完成後通過控制台(路徑:媒資庫 > 音/視頻。)或服務端介面(SearchMedia )擷取。樣本:1e067a2831b641db90d570b6480f****。
accessKeyId: '<your AccessKey ID>', // 必選參數。STS臨時AK對的存取金鑰ID,產生STS安全性權杖時返回。
securityToken: '<your STS token>', // 必選參數。STS安全性權杖,需要調用STS服務的AssumeRole介面產生。
accessKeySecret: '<your AccessKey Secret>', // 必選參數。STS臨時AK對的存取金鑰,產生STS安全性權杖時返回。
region: '<region of your video>', // 必選參數。媒體資源所在的地區標識。如cn-shanghai、eu-central-1, ap-southeast-1等。
playConfig: { // 選擇性參數
MtsHlsUriToken: '', // 選擇性參數,如需校正MtsHlsUriToken(使用者令牌),可使用此參數傳遞。
EncryptType: 'HLSEncryption', // 選擇性參數,設定加密類型為HLSEncryption時,則只會返回經過HLS標準加密的視頻流。
},
};
HLS標準加密播放-ApsaraVideo for LiveUrlSource播放
經過HLS標準加密的視頻通過直播UrlSource方式播放時,與播放普通視頻一致,無需額外設定參數。
let player = new Aliplayer({
id:'J_prismPlayer',
source:'<your play URL>', // 播放地址,可以是第三方直播地址,或阿里雲直播服務中的拉流地址。
isLive: true, // 是否為直播播放。
});
播放HLS標準加密視頻-Android端
使用限制
HLS標準加密支援所有的HLS播放器,使用者可選擇使用自研或開源的播放器。本文以介紹如何使用阿里雲播放器播放HLS標準加密視頻為例進行說明。阿里雲播放器支援使用者令牌傳遞,阿里雲CDN服務會動態修改M3U8檔案中的解密URI,解密URI中會帶上使用者的令牌,業務方可以對令牌進行驗證。
操作步驟
使用者可以通過快速整合Android播放器到自己的應用中並實現播放。步驟及範例程式碼如下:
整合阿里雲Android播放器SDK。
Android播放器SDK的整合操作請參見快速整合。
建立播放器播放視頻。
建立播放器的操作請參見建立播放器。其中,步驟3.建立DataSource的操作請根據實際需求選擇以下任一方式建立。
HLS標準加密播放-ApsaraVideo for VODVidAuth播放
經過HLS標準加密的視頻通過點播VidAuth方式播放時,若當前視頻存在其他非HLS標準加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為HLSEncryption來篩選HLS標準加密流進行播放,範例程式碼如下:
VidAuth vidAuth = new VidAuth(); VidPlayerConfigGen playerConfig = new VidPlayerConfigGen(); playerConfig.setEncryptType(VidPlayerConfigGen.EncryptType.HLSEncryption);// 選擇性參數,設定加密類型為HLSEncryption時,則只會返回經過HLS標準加密的視頻流。 playerConfig.setMtsHlsUriToken("使用者令牌");// 選擇性參數,如需校正MtsHlsUriToken(使用者令牌),可使用此參數傳遞。 vidAuth.setPlayConfig(playerConfig); 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。 // vidAuth.setAuthTimeout(3600);// 選擇性參數,播放地址的有效時間長度,單位:秒。該時間長度會覆蓋在ApsaraVideo for VOD控制台設定的URL鑒權的有效時間長度。如果不傳,則取預設值3600。如需設定此參數,請確保該時間大於視頻的實際時間長度,防止播放地址在播放完成前到期。 aliPlayer.setDataSource(vidAuth);
HLS標準加密播放-ApsaraVideo for VODVidSts播放
經過HLS標準加密的視頻通過點播VidSts方式播放時,若當前視頻存在其他非HLS標準加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為HLSEncryption來篩選HLS標準加密流進行播放,範例程式碼如下:
VidSts vidSts = new VidSts(); VidPlayerConfigGen playerConfig = new VidPlayerConfigGen(); VidPlayerConfigGen.setEncryptType(VidPlayerConfigGen.EncryptType.HLSEncryption);//選擇性參數,設定加密類型為HLSEncryption時,則只會返回經過HLS標準加密的視頻流。 playerConfig.setMtsHlsUriToken("使用者令牌");// 選擇性參數,如需校正MtsHlsUriToken(使用者令牌),可使用此參數傳遞。 vidSts.setPlayConfig(playerConfig); vidSts.setVid("Vid資訊");// 必選參數,視頻ID(VideoId)。 vidSts.setAccessKeyId("<yourAccessKeyId>");// 必選參數,STS臨時AK對的存取金鑰ID,需要調用STS服務的AssumeRole介面產生。 vidSts.setAccessKeySecret("<yourAccessKeySecret>");// 必選參數,STS臨時AK對的存取金鑰,需要調用STS服務的AssumeRole介面產生。 vidSts.setSecurityToken("<yourSecurityToken>");// 必選參數,STS安全性權杖,需要調用STS服務的AssumeRole介面產生。 vidSts.setRegion("接入地區");// 必選參數,點播服務的接入地區,預設為cn-shanghai。 // vidSts.setAuthTimeout(3600);// 選擇性參數,播放地址的有效時間長度,單位:秒。該時間長度會覆蓋在ApsaraVideo for VOD控制台設定的URL鑒權的有效時間長度。如果不傳,則取預設值3600。如需設定此參數,請確保該時間大於視頻的實際時間長度,防止播放地址在播放完成前到期。 aliPlayer.setDataSource(vidSts);
HLS標準加密播放-ApsaraVideo for LiveUrlSource播放
經過HLS標準加密的視頻通過直播UrlSource方式播放時,與播放普通視頻一致,無需額外設定參數。
UrlSource urlSource = new UrlSource(); urlSource.setUri("播放地址");// 必選參數,播放地址為經過HLS標準加密的直播流地址。 aliPlayer.setDataSource(urlSource);
播放HLS標準加密視頻-iOS端
使用限制
HLS標準加密支援所有的HLS播放器,使用者可選擇使用自研或開源的播放器。本文以介紹如何使用阿里雲播放器播放HLS標準加密視頻為例進行說明。阿里雲播放器支援使用者令牌傳遞,阿里雲CDN服務會動態修改M3U8檔案中的解密URI,解密URI中會帶上使用者的令牌,業務方可以對令牌進行驗證。
操作步驟
使用者可以通過快速整合iOS播放器到自己的應用中並實現播放。步驟及範例程式碼如下:
整合阿里雲iOS播放器SDK。
iOS播放器SDK的整合操作請參見快速整合。
建立播放器播放視頻。
建立播放器的操作請參見建立播放器。其中,步驟3.建立DataSource的操作請根據實際需求選擇以下任一方式建立。
HLS標準加密播放-ApsaraVideo for VODVidAuth播放
經過HLS標準加密的視頻通過點播VidAuth方式播放時,若當前視頻存在其他非HLS標準加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為HLSEncryption來篩選HLS標準加密流進行播放,範例程式碼如下:
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。 // authSource.authTimeout = 3600; // 選擇性參數,播放地址的有效時間長度,單位:秒。該時間長度會覆蓋在ApsaraVideo for VOD控制台設定的URL鑒權的有效時間長度。如果不傳,則取預設值3600。如需設定此參數,請確保該時間大於視頻的實際時間長度,防止播放地址在播放完成前到期。 //通過VidPlayerConfigGenerator構建config VidPlayerConfigGenerator* config = [[VidPlayerConfigGenerator alloc]init]; [config addVidPlayerConfigByStringValue:@"EncryptType" value:@"HLSEncryption"]; // 選擇性參數,設定加密類型為HLSEncryption時,則只會返回經過HLS標準加密的視頻流。 [config setHlsUriToken: @"xxxxxxx"]; // 選擇性參數,如需校正MtsHlsUriToken(使用者令牌),可使用此參數傳遞。 source.playConfig = [config generatePlayerConfig]; //設定播放源 [self.player setAuthSource:authSource];
HLS標準加密播放-ApsaraVideo for VODVidSts播放
經過HLS標準加密的視頻通過點播VidSts方式播放時,若當前視頻存在其他非HLS標準加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為HLSEncryption來篩選HLS標準加密流進行播放,範例程式碼如下:
AVPVidStsSource *source = [[AVPVidStsSource alloc] init]; source.vid = @"Vid資訊"; // 必選參數,視頻ID(VideoId)。 source.region = @"接入地區"; // 必選參數,點播服務的接入地區,預設為cn-shanghai。 source.securityToken = @"<yourSecurityToken>"; // 必選參數,STS安全性權杖,需要調用STS服務的AssumeRole介面產生。 source.accessKeySecret = @"<yourAccessKeySecret>"; // 必選參數,STS臨時AK對的存取金鑰,需要調用STS服務的AssumeRole介面產生。 source.accessKeyId = @"<yourAccessKeyId>"; // 必選參數,STS臨時AK對的存取金鑰ID,需要調用STS服務的AssumeRole介面產生。 // source.authTimeout = 3600; // 選擇性參數,播放地址的有效時間長度,單位:秒。該時間長度會覆蓋在ApsaraVideo for VOD控制台設定的URL鑒權的有效時間長度。如果不傳,則取預設值3600。如需設定此參數,請確保該時間大於視頻的實際時間長度,防止播放地址在播放完成前到期。 //通過VidPlayerConfigGenerator構建config VidPlayerConfigGenerator* config = [[VidPlayerConfigGenerator alloc]init]; [config addVidPlayerConfigByStringValue:@"EncryptType" value:@"HLSEncryption"]; // 選擇性參數,設定加密類型為HLSEncryption時,則只會返回經過HLS標準加密的視頻流。 [config setHlsUriToken: @"xxxxxxx"]; // 選擇性參數,如需校正MtsHlsUriToken(使用者令牌),可使用此參數傳遞。 source.playConfig = [config generatePlayerConfig]; // 設定播放源 [self.player setStsSource:source];
HLS標準加密播放-ApsaraVideo for LiveUrlSource播放
經過HLS標準加密的視頻通過直播UrlSource方式播放時,與播放普通視頻一致,無需額外設定參數。
AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:url]; // 必選參數,播放地址為經過HLS標準加密的直播流地址。 [self.player setUrlSource:urlSource];
播放HLS標準加密視頻-Flutter端
使用限制
HLS標準加密支援所有的HLS播放器,使用者可選擇使用自研或開源的播放器。本文以介紹如何使用阿里雲播放器播放HLS標準加密視頻為例進行說明。阿里雲播放器支援使用者令牌傳遞,阿里雲CDN服務會動態修改M3U8檔案中的解密URI,解密URI中會帶上使用者的令牌,業務方可以對令牌進行驗證。
操作步驟
使用者可以通過快速整合Flutter播放器到自己的應用中並實現播放。步驟及範例程式碼如下:
整合阿里雲Flutter播放器SDK。
Flutter播放器SDK的整合操作請參見快速整合。
建立播放器播放視頻。
建立播放器的操作步驟請參見建立播放器。其中,步驟3.建立播放源的操作請根據實際需求選擇以下任一方式建立。
HLS標準加密播放-ApsaraVideo for VODVidAuth播放
經過HLS標準加密的視頻通過點播VidAuth方式播放時,若當前視頻存在其他非HLS標準加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為HLSEncryption來篩選HLS標準加密流進行播放,範例程式碼如下:
FlutterAliplayer.setEncryptType(EncryptType.HLSEncryption);// 選擇性參數,設定加密類型為HLSEncryption時,則只會返回經過HLS標準加密的視頻流。 FlutterAliplayer.setHlsUriToken("mtsHlsUriToken");// 選擇性參數,如需校正MtsHlsUriToken(使用者令牌),可使用此參數傳遞 FlutterAliplayer.generatePlayerConfig().then((value) { this.fAliplayer.setVidAuth( vid: "Vid資訊", region: "接入地區",// 必選參數,點播服務的接入地區,預設為cn-shanghai。 playAuth: "<yourPlayAuth>",// 必選參數,播放憑證,需要調用點播服務的GetVideoPlayAuth介面產生。 playConfig: value); });
HLS標準加密播放-ApsaraVideo for VODVidSts播放
經過HLS標準加密的視頻通過點播VidSts方式播放時,若當前視頻存在其他非HLS標準加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為HLSEncryption來篩選HLS標準加密流進行播放,範例程式碼如下:
FlutterAliplayer.setEncryptType(EncryptType.HLSEncryption);// 選擇性參數,設定加密類型為AliyunVoDEncryption時,則只會返回經過私人加密的視頻流。 FlutterAliplayer.setHlsUriToken("mtsHlsUriToken");// 選擇性參數,如需校正MtsHlsUriToken(使用者令牌),可使用此參數傳遞 FlutterAliplayer.generatePlayerConfig().then((value) { this.fAliplayer.setVidSts( vid: "Vid資訊", region: "接入地區", accessKeyId: "<yourAccessKeyId>", accessKeySecret: "<yourAccessKeySecret>", securityToken: "<yourSecurityToken>", playConfig: value); });
常見問題
使用HLS標準加密過程中的常見問題及解決方案,請參見視頻加密常見問題。
DRM加密
簡介
阿里雲ApsaraVideo for VOD服務提供了行業通用的DRM(Digital Rights Management)加密方式,通過一站式添加和管理,輕鬆保護著作權視頻內容的安全。支援WideVine和Fairplay的DRM方案。
核心優勢及架構等更多內容,請參見DRM加密概述。
配置DRM加密
僅支援通過ApsaraVideo for VOD控制台開啟,詳細操作請參見配置DRM加密。
播放DRM加密視頻-Web端
使用限制
經過DRM加密的視頻,現僅支援通過阿里雲播放器播放。
操作步驟
使用者可以在自己的Web頁面中嵌入Web播放器並實現播放。程式碼範例如下:
使用阿里雲Web播放器SDK之前,請先瞭解瀏覽器及DRM加密視頻播放功能的適配情況,具體如下:
H5模式支援案頭端和移動端瀏覽器環境,具體的瀏覽器支援情況請參見H5功能適配說明。
Flash模式僅支援案頭端瀏覽器環境,具體的瀏覽器支援情況請參見Flash瀏覽器適配說明。
DRM加密播放-ApsaraVideo for VODVidSts播放
經過DRM加密的視頻通過點播VidSts方式播放,與播放普通視頻相比,需要額外傳入參數isDrm: true,來啟用DRM加密。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
<title>點播DRM加密測試案例</title>
<link rel="stylesheet" href="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/skins/default/aliplayer-min.css" />
<script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/aliplayer-min.js"></script>
</head>
<body>
<div class="prism-player" id="J_prismPlayer"></div>
<script>
var player = new Aliplayer({
id: 'J_prismPlayer',
width: '100%',
isDrm: true,
vid: '<your video ID>',// 必選參數,可以通過點播控制台(路徑:媒資庫>音/視頻)查詢。樣本:1e067a2831b641db90d570b6480f****。
accessKeyId: '<your AccessKey ID>',// 必選參數,STS臨時AK對的存取金鑰ID,需要調用STS服務的AssumeRole介面產生。
securityToken: '<your STS token>',// 必選參數,STS安全性權杖,需要調用STS服務的AssumeRole介面產生。
accessKeySecret: '<your AccessKey Secret>',// 必選參數,STS臨時AK對的存取金鑰,需要調用STS服務的AssumeRole介面產生。
region: '<region of your video>', // 必選參數,媒體資源所在的地區。如cn-shanghai、eu-central-1, ap-southeast-1等。
certId: '<your certificate ID>', // 蘋果裝置播放時此參數必選。用於請求蘋果認證,可根據DRM加密的實現到ApsaraVideo for VOD或ApsaraVideo for Live控制台擷取。
// authTimeout: 7200, // 選擇性參數,播放地址的有效時間長度,單位:秒。該時間長度會覆蓋在ApsaraVideo for VOD控制台設定的URL鑒權的有效時間長度。如果不傳,則取預設值7200。如需設定此參數,請確保該時間大於視頻的實際時間長度,防止播放地址在播放完成前到期。
},function(player){
console.log('The player is created.')
});
</script>
</body>
</html>
DRM加密播放-ApsaraVideo for LiveLiveStsSource播放
經過DRM加密的視頻通過直播LiveStsSource方式播放,需要傳入URL和STS臨時身份憑證等資訊,STS臨時身份憑證的產生請參見使用STS臨時授權方案上傳視頻,範例程式碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
<title>直播DRM加密測試案例</title>
<link rel="stylesheet" href="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/skins/default/aliplayer-min.css" />
<script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/aliplayer-min.js"></script>
</head>
<body>
<div class="prism-player" id="J_prismPlayer"></div>
<script>
var player = new Aliplayer({
id: 'J_prismPlayer',
width: '100%',
isLive: true, // 直播設定為true。
isDrm: true,
source: '<your live stream url>',// 必選參數,播放地址為經過DRM加密的直播流地址。
accessKeyId: '<your AccessKey ID>',// 必選參數,STS臨時AK對的存取金鑰ID,需要調用STS服務的AssumeRole介面產生。
securityToken: '<your STS token>',// 必選參數,STS安全性權杖,需要調用STS服務的AssumeRole介面產生。
accessKeySecret: '<your AccessKey Secret>',// 必選參數,STS臨時AK對的存取金鑰,需要調用STS服務的AssumeRole介面產生。
region: '<region of your video>', // 必選參數,媒體資源所在的服務地區。如cn-shanghai、eu-central-1, ap-southeast-1等。
certId: '<your certificate ID>', // 蘋果裝置播放時此參數必選,用於請求蘋果認證,可根據DRM加密的實現到ApsaraVideo for VOD或ApsaraVideo for Live控制台擷取。
},function(player){
console.log('The player is created.')
});
</script>
</body>
</html>
播放DRM加密視頻-Android端
使用限制
經過DRM加密的視頻,現僅支援通過阿里雲播放器播放。
操作步驟
使用者可以通過快速整合Android播放器到自己的應用中並實現播放。步驟及範例程式碼如下:
整合阿里雲Android播放器SDK。
Android播放器SDK的整合操作請參見快速整合。
建立播放器播放視頻。
建立播放器的操作請參見建立播放器。其中,步驟3.建立DataSource的操作請根據實際需求選擇以下任一方式建立。
說明Android平台,為了保證高安全等級的視頻能正常播放,建議使用surfaceView進行播放。
DRM加密播放-ApsaraVideo for VODVidSts播放
經過DRM加密的視頻通過點播VidSts方式播放時,與播放普通視頻配置一致,無需額外設定參數。
VidSts vidSts = new VidSts(); vidSts.setVid("Vid資訊");// 必選參數,視頻ID(VideoId)。 vidSts.setAccessKeyId("<yourAccessKeyId>");// 必選參數,STS臨時AK對的存取金鑰ID,需要調用STS服務的AssumeRole介面產生。 vidSts.setAccessKeySecret("<yourAccessKeySecret>");// 必選參數,STS臨時AK對的存取金鑰,需要調用STS服務的AssumeRole介面產生。 vidSts.setSecurityToken("<yourSecurityToken>");// 必選參數,STS安全性權杖,需要調用STS服務的AssumeRole介面產生。 vidSts.setRegion("接入地區");// 必選參數,點播服務的接入地區,預設為cn-shanghai。 // vidSts.setAuthTimeout(3600); // 選擇性參數,播放地址的有效時間長度,單位:秒。該時間長度會覆蓋在ApsaraVideo for VOD控制台設定的URL鑒權的有效時間長度。如果不傳,則取預設值3600。如需設定此參數,請確保該時間大於視頻的實際時間長度,防止播放地址在播放完成前到期。 aliPlayer.setDataSource(vidSts);
DRM加密播放-ApsaraVideo for LiveLiveStsSource播放
經過DRM加密的視頻通過直播LiveStsSource方式播放時,需要傳入URL和STS憑證,並設定視頻加密類型為WideVine_FairPlay。範例程式碼如下:
建立DataSource。
需傳遞AVPLiveStsSource作為播放源。
// 建立LiveSts,EncryptionType需要設定為WideVine_FairPlay LiveSts liveSts = new LiveSts(); liveSts.setUrl("<your live stream url>");// 必選參數,播放地址為經過DRM加密的HLS直播流地址。 liveSts.setAccessKeyId("<your AccessKey ID>");// 必選參數,STS臨時AK對的存取金鑰ID,需要調用STS服務的AssumeRole介面產生。 liveSts.setAccessKeySecret("<your AccessKey Secret>");// 必選參數,STS臨時AK對的存取金鑰,需要調用STS服務的AssumeRole介面產生。 liveSts.setSecurityToken("<your STS token>");// 必選參數,STS安全性權杖,需要調用STS服務的AssumeRole介面產生。 liveSts.setDomain("<your Domain>");// 必選參數,直播流的播流網域名稱。 liveSts.setApp("<your App Name>");// 必選參數,直播流的AppNam。 liveSts.setStream("<your Stream Name>");// 必選參數,直播流的StreamName。 liveSts.setEncryptionType(LiveSts.LiveEncryptionType.WideVine_FairPlay);// 必選參數,設定加密類型為WideVine_FairPlay。 liveSts.setRegion("<region of your video>");// 必選參數,服務地區。如cn-shanghai等。 // 設定播放源 aliPlayer.setDataSource(liveSts); // 準備播放 aliPlayer.prepare();
監聽STS是否無效。
加密直播播放過程中可能會有更換加密Key的過程,換Key時則會通過STS去請求到最新的Key。開發人員需要監聽STS是否有效。如果無效則會影響加密直播流的播放。
mAliyunVodPlayer.setOnVerifyTimeExpireCallback(new AliPlayer.OnVerifyTimeExpireCallback() { @Override public AliPlayer.Status onVerifySts(StsInfo info) { if(info 可以使用){ return IPlayer.StsStatus.Valid; } if(可以擷取有效STS){ 擷取STS();// 非同步同步均可。 return IPlayer.StsStatus.Pending; } // 如果info無效,且無法擷取到最新的STS,那麼建議停止播放。防止出現花屏。 mAliyunVodPlayer.stop(); return IPlayer.StsStatus.Invalid; } @Override public AliPlayer.Status onVerifyAuth(VidAuth auth) { return AliPlayer.Status.Valid; } });
說明擷取STS成功之後,需要調用
updateLiveStsInfo
方法去更新STS。如果擷取失敗,則建議停止播放。如果不更新STS,逾時之後播放器會繼續使用之前的STS去擷取Key。如果STS失效,則可能會出現花屏或者播放失敗。mAliyunVodPlayer.updateStsInfo(stsInfo);
播放DRM加密視頻-iOS端
使用限制
經過DRM加密的視頻,現僅支援通過阿里雲播放器播放。
操作步驟
使用者可以通過快速整合iOS播放器到自己的應用中並實現播放。步驟及範例程式碼如下:
整合阿里雲iOS播放器SDK。
iOS播放器SDK的整合操作請參見快速整合。
建立播放器播放視頻。
建立播放器的操作請參見建立播放器。其中,步驟3.建立DataSource的操作請根據實際需求選擇以下任一方式建立。
說明iOS平台,需要在
[self.player prepare]
之前全域調用一次AliPlayerGlobalSettings
中的setFairPlayCertID
方法來設定認證ID。認證ID可以在ApsaraVideo for VOD控制台 > 組態管理 > ApsaraVideo for Media Processing配置 > DRM認證管理中擷取。[AliPlayerGlobalSettings setFairPlayCertID:@"控制台擷取的認證ID"];
DRM加密播放-ApsaraVideo for VODVidSts播放
經過DRM加密的視頻通過點播VidSts方式播放時,與播放普通視頻配置一致,無需額外設定參數。
AVPVidStsSource *source = [[AVPVidStsSource alloc] init]; source.region = @"接入地區"; // 必選參數,點播服務的接入地區,預設為cn-shanghai。 source.vid = @"Vid資訊"; // 必選參數,視頻ID(VideoId)。 source.securityToken = @"<yourSecurityToken>"; // 必選參數,STS安全性權杖,需要調用STS服務的AssumeRole介面產生。 source.accessKeySecret = @"<yourAccessKeySecret>"; // 必選參數,STS臨時AK對的存取金鑰,需要調用STS服務的AssumeRole介面產生。 source.accessKeyId = @"<yourAccessKeyId>"; // 必選參數,STS臨時AK對的存取金鑰ID,需要調用STS服務的AssumeRole介面產生。 // source.authTimeout = 3600; // 選擇性參數,播放地址的有效時間長度,單位:秒。該時間長度會覆蓋在ApsaraVideo for VOD控制台設定的URL鑒權的有效時間長度。如果不傳,則取預設值3600。如需設定此參數,請確保該時間大於視頻的實際時間長度,防止播放地址在播放完成前到期。 //設定播放源 [self.player setStsSource:source]
DRM加密播放-ApsaraVideo for LiveLiveStsSource播放
經過DRM加密的視頻通過直播LiveStsSource方式播放時,需要傳入URL和STS憑證,並設定視頻加密類型為ENCRYPTION_TYPE_FAIRPLAY。範例程式碼如下:
建立DataSource。
需傳遞AVPLiveStsSource作為播放源。
// 建立LiveSts,encryptionType需要設定為ENCRYPTION_TYPE_FAIRPLAY AVPLiveStsSource *liveStsSource = [[AVPLiveStsSource alloc] initWithUrl:@"加密直播url" accessKeyId:@"臨時akId" accessKeySecret:@"臨時akId" securityToken:@"安全token" region:@"region值" domain:@"url播流網域名稱" app:@"播流應用程式名稱" stream:@"播流流名" encryptionType:ENCRYPTION_TYPE_FAIRPLAY];// 必選參數,設定加密類型為ENCRYPTION_TYPE_FAIRPLAY。 // 設定播放源 [self.aliPlayer setLiveStsSource:liveStsSource]; ...... // 準備播放 [self.aliPlayer prepare];
監聽STS是否無效。
加密直播播放過程中可能會有更換加密Key的過程,換Key時則會通過STS去請求到最新的Key。開發人員需要監聽STS是否有效。如果無效則會影響加密直播流的播放。
__weak typeof(self) weakSelf = self; [self.aliPlayer setVerifyStsCallback:^AVPStsStatus(AVPStsInfo info) { if (info 可以使用) { return Valid; } if(可以擷取有效STS){ 擷取STS();// 非同步同步均可。 return Pending; } [weakSelf.aliPlayer stop]; return Invalid; }];
說明擷取STS成功之後,需要調用
updateLiveStsInfo
方法去更新STS。如果擷取失敗,則建議停止播放。如果不更新STS,逾時之後播放器會繼續使用之前的STS去擷取Key。如果STS失效,則可能會出現花屏或者播放失敗。[self.aliPlayer updateLiveStsInfo:self.liveStsSource.accessKeyId accKey:self.liveStsSource.accessKeySecret token:self.liveStsSource.securityToken region:self.liveStsSource.region];