Brightcove プレーヤー向けの DASH DRM マニフェストの作成

このトピックでは、Brightcove プレーヤー用に DRM 保護を適用した MPEG-DASH マニフェスト (.MPD ファイル) を作成する方法を説明します。

概要

MPEG-DASH マニフェスト (.MPD ファイル) は、共通暗号化(CENC)で暗号化された MPEG-DASH レンディションを含む動画を定義し、Playready、Widevine、Marlin の各コンテンツ復号モジュール (CDM) と互換性があります。Brightcove の Web プレーヤーでは、使用するブラウザに応じて Playready と Widevine のみがサポートされます。

ブラウザ サポート

再生は、サポート対象のデスクトップ版 Macintosh および Windows ブラウザでのみ動作します。

ブラウザ タイプ 再生テクノロジー DRM タイプ
Chrome 34+ Shaka-Player* を使用したネイティブ MSE/EME 再生 Widevine
Windows 10 上の MS Edge Shaka-Player* を使用したネイティブ MSE/EME 再生 Playready
Safari、IE、Firefox を含むその他すべてのブラウザ Silverlight プラグイン Playready

外部 DRM コンテンツ

Brightcove Video Cloud 以外で作成された DRM コンテンツの要件

Brightcove プレーヤーで DRM 保護された動画を再生するには、以下のガイドラインに従ってエンコードされている必要があります。

  1. MPEG-DASH Live Profile であること(「オンデマンド」や「hbbtv」ではないこと)
  2. すべてのレンディションが同じキーフレーム間隔およびフレームレートであること(Silverlight プラグインとの互換性のため)
  3. 共通暗号化(CENC)で暗号化され、Playready と Widevine が有効化されていること
  4. Playready と Widevine のライセンスサーバー URL が指定されていること。Playready ライセンスサーバー URL はマニフェスト (.mpd) 内に含める必要があります。Widevine ライセンスサーバー URL はマニフェスト内、または Javascript のパラメータとして指定できます。
  5. Playready の初期化ベクターは 8 バイトである必要があります。

マニフェストのサンプル

以下は、Video Cloud によって生成された MPEG-DASH マニフェスト (.MPD ファイル) の例です。

  <?xml version="1.0" ?>
  <MPD mediaPresentationDuration="PT1M28S" minBufferTime="PT2.00S" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:mspr="urn:microsoft:playready" xmlns:mas="urn:marlin:mas:1-0:services:schemas:mpd">
     <Period>
        <AdaptationSet mimeType="audio/mp4" segmentAlignment="true" startWithSAP="1">
           <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="5d97af80-2442-4fe9-b1aafc24ecb6fa28" xmlns:cenc="urn:mpeg:cenc:2013"/>
           <ContentProtection schemeIdUri="urn:uuid:5E629AF5-38DA-4063-8977-97FFBD9902D4">
              <mas:MarlinContentIds>
                 <mas:MarlinContentId>urn:marlin:kid:5d97af8024424fe9b1aafc24ecb6fa28</mas:MarlinContentId>
              </mas:MarlinContentIds>
           </ContentProtection>
           <ContentProtection schemeIdUri="urn:uuid:79f0049a-4098-8642-ab92-e65be0885f95">
              <mspr:pro>jAIAAAEAAQCCAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AZwBLACsAWABYAFUASQBrADYAVQArAHgAcQB2AHcAawA3AEwAYgA2AEsAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBVAGQAawBLAGIASQBBAHgAbgBOAGcAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAHIAbABpAGMALgBiAHIAaQBnAGgAdABjAG8AdgBlAC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC8AMwA3ADIAMwA0ADkANgAyADcANwAwADAAMQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</mspr:pro>
           </ContentProtection>
           <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" bc:licenseAcquisitionUrl="https://wvlic.brightcove.com/proxy/4324249227001" xmlns:bc="urn:brightcove:2015"/>
           <SegmentTemplate duration="2000" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/seg-$Number$.m4f" startNumber="0" timescale="1000"/>
           <Representation bandwidth="43241" id="4324360320001/audio/und" codecs="mp4a.40.5" audioSamplingRate="22050">
              <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
           </Representation>
        </AdaptationSet>
        <AdaptationSet mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" scanType="progressive">
           <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="5d97af80-2442-4fe9-b1aafc24ecb6fa28" xmlns:cenc="urn:mpeg:cenc:2013"/>
           <ContentProtection schemeIdUri="urn:uuid:5E629AF5-38DA-4063-8977-97FFBD9902D4">
              <mas:MarlinContentIds>
                 <mas:MarlinContentId>urn:marlin:kid:5d97af8024424fe9b1aafc24ecb6fa28</mas:MarlinContentId>
              </mas:MarlinContentIds>
           </ContentProtection>
           <ContentProtection schemeIdUri="urn:uuid:79f0049a-4098-8642-ab92-e65be0885f95">
              <mspr:pro>jAIAAAEAAQCCAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AZwBLACsAWABYAFUASQBrADYAVQArAHgAcQB2AHcAawA3AEwAYgA2AEsAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBVAGQAawBLAGIASQBBAHgAbgBOAGcAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAHIAbABpAGMALgBiAHIAaQBnAGgAdABjAG8AdgBlAC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC8AMwA3ADIAMwA0ADkANgAyADcANwAwADAAMQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</mspr:pro>
           </ContentProtection>
           <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" bc:licenseAcquisitionUrl="https://wvlic.brightcove.com/proxy/4324249227001" xmlns:bc="urn:brightcove:2015"/>
           <SegmentTemplate duration="2000" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/seg-$Number$.m4f" startNumber="0" timescale="1000"/>
           <Representation bandwidth="237182" id="4324360320001/video/1" codecs="avc1.42c015" frameRate="30" width="400" height="300"/>
           <Representation bandwidth="601518" id="4324360321001/video/1" codecs="avc1.42c015" frameRate="30" width="400" height="300"/>
           <Representation bandwidth="981387" id="4324360323001/video/1" codecs="avc1.42c016" frameRate="30" width="480" height="360"/>
           <Representation bandwidth="1507704" id="4324360324001/video/1" codecs="avc1.42c01e" frameRate="30" width="640" height="480"/>
           <Representation bandwidth="2102387" id="4324360325001/video/1" codecs="avc1.42c01e" frameRate="30" width="640" height="480"/>
           <Representation bandwidth="2991373" id="4324360326001/video/1" codecs="avc1.42c01e" frameRate="30" width="640" height="480"/>
        </AdaptationSet>
     </Period>
  </MPD>
  

ライセンス情報

Brightcove プレーヤーと互換性のある独自の DASH-DRM ストリームを作成するには、エンコード システムが、上記のような DRM ライセンス情報を含む同様のマニフェスト (MPD) を生成する必要があります。Brightcove プレーヤーでは現在 Marlin セクションを使用していないため、MPD からこれらのセクションを省略してかまいません。

PlayReady ライセンスキーの指定

Brightcove プレーヤーでは、PlayReady ライセンス情報が Base-64 でエンコードされた文字列として MPD に埋め込まれている必要があります。この例では、その値は上記の <mspr:pro> タグ内に記述されています。エンコードされたキー情報をデコードした内容が以下に示されています。PlayReady ヘッダーのフォーマットの詳細は、次のサイトを参照してください: http://www.microsoft.com/playready/documents/

      <WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0"><DATA><PROTECTINFO><KEYLEN>16</KEYLEN><ALGID>AESCTR</ALGID></PROTECTINFO><KID>gK+XXUIk6U+xqvwk7Lb6KA==</KID><CHECKSUM>UdkKbIAxnNg=</CHECKSUM><LA_URL>https://prlic.brightcove.com/license/3723496277001</LA_URL></DATA></WRMHEADER>

Widevine ライセンス URL の指定

ここでは、次の行のように、Widevine ライセンス サーバーの URL が MPD 内で指定されていることに注目してください。

      <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" bc:licenseAcquisitionUrl="https://wvlic.brightcove.com/proxy/4324249227001" xmlns:bc="urn:brightcove:2015"/>

あるいは、埋め込み先ページの JavaScript 内で、プレーヤーへのパラメーターとして Widevine ライセンス サーバーの URL を指定することもできます。以下は、ソース URL とともにライセンス サーバーを指定して Brightcove プレーヤーを呼び出す場合の例です。

      myPlayer.src({
        "src": sourceUrl,
        "type": "application/dash+xml",
        "keySystemOptions": [{
          "name": "com.widevine.alpha",
          "options": {"licenseUrl": licenseServerUrl}
        }]
      });

プレロード

動画データのプレロードを制御するために選択できる設定がいくつか用意されています。詳細については、プレーヤー設定ガイドの preload セクション を参照してください。デフォルトの動作では、Brightcove プレーヤーは動画メタデータ(タイトルや再生時間など)に加えて、数秒分の動画データをプリロードします。プリロードの動作を変更したい場合は、プレーヤー設定で次のオプションを指定できます。

      "preload": "none"

以下は、その設定を含むプレーヤー構成の例です。

      {
        "account_id": "3723496277001",
        "autoadvance": 0,
        "embed_id": "default",
        "player": {
          "template": {
            "name": "single-video-template",
            "version": "1.14.26"
          }
        },
        "player_id": "82f443bc-82f5-4074-bf9c-de2920c89b24",
        "player_name": "DRM Demo",
        "preload": "none",
        "scripts": [
          "https://players.brightcove.net/videojs-dash/videojs-dash.min.js"
        ],
        "stylesheets": [
          "https://players.brightcove.net/videojs-dash/videojs-dash.css"
        ],
        "video_cloud": {
          "policy_key": "BCpkADawqM2ENcgyE-9...EFGSP8b5dC",
          "video": null
        }
      }