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次數收費(三方DRM加密請參考其對應收費標準),只需整合阿里雲播放器SDK。 |
播放器SDK加密播放相容說明
終端 | 播放方式 | 私人加密(HLS) | License私人加密(HLS) | License私人加密(MP4) | 私人加密(直播FLV) | HLS標準加密 | 阿里雲DRM加密 | 三方DRM加密 |
Web端 | 點播UrlSource | ❌ | ❌ | ❌ | ❌ | ✔️ | ❌ | ✔️ |
點播VidAuth | ✔️ | ❌ | ❌ | ❌ | ✔️ | ❌ | ❌ | |
點播VidSts | ❌ | ❌ | ❌ | ❌ | ✔️ | ✔️ | ❌ | |
直播UrlSource | ❌ | ❌ | ❌ | ❌ | ✔️ | ❌ | ✔️ | |
直播LiveStsSource | ✔️ | ✔️ | ❌ | ❌ | ❌ | ✔️ | ❌ | |
Native端(iOS/Android/Flutter) | 點播UrlSource | ✔️ | ✔️ SDK版本需為6.17.0及以上版本。 | ✔️ SDK版本需為6.8.0及以上版本。 | ❌ | ✔️ | ❌ | ✔️ SDK版本需為V7.8.0及以上,flutter端不支援。 |
點播VidAuth | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ | |
點播VidSts | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ✔️ flutter端不支援。 | ❌ | |
直播UrlSource | ❌ | ❌ | ❌ | ❌ | ✔️ | ❌ | ✔️ SDK版本需為V7.8.0及以上,flutter端不支援。 | |
直播LiveStsSource | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ✔️ flutter端不支援。 | ❌ |
加密介紹
阿里雲視頻加密(私人加密)
阿里雲視頻加密通過對視頻資料進行加密,即使下載到本地,視頻仍保持加密狀態,有效防止惡意二次分發、泄露和盜鏈問題。詳情請參見相關文檔阿里雲視頻加密(私人加密)。
阿里雲播放器SDK封裝瞭解密邏輯與服務端互動,只需配置加密轉碼並整合播放器,即可低成本實現加密播放。
阿里雲視頻加密(私人加密)屬於免費服務,但需通過視頻轉碼實現加密功能。轉碼操作將產生服務費用,具體計費標準請參考媒資轉碼計費。
配置私人加密
阿里雲視頻加密的詳細流程及配置,請參見如何使用。
使用限制
阿里雲視頻加密(私人加密)功能支援對HLS、FLV和MP4格式的視頻進行加密操作。該功能僅支援通過阿里雲播放器進行播放。在Web端,僅支援HLS格式的播放,而在Native端則支援所有格式的播放。
阿里雲視頻加密(License私人加密)
阿里雲視頻加密(License私人加密)在私人加密保障播放安全的基礎上,通過直接使用加密視頻URL起播,進一步提升了起播速度,適用於短視頻和短劇情境。
阿里雲視頻加密(License私人加密)屬於免費服務,但需通過視頻轉碼實現加密功能。轉碼操作將產生服務費用,具體計費標準請參考媒資轉碼計費。
配置私人加密
阿里雲視頻加密的詳細流程及配置,請參見如何使用。
使用限制
阿里雲視頻加密(License私人加密)功能支援對HLS和MP4格式的視頻進行加密操作。該功能僅支援通過阿里雲播放器進行播放。
HLS標準加密
HLS標準加密採用AES-128對視頻內容加密,相容所有HLS播放器,支援自研或開源播放器,靈活性高但門檻更高、安全性較低。詳情請參見HLS標準加密。
阿里雲視頻加密(HLS標準加密)屬於免費服務,但需通過視頻轉碼實現加密功能。轉碼操作將產生服務費用,具體計費標準請參考媒資轉碼計費。
配置HLS標準加密
HLS標準加密的詳細流程及配置,請參見接入流程。
使用限制
HLS標準加密相容各類HLS播放器,使用者可自選播放器。本文以阿里雲播放器為例,介紹如何播放HLS加密視頻。阿里雲播放器支援令牌傳遞,CDN會動態調整HLS檔案中的解密URI,並附帶使用者令牌,供業務方驗證。
阿里雲DRM加密
阿里雲ApsaraVideo for VOD支援行業通用DRM加密(Digital Rights Management),一站式管理著作權視頻,相容WideVine和Fairplay方案。詳情請參見DRM加密。
DRM加密基於轉碼實現,但在轉碼輸出視頻時,僅產生轉碼費用,不會產生DRM加密費用;當在終端請求播放DRM加密視頻時會產生DRM加密費用,播放端根據終端DRM加密視頻License的請求次數,按次計算費用。計費詳情請參見DRM計費。
配置DRM加密
可通過直播和點播控制台開啟,詳情請參見直播配置DRM加密和點播配置DRM加密。
使用限制
經過DRM加密的視頻,目前僅支援通過阿里雲播放器播放。
三方DRM加密
阿里雲ApsaraVideo for VOD支援行業通用DRM加密(Digital Rights Management),完整實現從智能媒體服務生產視頻、第三方DRM加密到阿里雲播放器SDK解密播放的全流程支援。
DRM加密基於轉碼實現,但在轉碼輸出視頻時,僅產生轉碼費用,不會產生DRM加密費用;當在終端請求播放DRM加密視頻時會產生DRM加密費用,播放端根據終端DRM加密視頻License的請求次數,按次計算費用。計費詳情請參見DRM計費。
配置DRM加密
Web端
使用阿里雲Web播放器SDK之前,請先瞭解瀏覽器及阿里雲視頻加密(私人加密)視頻播放功能的適配情況,具體如下:
H5 模式支援案頭端和移動端瀏覽器環境,具體支援情況請參見功能適配說明。
出於安全考慮,阿里雲視頻加密(私人加密)不支援用真實的加密視頻調試。
操作步驟
使用者可以在自己的Web頁面中嵌入Web播放器並實現播放。
請先參考快速接入,將Web播放器SDK引入到自己的頁面中。
選擇相應的加密方式並進行播放。
使用者可以在自己的Web頁面中嵌入Web播放器並實現播放。程式碼範例如下:
阿里雲視頻加密(私人加密)
私人加密播放-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>私人加密播放-ApsaraVideo for LiveLiveStsSource播放(HLS格式)
經過私人加密的視頻通過直播LiveStsSource方式播放時,需要傳入URL和STS臨時身份憑證等資訊,STS臨時身份憑證的產生請參見擷取STS Token。範例程式碼如下:
<!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>
如果希望支援 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' // 請填寫完整的外掛程式指令碼地址,確保此地址可以訪問 })
注意:請確保播放器的版本和外掛程式的版本完全一致。
如果您的網頁運行在自訂打包的 iOS 應用程式中(例如 uni-app),則需要在應用的 Info.plist 檔案中將您的網站網域名稱配置到 WKAppBoundDomains,以便在 WKWebview 中啟用 Service Worker 功能。有關詳細資料,詳情請參考:App-Bound Domains。
HLS標準加密
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標準加密播放-UrlSource播放
經過HLS標準加密的視頻通過直播或點播UrlSource方式播放時,與播放普通視頻一致,無需額外設定參數。
let player = new Aliplayer({
id:'J_prismPlayer',
source:'<your play URL>', // 播放地址,直播或者是點播地址。
isLive: true, // 是否為直播播放。
});DRM加密
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 Token,範例程式碼如下:
<!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>Android端
操作步驟
使用者可以通過快速整合Android播放器到自己的應用中並實現播放。步驟及範例程式碼如下:
整合阿里雲Android播放器SDK。
Android播放器SDK的整合操作請參見整合SDK。
建立播放器播放視頻。
建立播放器的操作請參見基礎功能。其中,步驟3.建立DataSource的操作請根據實際需求選擇以下任一方式建立。
阿里雲視頻加密(私人加密)
注意事項
經過阿里雲視頻加密(私人加密)加密過的HLS格式視頻,支援通過建立轉碼模板進行轉碼後通過URL進行播放。在進行轉碼之前,您需首先在同一帳號下完成License綁定(詳情參見管理License),然後使用EncryptType參數來建立轉碼模板組,樣本如下:
建立後,您無法通過控制台對模板進行修改或儲存,否則加密方式將被覆蓋。
[{
"TranscodeTemplateId": "",
"TemplateName": "740PH264HLS本地加密",
"Type": "Normal",
"Container": {
"Format": "m3u8"
},
"TransConfig": {
"IsCheckReso": false,
"IsCheckResoFail": false,
"IsCheckVideoBitrate": false,
"IsCheckVideoBitrateFail": false,
"IsCheckAudioBitrate": false,
"IsCheckAudioBitrateFail": false
},
"Definition": "HD",
"MuxConfig": {
"Segment": {
"Duration": 5
}
},
"EncryptSetting": {
"EncryptType": "AliyunVoDLicenseEncryption"
},
"Video": {
"Height": 720,
"Bitrate": 400,
"Codec": "H.264",
"Fps": 25,
"Gop": 250,
"Profile": "high"
},
"Audio": {
"Bitrate": 64,
"Codec": "AAC",
"Channels": 2,
"Samplerate": "44100"
}
}]私人加密播放-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格式+FLV格式)
經過私人加密輸出的HLS格式或者FLV格式視頻通過直播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);
阿里雲視頻加密(License私人加密)
注意事項
經過阿里雲視頻加密(License私人加密)加密過的HLS格式視頻,支援通過建立轉碼模板進行轉碼後通過URL進行播放。在進行轉碼之前,您需首先在同一帳號下完成License綁定(詳情參見管理License),然後使用EncryptType參數來建立轉碼模板組,樣本如下:
建立後,您無法通過控制台對模板進行修改或儲存,否則加密方式將被覆蓋。
[{
"TranscodeTemplateId": "",
"TemplateName": "740PH264HLS本地加密",
"Type": "Normal",
"Container": {
"Format": "m3u8"
},
"TransConfig": {
"IsCheckReso": false,
"IsCheckResoFail": false,
"IsCheckVideoBitrate": false,
"IsCheckVideoBitrateFail": false,
"IsCheckAudioBitrate": false,
"IsCheckAudioBitrateFail": false
},
"Definition": "HD",
"MuxConfig": {
"Segment": {
"Duration": 5
}
},
"EncryptSetting": {
"EncryptType": "AliyunVoDLicenseEncryption"
},
"Video": {
"Height": 720,
"Bitrate": 400,
"Codec": "H.264",
"Fps": 25,
"Gop": 250,
"Profile": "high"
},
"Audio": {
"Bitrate": 64,
"Codec": "AAC",
"Channels": 2,
"Samplerate": "44100"
}
}]License私人加密播放-ApsaraVideo for VODUrlSource播放(HLS格式+MP4格式)
僅6.8.0及以後版本的Android播放器SDK支援通過點播UrlSource方式播放MP4格式的License私人加密視頻,6.17.0及以後的版本支援HLS格式(單碼率、多碼率)的License私人加密視頻。
經過License私人加密輸出的HLS格式或MP4格式視頻通過點播UrlSource方式播放時,可調用擷取音視頻播放地址介面擷取視頻的播放地址,擷取到的視頻URL需要您按協議在URL尾部自行拼接etavirp_nuyila=1(位置不限)後傳入播放器(僅MP4需此參數,HLS可直接使用原視頻URL),播放器SDK的配置與播放普通視頻配置一致,無需額外設定參數。
播放URL樣本1:https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1
播放URL樣本2:https://example.aliyundoc.com/test.mp4?auth_key=xxxxx&etavirp_nuyila=1
// 播放地址
String playURL = "https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1";
// 播放器
UrlSource urlSource = new UrlSource();
urlSource.setUri(playURL);// 必選參數,視頻的播放地址(URL),可調用GetPlayInfo介面擷取視頻URL
aliPlayer.setDataSource(urlSource);
aliPlayer.prepare();
// 短視頻播放器
AliListPlayer aliyunListPlayer = AliPlayerFactory.createAliListPlayer(getApplicationContext());
// 添加UrlSource播放源
aliyunListPlayer.addUrl(playURL,uid);
aliyunListPlayer.moveTo(uid);
//預先載入
MediaLoader mediaLoader = MediaLoader.getInstance();
mediaLoader.load(playURL,"duration");HLS標準加密
HLS標準加密播放-ApsaraVideo for VODVidAuth播放
經過HLS標準加密的視頻通過點播VidAuth方式播放時,若當前視頻存在其他非HLS標準加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為HLSEncryption來篩選HLS標準加密流進行播放,範例程式碼如下:
開啟M3U8標準加密改寫後,則需要您調用setMtsHlsUriToken設定使用者令牌。
VidAuth vidAuth = new VidAuth();
VidPlayerConfigGen playerConfig = new VidPlayerConfigGen();
playerConfig.setEncryptType(VidPlayerConfigGen.EncryptType.HLSEncryption);// 選擇性參數,設定加密類型為HLSEncryption時,則只會返回經過HLS標準加密的視頻流。
playerConfig.setMtsHlsUriToken("token");// 選擇性參數,如需校正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標準加密流進行播放,範例程式碼如下:
開啟M3U8標準加密改寫後,則需要您調用setMtsHlsUriToken設定使用者令牌。
VidSts vidSts = new VidSts();
VidPlayerConfigGen playerConfig = new VidPlayerConfigGen();
VidPlayerConfigGen.setEncryptType(VidPlayerConfigGen.EncryptType.HLSEncryption);//選擇性參數,設定加密類型為HLSEncryption時,則只會返回經過HLS標準加密的視頻流。
playerConfig.setMtsHlsUriToken("token");// 選擇性參數,如需校正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標準加密播放-UrlSource播放
經過HLS標準加密的視頻通過直播或點播UrlSource方式播放時,播放器SDK的配置與播放普通視頻配置一致,無需額外設定參數。
推薦使用阿里雲點播服務,可調用擷取音視頻播放地址介面擷取視頻的播放地址後傳入播放器。
開啟M3U8標準加密改寫後,擷取到的視頻URL需要您按協議在URL尾部自行拼接MtsHlsUriToken=<token>(位置不限)後傳入播放器。
原始播放URL樣本:https://demo.aliyundoc.com/encrypt-stream****-hd.m3u8。
輸入到播放器URL樣本:https://demo.aliyundoc.com/encrypt-stream****-hd.m3u8?MtsHlsUriToken=<token>。
UrlSource urlSource = new UrlSource();
urlSource.setUri("播放地址");//播放地址為經過HLS標準加密的直播流或點播流地址。
aliPlayer.setDataSource(urlSource);阿里雲DRM加密
Android平台,為了保證高安全等級的視頻能正常播放,建議使用surfaceView進行播放。
DRM加密播放-ApsaraVideo for VODVidSts播放
請先參考點播配置DRM加密進行DRM加密配置,經過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加密進行DRM加密配置,經過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加密
播放器SDK版本需為V7.8.0及以上。
三方DRM(Widevine)加密播放-ApsaraVideo for VODUrlSource/直播UrlSource播放
僅支援HLS和DASH協議的Widevine方案。
請先參考點播封裝進行DRM加密配置,經過DRM加密的視頻通過UrlSource方式播放時,除了與播放普通視頻配置一致外,還必須實現DrmCallback介面以擷取視頻的密鑰資訊。
//實現DrmCallback.requestKey的介面,結合三方DRM廠商的文檔擷取密鑰。
//以下以PallyCon DRM廠商擷取密鑰的實現供參考,詳情參考https://pallycon.com/docs/en/multidrm
player.setDrmCallback(new DrmCallback() {
@Override
public byte[] requestKey(byte[] data) {
//按照DRM廠商要求,通過HTTP POST請求密鑰資訊
String licenseUrl = "https://license-global.pallycon.com/ri/licenseManager.do";
String[] header = {
//將TOKEN_ID替換成您自己的
"pallycon-customdata-v2: TOKEN_ID"
};
//盡量避免佔用該線程太長時間。
byte[] response = async_http_post(licenseUrl, header, data);
if (response != null) {
//若您的token的的response_format設定為original,則直接返回response,否則還需要解析後返回
//具體參考:https://pallycon.com/docs/en/multidrm/license/license-token/#token-json
//不同廠商response的格式與結構差異巨大,請仔細檢查,如果response無法被用來解密,播放器會onError告知相關錯誤。
return response;
} else {
//異常處理,此時播放器會onError並告知相關錯誤。
return null;
}
}
});iOS端
操作步驟
使用者可以通過快速整合iOS播放器到自己的應用中並實現播放。步驟及範例程式碼如下:
整合阿里雲iOS播放器SDK。
iOS播放器SDK的整合操作請參見整合SDK。
建立播放器(預先載入)播放(載入)視頻。
建立播放器的操作步驟請參見基礎功能。其中,步驟3.建立DataSource的操作請根據實際需求選擇以下任一方式建立。
阿里雲視頻加密(私人加密)
私人加密播放-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格式+FLV格式)
經過私人加密輸出的HLS格式或者FLV格式視頻通過直播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];
阿里雲視頻加密(License私人加密)
License私人加密播放-ApsaraVideo for VODUrlSource播放(HLS格式+MP4格式)
僅6.8.0及以後版本的iOS播放器SDK支援通過點播UrlSource方式播放MP4格式的License私人加密視頻,6.17.0及以後版本支援HLS格式(單碼率、多碼率)的License私人加密視頻。
經過License私人加密輸出的HLS格式或MP4格式視頻通過點播UrlSource方式播放時,可調用擷取音視頻播放地址介面擷取視頻的播放地址,擷取到的視頻URL需要您按協議在URL尾部自行拼接etavirp_nuyila=1(位置不限)後傳入播放器(僅MP4需此參數,HLS可直接使用原視頻URL),播放器SDK的配置與播放普通視頻配置一致,無需額外設定參數。
播放URL樣本1:https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1
播放URL樣本2:https://example.aliyundoc.com/test.mp4?auth_key=xxxxx&etavirp_nuyila=1
//播放地址
NSString *playURL = @"https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1";
//播放器
AliPlayer *player = [[AliPlayer alloc] init];
AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:playURL]; // 必選參數,視頻的播放地址(URL),可調用GetPlayInfo介面擷取視頻URL,擷取到的視頻URL(僅限MP4)需要在尾部自行拼接etavirp_nuyila=1後再傳入,樣本:https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1
[player setUrlSource:urlSource];
[player prepare];
//列表播放器
AliListPlayer *listPlayer = [[AliListPlayer alloc] init];
[listPlayer addUrlSource:playURL uid:UUIDString];
[listPlayer moveTo:@"uid"];
//預先載入
AliMedialoader *mediaLoader = [AliMediaLoader shareInstance];
[mediaLoader load:playURL duration:1000];HLS標準加密
HLS標準加密播放-ApsaraVideo for VODVidAuth播放
經過HLS標準加密的視頻通過點播VidAuth方式播放時,若當前視頻存在其他非HLS標準加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為HLSEncryption來篩選HLS標準加密流進行播放,範例程式碼如下:
開啟M3U8標準加密改寫後,則需要您調用setHlsUriToken設定使用者令牌。
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: @"token"]; // 選擇性參數,如需校正MtsHlsUriToken(使用者令牌),可使用此參數傳遞。
source.playConfig = [config generatePlayerConfig];
//設定播放源
[self.player setAuthSource:authSource];HLS標準加密播放-ApsaraVideo for VODVidSts播放
經過HLS標準加密的視頻通過點播VidSts方式播放時,若當前視頻存在其他非HLS標準加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為HLSEncryption來篩選HLS標準加密流進行播放,範例程式碼如下:
開啟M3U8標準加密改寫後,則需要您調用setHlsUriToken設定使用者令牌。
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: @"token"]; // 選擇性參數,如需校正MtsHlsUriToken(使用者令牌),可使用此參數傳遞。
source.playConfig = [config generatePlayerConfig];
// 設定播放源
[self.player setStsSource:source];HLS標準加密播放-UrlSource播放
經過HLS標準加密的視頻通過直播或點播UrlSource方式播放時,播放器SDK的配置與播放普通視頻配置一致,無需額外設定參數。
推薦使用阿里雲點播服務,可調用擷取音視頻播放地址介面擷取視頻的播放地址後傳入播放器。
開啟M3U8標準加密改寫後,擷取到的視頻URL需要您按協議在URL尾部自行拼接MtsHlsUriToken=<token>(位置不限)後傳入播放器。
原始播放URL樣本:https://demo.aliyundoc.com/encrypt-stream****-hd.m3u8。
輸入到播放器URL樣本:https://demo.aliyundoc.com/encrypt-stream****-hd.m3u8?MtsHlsUriToken=<token>。
AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:url]; //播放地址為經過HLS標準加密的直播流或點播流地址。
[self.player setUrlSource:urlSource];阿里雲DRM加密
iOS平台,需要在[self.player prepare]之前全域調用一次AliPlayerGlobalSettings中的setFairPlayCertID方法來設定認證ID。認證ID可以在ApsaraVideo for VOD控制台 > 組態管理 > ApsaraVideo for Media Processing配置 > DRM認證管理中擷取。
[AliPlayerGlobalSettings setFairPlayCertID:@"控制台擷取的認證ID"];DRM加密播放-ApsaraVideo for VODVidSts播放
請先參考點播配置DRM加密進行DRM加密配置,經過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加密進行DRM加密配置,經過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];
三方DRM加密
播放器SDK版本需為V7.8.0及以上。
Fairplay加密視頻必須使用AppleAVPlayer播放。起播前調用
[self.player setPreferPlayerName:@"AppleAVPlayer"]切換核心,播放非DRM加密視頻時需調用[self.player setPreferPlayerName:@""]恢複預設核心。
三方DRM(Fairplay)加密播放-ApsaraVideo for VODUrlSource/直播UrlSource播放
僅支援HLS協議的Fairplay方案。
請先參考直播封裝進行DRM加密配置,經過DRM加密的視頻通過UrlSource方式播放時,除了與播放普通視頻配置一致外,還必須實現AVPDrmDelegate介面以擷取Fairplay認證及視頻密鑰。
@interface SimplePlayerViewController()<AVPDrmDelegate>
@end
- (void)viewDidLoad {
self.player = [[AliPlayer alloc] init];
self.player.playerView = self.avpPlayerView.playerView;
self.player.drmDelegate = self;
if(當前URL是三方DRM視頻){
[self.player setPreferPlayerName:@"AppleAVPlayer"];
}
//...
}
//AVPDrmDelegate.requestCert和requestKey的介面,結合三方DRM廠商的文檔擷取認證和密鑰。
//以下以PallyCon DRM廠商擷取認證和密鑰的實現供參考,詳情參考https://pallycon.com/docs/en/multidrm
#pragma mark AVPDrmDelegate
- (NSData *)requestCert:(AliPlayer *)player {
// 業務也可以提前把認證請求好緩衝下來,此處只要返回緩衝的認證即可,可降低起播耗時。
// 如果認證資料不對,播放器會onError並告知相關錯誤,也可關注控制台的報錯瞭解更多資訊。
//將SITE_ID替換成您自己的
const char* url = "https://license.pallycon.com/ri/fpsKeyManager.do?siteId=SITE_ID";
//按照DRM廠商要求,通過HTTP GET請求配置的Fairplay認證
//盡量避免佔用該線程太長時間。
NSData* responseData = [self performAsyncHttpGet:url];
if (!responseData) {
//異常處理,此時播放器會onError並告知相關錯誤。
return nil;
}
//請求回來的資料需要base64 decode後再返回給播放器
NSString *base64String = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
return [self decodeBase64String:base64String];
}
- (NSData *)requestKey:(AliPlayer *)player data:(NSData *)data {
//按照DRM廠商要求,通過HTTP POST請求密鑰資訊
NSString *urlString = [NSString stringWithFormat:@"https://license-global.pallycon.com/ri/licenseManager.do"];
const char *url = [urlString UTF8String];
//將TOKEN_ID替換成您自己的
NSString *headerString = [NSString stringWithFormat:@"pallycon-customdata-v2: TOKEN_ID"];
const char* headers[] = {
[headerString UTF8String]
};
int headerCount = sizeof(headers) / sizeof(headers[0]);
//盡量避免佔用該線程太長時間。
NSData* responseData = [self performAsyncHttpPost:url
headers:headers
headerCount:headerCount
data:data];
if (!responseData) {
//異常處理,此時播放器會onError並告知相關錯誤。
return nil;
}
//若您的token的的response_format設定為original,則直接返回response,否則還需要解析後返回
//具體參考:https://pallycon.com/docs/en/multidrm/license/license-token/#token-json
//不同廠商response的格式與結構差異巨大,請仔細檢查,如果response無法被用來解密,播放器會onError告知相關錯誤。
return [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
}Flutter端
Flutter端不支援DRM加密。
操作步驟
使用者可以通過快速整合Flutter播放器到自己的應用中並實現播放。步驟及範例程式碼如下:
整合阿里雲Flutter播放器SDK。
Flutter播放器SDK的整合操作請參見整合SDK。
建立播放器播放視頻。
阿里雲視頻加密(私人加密)
私人加密播放-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);
});阿里雲視頻加密(License私人加密)
License私人加密播放-ApsaraVideo for VODUrlSource播放(HLS格式+MP4格式)
僅6.8.0及以後版本的Flutter播放器SDK支援通過點播UrlSource方式播放MP4格式的License私人加密視頻,6.17.0及以後版本支援HLS格式(單碼率、多碼率)的License私人加密視頻。
經過License私人加密輸出的HLS格式或MP4格式視頻通過點播UrlSource方式播放時,可調用擷取音視頻播放地址介面擷取視頻的播放地址,擷取到的視頻URL需要您按協議在URL尾部自行拼接etavirp_nuyila=1(位置不限)後傳入播放器(僅MP4需此參數,HLS可直接使用原視頻URL),播放器SDK的配置與播放普通視頻配置一致,無需額外設定參數。
播放URL樣本1:https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1
播放URL樣本2:https://example.aliyundoc.com/test.mp4?auth_key=xxxxx&etavirp_nuyila=1
//播放地址
String playURL = "https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1"
//建立播放器執行個體
FlutterAliplayer fAliplayer = FlutterAliPlayerFactory.createAliPlayer();
fAliplayer.setUrl(playURL);
fAliplayer.prepare();
//列表播放器
FlutterAliListPlayer fAliListPlayer = FlutterAliPlayerFactory.createAliListPlayer();
fAliListPlayer.addUrlSource(playURL,uid);
fAliListPlayer.moveTo("uid");
//預先載入
FlutterAliPlayerMediaLoader fAliPlayerMediaLoader = FlutterAliPlayerMediaLoader();
fAliPlayerMediaLoader.load(playURL,"duration");HLS標準加密
HLS標準加密播放-ApsaraVideo for VODVidAuth播放
經過HLS標準加密的視頻通過點播VidAuth方式播放時,若當前視頻存在其他非HLS標準加密類型的加密流或普通轉碼流時,可通過設定視頻加密類型為HLSEncryption來篩選HLS標準加密流進行播放,範例程式碼如下:
開啟M3U8標準加密改寫後,則需要您調用setHlsUriToken設定使用者令牌。
FlutterAliplayer.setEncryptType(EncryptType.HLSEncryption);// 選擇性參數,設定加密類型為HLSEncryption時,則只會返回經過HLS標準加密的視頻流。
FlutterAliplayer.setHlsUriToken("token");// 選擇性參數,如需校正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標準加密流進行播放,範例程式碼如下:
開啟M3U8標準加密改寫後,則需要您調用setHlsUriToken設定使用者令牌。
FlutterAliplayer.setEncryptType(EncryptType.HLSEncryption);// 選擇性參數,設定加密類型為AliyunVoDEncryption時,則只會返回經過私人加密的視頻流。
FlutterAliplayer.setHlsUriToken("token");// 選擇性參數,如需校正MtsHlsUriToken(使用者令牌),可使用此參數傳遞
FlutterAliplayer.generatePlayerConfig().then((value) {
this.fAliplayer.setVidSts(
vid: "Vid資訊",
region: "接入地區",
accessKeyId: "<yourAccessKeyId>",
accessKeySecret: "<yourAccessKeySecret>",
securityToken: "<yourSecurityToken>",
playConfig: value);
});HLS標準加密播放-UrlSource播放
經過HLS標準加密的視頻通過直播或點播UrlSource方式播放時,播放器SDK的配置與播放普通視頻配置一致,無需額外設定參數。
推薦使用阿里雲點播服務,可調用擷取音視頻播放地址介面擷取視頻的播放地址後傳入播放器。
開啟M3U8標準加密改寫後,擷取到的視頻URL需要您按協議在URL尾部自行拼接MtsHlsUriToken=<token>(位置不限)後傳入播放器。
原始播放URL樣本:https://demo.aliyundoc.com/encrypt-stream****-hd.m3u8。
輸入到播放器URL樣本:https://demo.aliyundoc.com/encrypt-stream****-hd.m3u8?MtsHlsUriToken=<token>。
//建立播放器執行個體
FlutterAliplayer fAliplayer = FlutterAliPlayerFactory.createAliPlayer();
//播放地址為經過HLS標準加密的直播流或點播流地址。
fAliplayer.setUrl("播放地址");
fAliplayer.prepare();常見問題
使用加密過程中的常見問題及解決方案,請參見視頻加密常見問題。