ExoPlayer 統合

このドキュメントでは、キューイングと DRM の統合の概要について説明します。 サポート。

DRM の拡張

ExoPlayer のキャスト デモ DRM 構成を渡すための構造化された方法を利用するために、 ExoPlayer の MediaInfo を受信アプリ。キャスト サンプル また、この概要と同じコードを含むデモ用レシーバーを使用しており、 DRM のサポートをテストします。ただし、DRM 保護で保護されたキャストを 独自のインフラストラクチャを構築してホストする ウェブ レシーバー

始める前に、クラウド コンピューティング モデルと Chronicle の DRM サポートに関するドキュメントを Google Cast ExoPlayer。この概要では ExoPlayer DRM 構成を Web Receiver に接続する必要があります。詳細情報 ExoPlayer で DRM を利用する方法については、 ExoPlayer のウェブサイト

DRM 構成を提供する

ExoPlayer デモアプリには、DRM の提供方法を示すサンプルコードが含まれています。 指定することもできます。次の 4 つのオプションを構成できます。

  • ヘッダー - HTTPS リクエストに適用されるヘッダーの辞書 DRM ライセンスを取得します。
  • ライセンス URL - ライセンスを取得するために使用される URL。
  • 保護システム - コンテンツを保護するために使用される DRM 保護スキーム。 たとえば Widevine です

ExoPlayer に提供した DRM 設定が受信機に送信されます アプリケーションを MediaInformationcustomData のプロパティとして指定する 読み込みリクエストの一部として使用できます。デフォルトでは、このプロパティは 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;
 
}
}

初期設定

使用する DRM ソリューションによっては、licenseRequestHandler の構成が必要になることがあります。 および mediaPlaybackInfoHandlerlicenseRequestHandler を使用すると、 CAF がライセンスキー サーバーにライセンスをリクエストする方法。「 mediaPlaybackInfoHandler を使用すると、 PlaybackConfig (たとえば、各コンテンツで 1 つのメディア アイテムを使用する必要がある場合など) ライセンス サーバーの URL が異なります。

各読み込みリクエスト オブジェクトから ExoPlayerConfig のコピーをキャプチャするには、以下を作成します。 読み込みリクエスト インターセプタを実装する方法を学びます。

まず、キャストを開始する前にハンドラを登録します。 説明します。

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 構成を含むオブジェクト。Google Chat では ライセンス リクエスト ハンドラで使用するために、このオブジェクトをグローバル変数として保存します。 メディア再生情報ハンドラがあります。

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 リクエストの レシーバがライセンス サーバーに送信します。ハンドラに NetworkRequestInfo が渡される。 そのオブジェクトを使用して、HTTP ヘッダーの追加、Cookie のインクルード、 URL を変更します。ハンドラはこのオブジェクトを返す必要があります。

たとえば、ライセンス リクエストにカスタム ヘッダーを追加する必要がある場合は、 この場合、次のようなライセンス リクエスト ハンドラを作成できます。

licenseRequestHandler(networkRequestInfo) {
   
if (!exoPlayerConfig) {
       
return networkRequestInfo;
   
}

    networkRequestInfo
.headers =
            exoPlayerConfig
.headers ? exoPlayerConfig.headers : undefined;

   
return networkRequestInfo;
}

メディア再生情報ハンドラ

メディア再生情報ハンドラを使用すると、再生に変更を加えることができます。 メディア アイテムごとに設定できます。ハンドラに LoadRequestData が渡される。 および PlaybackConfig 再生設定を返す必要がありますメディア再生情報ハンドラは 呼び出される必要があります。コンテンツごとのライセンスの URL があれば 保護システムを変更できます。

mediaPlaybackInfoHandler(loadRequest, playbackConfig) {
   
if (!exoPlayerConfig) {
       
return;
   
}

    playbackConfig
.licenseUrl = exoPlayerConfig.licenseUrl ?
            exoPlayerConfig
.licenseUrl :
           
undefined;
    playbackConfig
.protectionSystem = exoPlayerConfig.protectionSystem ?
            exoPlayerConfig
.protectionSystem :
           
undefined;

   
return playbackConfig;
}

その他のリソース

各 DRM 実装はカスタムであり、このコードはデモとして提供されています。 のみです。ご契約の DRM プロバイダにお問い合わせのうえ、 ExoPlayer と Cast アプリに実装された DRM です。

ExoPlayer のウェブサイトに最新のドキュメントを掲載 通知などがあります。ExoPlayer とその Cast インテグレーションに関する問題は、 ExoPlayer の GitHub で報告 できます。