本文件提供佇列和 DRM 整合的總覽 聯絡。
DRM 強化功能
ExoPlayer 投放示範
現已更新,採用結構化方法,利用
ExoPlayer 對接收器應用程式的 MediaInfo
。Cast 範例
也會使用總覽中相同的程式碼接收器
,測試 DRM 支援。不過,如要針對投放 DRM 機制獲得保護,
因此您應該自行建立並代管
網路接收端。
開始之前,建議您先熟悉 存取 DRM 支援說明文件 Google Cast 和 ExoPlayer。本總覽將說明 將 ExoPlayer DRM 設定連接到 Web 接收器。資訊 有關如何在 ExoPlayer 中使用 DRM,請參閱 ExoPlayer 網站。
提供 DRM 設定
ExoPlayer 試用版應用程式內含程式碼範例,說明如何提供 DRM 做為 MediaItem 的一部分您可以設定的四個選項如下:
- 標頭 - 套用至 HTTPS 要求的標頭字典 擷取 DRM 授權。
- 授權網址:用於取得授權的網址。
- 防護系統 - DRM 保護架構,用來保護內容、 例如 Widevine
你提供給 ExoPlayer 的 DRM 設定已傳送給接收端
將應用程式做為屬性 (位於 MediaInformation
的 customData
中)
做為載入要求的一部分根據預設,此屬性會呼叫
exoPlayerConfig
,與下列定義相符。
/**
* Extended configuration settings for ExoPlayer.
*/
ExoPlayerConfig class {
constructor() {
/**
* Dictionary of headers to apply to the license request.
* @type {!Object|undefined}
*/
this.headers;
/**
* The URL for your DRM server.
* @type {string|undefined}
*/
this.licenseUrl;
/**
* Preferred protection system to use for decrypting content.
* @type {!cast.framework.ContentProtection|undefined}
*/
this.protectionSystem;
/**
* Indicates whether CORS Access-Control requests should be made using
* credentials such as cookies or authorization headers.
*
* If withCredentials is set to true then Access-Control-Allow-Origin cannot
* be set to '*'.
* @type {boolean|undefined}
*/
this.withCredentials;
}
}
初始設定
視您使用的數位版權管理解決方案而定,您可能需要設定 licenseRequestHandler
和 mediaPlaybackInfoHandler
。licenseRequestHandler
可讓您自訂
CAF 向授權金鑰伺服器要求授權的方式。
mediaPlaybackInfoHandler
可讓您修改
PlaybackConfig
舉例來說,如果所有內容都需要使用
不同的授權伺服器網址
如要從每個載入要求物件擷取 ExoPlayerConfig
的副本,請建立
Web Receiver SDK 應用程式中的載入要求攔截器。
第一步是先註冊處理常式再啟動投放 應用程式。
const context = cast.framework.CastReceiverContext.getInstance();
const playbackConfig = new cast.framework.PlaybackConfig();
playbackConfig.licenseRequestHandler =
licenseRequestHandler;
context.getPlayerManager().setMediaPlaybackInfoHandler(
mediaPlaybackInfoHandler);
context.getPlayerManager().setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
loadInterceptor);
// starts the Cast application
context.start({playbackConfig: playbackConfig});
載入要求攔截器
載入要求攔截器是一種回呼,可讓您檢視和修改 在 CAF 嘗試載入媒體項目之前,投放載入要求。重要的是 ,在授權要求處理常式和媒體播放資訊處理常式之前呼叫。
將載入要求攔截器傳遞至 LoadRequestData
物件,內含應用程式傳送的 Exo Player 設定。你可以
將這個物件儲存為全域變數,以便用於授權要求處理常式
和媒體播放資訊處理常式
loadInterceptor(loadRequestData) {
// not every load request will have a customData object
if (loadRequestData.media && loadRequestData.media.customData &&
loadRequestData.media.customData['exoPlayerConfig']) {
// exoPlayerConfig is a global variable here
exoPlayerConfig =
loadRequestData.media.customData['exoPlayerConfig'];
}
// you must return the loadRequestData object
return loadRequestData;
}
授權要求處理常式
授權要求處理常式可讓您自訂 HTTPS 要求 Web
接收端會登入您的授權伺服器。系統會將處理常式傳遞 NetworkRequestInfo
物件,可用於新增 HTTP 標頭、加入 Cookie,
修改網址處理常式應傳回此物件。
舉例來說,如果需要在授權要求中加入自訂標頭, 可以建立類似下方的授權要求處理常式:
licenseRequestHandler(networkRequestInfo) {
if (!exoPlayerConfig) {
return networkRequestInfo;
}
networkRequestInfo.headers =
exoPlayerConfig.headers ? exoPlayerConfig.headers : undefined;
return networkRequestInfo;
}
媒體播放資訊處理常式
媒體播放資訊處理常式可讓你變更播放內容
為單一媒體項目提供專屬設定系統會將處理常式傳遞 LoadRequestData
和 PlaybackConfig
、
您應該傳回播放設定媒體播放資訊處理常式會
。如果您有內容授權網址,
在載入前變更這些 Pod 和保護系統
mediaPlaybackInfoHandler(loadRequest, playbackConfig) {
if (!exoPlayerConfig) {
return;
}
playbackConfig.licenseUrl = exoPlayerConfig.licenseUrl ?
exoPlayerConfig.licenseUrl :
undefined;
playbackConfig.protectionSystem = exoPlayerConfig.protectionSystem ?
exoPlayerConfig.protectionSystem :
undefined;
return playbackConfig;
}
其他資源
每項數位著作權管理導入作業都是自訂內容,這裡提供程式碼做為示範 。建議您洽詢 DRM 供應商,確認是否已正確設定 已在 ExoPlayer 和 Cast 應用程式中導入 DRM。
ExoPlayer 網站提供最新說明文件 和公告事項ExoPlayer 及其 Cast 整合的問題可能會 ExoPlayer 的 GitHub 報告 Cloud Storage 也提供目錄同步處理功能