次の方法で共有


Microsoft PlayReady を使用した DASH コンテンツ保護

Common Encryption (ISO/IEC 23001-7) と Microsoft PlayReady を使用した HTTP 経由の動的アダプティブ ストリーミング (ISO/IEC 23009-1) のライブおよびオンデマンド プロファイルのコンテンツ保護の実装。

現在のバージョン

現在のバージョンは、2018 年 2 月 15 日に公開されたバージョン 1.3 です

詳細については、 変更履歴 を参照してください。

概要

ISO/IEC 23009-1 ISO ベース メディア ファイル形式オンデマンドおよびライブ DASH プロファイルは、ISO/IEC 23001-7 の「ISO ベース メディア ファイル形式ファイルでの共通暗号化」仕様で使用できます。 Microsoft PlayReady では、ISO/IEC 23001-7 と ISO/IEC 23009-1 の両方がサポートされています。 この仕様では、Live と On-Demand の両方のアダプティブ ストリーミング シナリオで MICROSOFT PlayReady for ISO/IEC 14496-12 メディア表現を使用することを通知する ISO/IEC 23009-1 メディア プレゼンテーション記述ファイルを作成する方法について詳しく説明します。

法律上の通知

© 2018 Microsoft Corporation. すべての権限が予約されています。 このドキュメントは"as-is." で提供されています。このドキュメントに含まれる情報 (URL やその他のインターネット Web サイト参照を含む) は、予告なしに変更される場合があります。 使用するリスクを負います。

このドキュメントは、Microsoft 製品の知的財産に対する法的権利を提供するものではありません。 このドキュメントは、内部の参照目的でコピーして使用できます。 このドキュメントから通知を削除することはできません。

内容

タイトル
1 紹介
1.1 スコープ
1.2 規則
1.3 用語、省略形、頭字語
1.4 参考文献
1.5 変更履歴
2 PlayReady DASH コンテンツ保護スキーム
2.1 DASH コンテンツプロテクションディスクリプタ要素
2.2 実装の推奨事項と要件
3 メディア プレゼンテーションの説明の例
3.1 初期化セグメントまたはメディアコンテンツのPROを修正する
3.2 MPD に PlayReady オブジェクトを含む

テーブル

テーブル タイトル
表 1 トラック暗号化ボックス
表 2 KID 表現の例

1. 概要

MPEG の DYNAMIC Adaptive Streaming over HTTP Standard [DASH] は、HTTP サーバーから HTTP クライアントにメディア コンテンツを配信するための形式を指定します。 DASH では、メディア コンテンツのプレゼンテーションは、メディア プレゼンテーションの説明 (MPD) ファイルによって記述されます。 MPD は、メディア プレゼンテーション内のこれらのリソースのコンテキストと共にセグメントのリソース識別子を提供します。

DASH では、メディア プレゼンテーションは期間 ([DASH]、セクション 5.3.2) の時間シーケンスで構成されます。 期間内では、メディア コンテンツは、アダプティブ セット ([DASH]、セクション 5.3.3) と呼ばれる一連の交換可能なエンコードされたバージョンに配置されます。 各適応セットは、表現 ([DASH]、セクション 5.3.5) (メディア コンテンツ コンポーネントの成果物エンコード バージョン) で構成されます。

ContentProtection 記述子要素は、適応セットまたは表現に関連付けて暗号化スキームを示し、DRM ライセンス取得を有効にするために 1 つ以上の ContentProtection 記述子要素を追加できます ([DASH]、セクション 5.8.4.1)。

1.1 スコープ

ISO/IEC 23009-1 DASH メディア プレゼンテーション記述ファイルでコンテンツ保護スキームとして Microsoft PlayReady を使用する方法。

1.2 規約

このドキュメントのキーワード "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY"、および "OPTIONAL" は [RFC2119] で説明されているように解釈されます。それは次のとおりです:

  • "MUST"、"REQUIRED"、および "SHALL" は、定義が仕様の絶対要件であることを意味します。

  • "MUST NOT" と "SHALL NOT" は、定義が仕様の絶対禁止であることを意味します。

  • "SHOULD" と "RECOMMENDED" は、特定の項目を無視する正当な理由がある可能性があることを意味しますが、別のコースを選択する前に、完全な影響を理解し、慎重に検討する必要があります。

  • "SHOULD NOT" と "NOT RECOMMENDED" は、特定の動作が許容される正当な理由がある可能性があることを意味しますが、完全な影響を理解し、このラベルで説明されている動作を実装する前にケースを慎重に検討する必要があります。

  • "MAY" と "OPTIONAL" は、項目が本当に省略可能であることを意味します。

トップ に戻る

1.3 用語、略語、頭字語

1.3.1 用語

用語 形容
適応セット DASH では、1 つまたは複数のメディア コンテンツ コンポーネントの交換可能なエンコードされたバージョンのセット。
コンテンツ保護 (CP) クライアント デバイスへの配信後に保護されたリソースをセキュリティで保護するプロセス。
埋め込みライセンス PlayReady オブジェクト (PRO) に格納されているライセンス。
埋め込みライセンス ストア (ELS) 埋め込みライセンスを格納するための PlayReady オブジェクト (PRO) 内のレコード。
グローバル一意識別子 (GUID) ハイフンで区切られた 32 文字の 16 進文字列として表され、通常は 128 ビット整数として格納される一意の参照番号。
初期化セグメント メディア セグメントにカプセル化されたメディア ストリームを表示するために必要なメタデータを含む DASH セグメント。ISO メディアの場合は、ファイル ヘッダー。
キー識別子 (KID) コンテンツ、ライセンス、またはその他の機密情報を保護するキーを一意に識別する UUID。PlayReady の場合は GUID として格納されます。
キーのローテーション メディアに関連付けられている暗号化キーに対する定期的な変更。 通常、これは
リーフ ライセンス ルート ライセンスのコンテンツ キーを使用してコンテンツ キーが暗号化されているライセンス。
ライセンス ポリシーと暗号化されたコンテンツ キーを含む PlayReady データ構造。
ライセンス取得 URL (LAURL) ライセンス取得 PlayReady Web サービスの URL。
ライセンス チェーン ライセンス チェーンは、ルート ライセンスとリーフ ライセンスで構成されます。 リーフ ライセンスには複数のルート ライセンスがあり、ルート ライセンスには複数のリーフ ライセンスが含まれる場合があります。 各ペアにライセンス チェーンが存在します。
ライブ プロファイル ISO ベース メディア ファイル形式のライブ プロファイル ([DASH] のセクション 8.4 を参照)。 ライブ プロファイルはライブ エンコード用に最適化されており、テンプレートで生成された URL を使用してエンコードされた直後に各ムービー セグメントを要求できます。
メディア プレゼンテーション ISO/IEC 23009-1 で定義されている、メディア プレゼンテーションとしてダウンロードおよびレンダリングできるメタデータとメディア データのコレクション。
メディア プレゼンテーションの説明 (MPD) ISO/IEC 23009-1 で定義されているメディア プレゼンテーションの正式な XML ドキュメントの説明。
メディア セグメント メディア形式に準拠し、再生を可能にする DASH セグメント。おそらく、他のメディア セグメントや初期化セグメントと組み合わされます。
ムービー ボックス ('moov') ISO 基本メディア ファイル形式では、サブボックスがメディア プレゼンテーションのメタデータを定義するボックス [ISOBFF]。
ムービー フラグメント ボックス ('moof') ISO 基本メディア ファイル形式では、[ムービー フラグメント] ボックスはメディア プレゼンテーションを時間 [ISOBFF] で拡張し、DASH メディア セグメントに含まれています。
オンデマンド プロファイル ISO ベース メディア ファイル形式のオンデマンド プロファイル ([DASH] のセクション 8.3 を参照)。 オンデマンド プロファイルは、オンデマンド コンテンツの基本的なサポートを提供します。 各リプレゼンテーションは 1 つのセグメントとして提供され、サブセグメントは適応セットのリプレゼンテーション全体に配置され、サブセグメントはムービー セグメントに対応するストリーム アクセス ポイントで始まります。
時代 メディア プレゼンテーションの間隔。
PlayReady オブジェクト (PRO) 必要に応じて PRH および ELS レコードを含む、可変数のレコードを含むバイナリ オブジェクト。 これらのレコードには、ライセンスとライセンスの取得に関連する情報が含まれます ([PRO] を参照)。
保護システム固有のヘッダー ボックス ('pssh') ISO ベース メディア ファイル形式の [保護システム固有のヘッダー] ボックスには、ライセンスを取得し、メディア コンテンツの暗号化を解除するために特定のコンテンツ保護システムに必要なメタデータが含まれています [ISOBFF]。
表現 定義された期間におけるメディア コンテンツ コンポーネントの代替選択肢の 1 つ (ISO メディア ファイルなど)。 これは、MPD Representation 要素 ([DASH]、セクション 5.3.5) によって記述されます。
PlayReady ヘッダー (PRH) メディア コンテンツの暗号化を解除するために必要なメタデータ (1 つまたは複数のキー ID とライセンス取得 URL を含む) を含む PlayReady オブジェクト (PRO) 内のレコード ([PRH]を参照)。
ルート ライセンス リーフ ライセンスのコンテンツ キーの暗号化に使用されるコンテンツ キーを持つライセンス
セグメント DASH では、HTTP-URL と省略可能なバイト範囲を持つメディア リソースを参照する MPD 内の要素。
セグメント インデックス ISO メディア 'sidx' ボックスとして定義されている MPD とは別のメディア セグメント内の時間範囲からバイト範囲へのインデックス マッピング。
ストリームアクセスポイント (SAP) リプレゼンテーション内の位置。この位置から前方のリプレゼンテーション データのみを使用してメディア セグメントを再生できます。
サブセグメント DASH では、これはセグメント インデックスによってインデックス付けされたメディア セグメント内の単位です。 映画セグメントは、DASH オンデマンド プロファイルではサブセグメントとして扱われますが、DASH ライブ プロファイルではセグメントとして扱われます。
[暗号化の追跡] ボックス ISO ベース メディア ファイル形式の [Track Encryption] ボックス ('tenc') には、トラック [CENC]、[ISOBFF] の既定の暗号化パラメーターが記述されています。
UUID(ユニバーサリー・ユニーク・アイデンティファイア) [X.667] で指定された数値または文字列として表される数学的に一意の識別子
ビデオ オンデマンド (VOD) エンドユーザーがビデオ コンテンツをオンデマンドで選択して視聴できるようにするシステム。 DASH ライブ プロファイルと DASH オンデマンド プロファイルの両方を VOD プレゼンテーションに使用できます。

1.3.2 略語と頭字語

省略形 意味
CP コンテンツ保護
ダッシュ HTTP 経由の動的アダプティブ ストリーミング
ELS 埋め込みライセンス ストア
GUID(グローバルユニーク識別子) グローバル一意識別子
子供 キー識別子
LAURL ライセンス取得 URL
MPD メディア プレゼンテーションの説明
PRH PlayReady ヘッダー
プロ PlayReady オブジェクト
樹液 ストリーム アクセス ポイント
UUID(ユニバーサリー・ユニーク・アイデンティファイア) 汎用一意識別子
ビデオ・オン・デマンド (VOD) ビデオ オンデマンド

1.4 参照

1.4.1 標準参照

コード 標準リファレンス
[CENC] ISO/IEC FDIS 23001-7:2016 "情報テクノロジ – MPEG システム テクノロジ – パート 7: ISO ベース メディア ファイル形式ファイルでの一般的な暗号化", https://www.iso.org/standard/68042.html
[DASH] ISO/IEC 23009-1:2014, Second Edition, "Information technology — Dynamic adaptive streaming over HTTP (DASH) — Part 1: Media presentation description and segment formats", http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip
[EME] "Encrypted Media Extensions"、W3C Recommendation 18 September 2017https://www.w3.org/TR/encrypted-media/
[PRH] "Microsoft PlayReady ヘッダーPlayReady ヘッダーの仕様を参照してください。
[PRO] "Microsoft PlayReady オブジェクトPlayReady ヘッダーの仕様を参照してください。
[RFC2119] "要件レベル を示す RFC で使用する キーワード"、S. Bradner、1997 年 3 月、 http://www.ietf.org/rfc/rfc2119.txt
[RFC3629] "UTF-8、ISO 10646 の変換形式"、F. Yergeau、2003 年 11 月、 http://tools.ietf.org/html/rfc3629
[RFC4122] "ユニバーサル一意の ID(UUID) URN 名前空間", P. Leach, M. Mealling, R. Salz, July 2005,http://www.ietf.org/rfc/rfc4122.txt
[X.667] "情報技術 – オープン システム相互接続 – OSI 登録機関の運用手順: 汎用一意識別子 (UUID) の生成と登録と ASN.1 オブジェクト識別子コンポーネントとしての使用" シリーズ X ITU-T 推奨事項http://www.itu.int/rec/T-REC-X.667-201210-I/en

1.4.2 情報リファレンス

コード 情報リファレンス
[CPSID] DASH 業界フォーラム、「保護システム固有識別子」、http://dashif.org/identifiers/content_protection/
[DASHIF] DASH 業界フォーラム、"実装のガイドライン: DASH-IF 相互運用性ポイント"、2017 年 9 月 7 日、バージョン 4.1、https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf
[ISOBFF] ISO/IEC 14496-12、第 4 版 (修正バージョン 2012-09-15)、「情報技術 – オーディオ ビジュアル オブジェクトのコーディング – パート 12: ISO ベース メディア ファイル形式」、http://standards.iso.org/ittf/PubliclyAvailableStandards/c061988_ISO_IEC_14496-12_2012.zip

トップ に戻る

1.5 変更履歴

バージョン 日付 細部
バージョン 1.3 2018 年 2 月 15 日 16 バイト初期化ベクトル (16 バイト IV) のサポートを明確にします。
バージョン 1.2 2014 年 10 月 8 日 1) CENC第2版の変更
2) DASH MPD ContentProtection 記述子要素に関する変更
3) 用語の追加および明確化に関する用語の変更
4)最新バージョンを参照するための規範的および有益な参考文献の変更
5) ISOBFF ボックス、PRO、PlayReady ライセンスの KID 表現とエンディアンを明確にします。
バージョン 1.1 2013 年 2 月 18 日 PlayReady SystemID 表現を明確にします。
PlayReady SystemID は 9a04f079-9840-4286-ab92-e65be0885f95 です。
ビッグ エンディアン表現 = {0x9A、0x04、0xF0、0x79、0x98、0x40、0x42、0x86、0xAB、0x92、0xE6、0x5B、0xE0、0x88、0x5F、0x95} です。
リトル エンディアン表現 = {0x79、0xF0、0x04、0x9A、0x40、0x98、0x86、0x42、0xAB、0x92、0xE6、0x5B、0xE0、0x88、0x5F、0x95} です。
バージョン 1.0 2012 年 7 月 17 日 初期バージョン



2. PlayReady DASH コンテンツ保護スキーム

Microsoft PlayReady では、新しい ISO/IEC 23009-1 [DASH] および ISO/IEC 23001-7 [CENC] 標準がサポートされています。 この仕様では、オンデマンド ([DASH]、セクション 8.3) と Live ([DASH]、セクション 8.4) の両方のアダプティブ ストリーミング シナリオで、ISO ベース メディア ファイル形式のメディア表現に Microsoft PlayReady を使用することを通知する DASH メディア プレゼンテーション記述ファイルを作成する方法について詳しく説明します。

この仕様の焦点となる 4 つのシナリオは、VOD またはメディアのライブ プレゼンテーションです。

  1. 1 つのキーで暗号化

  2. 一部のコンテンツは暗号化され、一部のコンテンツはクリア

  3. 埋め込みリーフ ライセンスのないキー ローテーション

  4. 埋め込みリーフ ライセンスを使用したキー ローテーション

2.1 DASH ContentProtection 記述子要素

DASH は、ISO メディア用の 2 種類の ContentProtection 記述子要素を定義します ([DASH] セクション 5.3.7.2-Table 9、5.8.5.2、5.8.4.1)。

  1. @schemeIdUri=”urn:mpeg:dash:mp4protection:2011” @value=”<scheme>”と共に
  2. @schemeIdUri=”urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx” @value=”DRMNAME version”と共に

最初の記述子の種類は、暗号化された各 ISO メディア トラックの保護スキーム 情報ボックス ('schi') に含まれる暗号化スキームの 4 文字コード ("4CC") を示します。この記述子の種類は常に存在するため、プレイヤーはコンテンツが暗号化されていることを認識し、ダウンロードして再生する前に暗号化スキームを復号化できるかどうかを判断できます。

2 番目の記述子の種類は、関連付けられている適応セットのライセンスと復号化キーを提供できる特定の DRM システムの UUID 文字列を示します。 DASH Industry Forum、DVB、DECE などのアプリケーション仕様では、適応セット内のすべての表現が同じキーとライセンスを共有するように制約され、シームレスなアダプティブ切り替えが可能になります。これは、ContentProtection 記述子を MPD のリプレゼンテーション レベルから制限することによって実現されます。 UUID 文字列は、ファイルまたは DASH 初期化セグメントの Movie Box ('moov') に存在する可能性がある ISO Media Protection システム固有の情報ボックス ('pssh') で指定された SystemID フィールドと等しくなります。

手記 'pssh' ボックスには、SystemID、コンテンツ保護システムを一意に識別する UUID [X.667] が含まれています。 PlayReady SystemID は 9a04f079-9840-4286-ab92-e65be0885f95 です。

DRM システムの SystemID 値は、次の位置に登録されます。 https://dashif.org/identifiers/content_protection/

各 AdaptationSet 要素は、複数の DRM 記述子を一覧表示して、ライセンスが複数の DRM システムで使用可能であることを示します(MAY)。 各 DRM システムは、独自の名前空間で要素と属性を指定し、SystemID を使用して記述子で省略可能または必須にすることができます。

Common Encryption の第 2 エディション ([CENC] セクション 11) では、相互運用性を向上させるためにすべての DRM ContentProtection 記述子で使用できるオプションの cenc:pssh 要素を指定します。 また、すべてのシステムに必要なライセンスを 1 か所で識別するために、mp4protection 記述子に含めるために推奨される cenc:default_KID 属性も指定します。 要素 cenc:pssh には完全な 'pssh' ボックス構造が含まれているため、Web ブラウザー [EME] の Encrypted Media Extension (EME) API によって同じように処理されます。

DRM システムは、次の情報でライセンス取得情報を提供できます。

  1. MPD の ContentProtection 記述子内の cenc:pssh 要素
  2. ファイルまたは初期化セグメントの 'moov' ボックスの 'pssh' ボックス
  3. 上記の両方 (この場合、cenc:pssh 要素が優先されます)

ワークフローによっては、エンコードまたはパッケージ化中に、適応セット内のすべてのファイルの 'pssh' ボックスにライセンス取得情報を埋め込む方が効率的な場合があります。または、ストリーミング プレゼンテーションを提供する時点で、MPD に cenc:pssh 要素を埋め込む方が効率的な場合があります。 ライブ ストリーミングの場合は、MPD で cenc:pssh を使用して早期ライセンスの取得を有効にすることをお勧めします。最初の初期化セグメントと 'pssh' ボックスが同時に何百万人もの視聴者に配信された時点で多数の同時ライセンス要求をトリガーするのではなく、 MPD のライセンス取得情報を使用すると、異なるストリーミング サービスで異なるライセンス サーバーを使用したり、時間の経過と同時に変更したりできます。個別のメディア ファイルを作成および管理する必要はありません。

PlayReady の場合、PlayReady オブジェクト (PRO) [PRO] を cenc:pssh 要素、mspr:pro 要素、または 'pssh' ボックスに含め、ライセンス取得を有効にすることができます。 mspr:pro 要素は Microsoft PlayReady によって定義され、'pssh' および cenc:pssh に含まれるボックス構造ではなく、PRO [PRO] 情報のみが含まれます。 mspr:pro と cenc:pssh の両方を含めると、Silverlight に基づくプレーヤーを含む古いプレイヤーと、HTML5 ブラウザーで保護された DASH プレゼンテーションを再生するスクリプトを使用する Web ページを含む新しいプレイヤーが有効になります。

手記 この仕様全体を通して、'mspr' は 'urn:microsoft:playready' であり、xmlns:mspr="urn:microsoft:playready" によって定義されます。

トップ に戻る

2.1.1 初期化セグメントまたはメディアコンテンツの正しいPRO

適切な PRO を含む初期化セグメントがある場合、またはメディア コンテンツに正しい PRO を含む PlayReady 'pssh' ボックスが含まれている場合、PlayReady コンテンツ保護システム固有識別子 [CPSID] を持つ次の ContentProtection 記述子要素を MPD の AdaptationSet 要素で使用して、PlayReady ライセンスの可用性を示す必要があります。

<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”/>

PlayReady では、Common Encryption [CENC] 標準がサポートされています。 ライセンス取得メタデータが初期化セグメントまたはメディア コンテンツ 'pssh' に格納されている場合、PlayReady ContentProtection 記述子要素が存在する必要があります (SHOULD)。

次の ContentProtection Descriptor 要素は、保護された各適応セットに存在するものとし、1 つのインスタンスは、"cenc" スキームをサポートするすべての DRM の暗号化スキームを示します。

<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc"/>

2.1.2 MPD に PlayReady オブジェクトを含む

PlayReady オブジェクト [PRO] を PlayReady ContentProtection 記述子要素に含める必要がある状況は複数あります。 例えば:

  • PlayReady 'pssh' ボックスが存在しないプレゼンテーション

  • PlayReady 'pssh' ボックスで見つかった PRO をオーバーライドする必要があるプレゼンテーション

PlayReady をコンテンツ保護スキームとして識別し、Pro を ContentProtection 記述子要素に含めるには、次のように下位互換性のために [CENC] と mspr:pro 構文の両方に従って cenc:pssh 構文を使用することをお勧めします。

<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
  	<cenc:pssh>
          <!-- *base64-encoded PlayReady ‘pssh’ complete box* -->
  	</cenc:pssh>
  	<mspr:pro>
          <!-- *base64-encoded PlayReady Object* -->
    </mspr:pro>
</ContentProtection>

PlayReady 'pssh' ボックスと PRO を PlayReady ContentProtection 記述子要素に含めるとき、次の規則に従う必要があります。

  • cenc:pssh または mspr:pro が PlayReady ContentProtection Descriptor 要素に含まれている場合:

    • メディア コンテンツの保護システム固有のヘッダー ('pssh') ボックスに PRO が含まれている場合、Cenc:pssh または mspr:pro の両方に含まれる PRO の KID base64 でエンコードされた文字列値 ([PRO]) は、'pssh' ボックスに含まれるその PRO の KID base64 でエンコードされた文字列値と等しくなります。

    • PlayReady 'pssh' を含むリプレゼンテーションの 初期化セグメント がある場合、そのリプレゼンテーションの cenc:pssh または mspr:pro の両方に含まれる PRO の KID base64 でエンコードされた文字列値は、初期化セグメントの 'pssh' ボックスに含まれるその PRO の KID base64 でエンコードされた文字列値と等価である必要があります。 初期化セグメントは、HTTP 応答本文に含まれる格納されているメディア コンテンツ ファイルのファイル ヘッダーのコピーである可能性がありますが、動的に生成され、ファイルとして保存されない場合もあります。

  • メディア コンテンツに、LAURL を含む PRO を含む PlayReady 'pssh' ボックスが含まれており、その LAURL が ContentProtection Descriptor 要素に含まれる PRO の LAURL と異なる場合、ContentProtection Descriptor 要素 LAURL が優先されます。

トップ に戻る

2.1.3 MPD に Track Encryption Box フィールドを含む

Common Encryption は、各ムービー セグメント内のキー識別子 (KID) を使用して各メディア サンプルを暗号化するために使用されるキー (または使用されていない) を示します。 Track Encryption Box ('tenc') のdefault_KIDなどの一部の情報は、MPD で通知して、必要なライセンスを判断するのに役立ちます。

暗号化されていないメディアプレゼンテーション期間、その後に暗号化された期間が存在する可能性があります。 メディア ファイルとストリームには、暗号化されたセクションと暗号化されていないセクションの両方が含まれる場合があります。 さらに、キー識別子 (KID) は、期間から期間、またはセクションからセクションに変更される場合があります。 トラックのセクションの主な変更は、各ムービー セグメントの ISO メディア サンプル グループとサンプル グループの説明ボックスを使用して通知されます。 サンプルの補助情報を指す 'saio' ボックスと 'saiz' ボックスを使用した初期化ベクトルとサブサンプル暗号化範囲へのサンプル グループとアクセスの詳細については、[CENC] を参照してください。

共通暗号化情報の既定の設定は、ISO ファイル ヘッダーと初期化セグメントのトラック ボックス ('trak') に格納されている各トラックの [Track Encryption] ボックス ('tenc') ([ISOBFF] と [CENC] を参照) でエンコードされます。 Track Encryption Box (default_KID フィールド) の既定のキー識別子 (KID) も、メディア プレゼンテーション適応セットに関連付けられている ContentProtection 記述子要素で伝達する必要があります。 cenc:default_KID は、親 AdaptationSet 要素によって参照されるメディア セグメントを復号化できるライセンスを識別するために使用できます。

Common Encryption ContentProtection 記述子要素に既定のキー識別子 (KID) を含めるには、[CENC] で指定された次の cenc:default_KID 属性を使用します。

<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="da9b5994-600c-2ad0-f96d-f12725780978"/>

'tenc' の default_KID フィールドは 16 バイトのビッグ エンディアン配列であり、上記で定義され、Common Encryption ContentProtection Descriptor 要素の cenc:default_KID 属性に UUID 文字列として格納されます。

ContentProtection 記述子要素が複数のトラックを参照し、異なる 'tenc' ボックスで異なる既定のキー識別子を使用する場合、cenc:default_KID 属性は、それらの異なるdefault_KID値のスペース区切りリストを格納する必要があります(SHALL)。

cenc:default_KID 属性は、PlayReady ContentProtection 記述子要素にも含まれる場合があります。MAY。

次の表 1 に、ISO メディア トラック暗号化ボックス ('tenc') で指定されているフィールドを示します (セクション 9.2[CENC]を参照)。 Common Encryption の最初のエディション (mspr:IsEncrypted、mspr:IV_size、mspr:kid) の "mspr" 名前空間で定義されている表 1 の下の要素は非推奨であり、Common Encryption [CENC] の第 2 エディションで指定された cenc:default_KID に機能的に置き換えられます。 Track Encryption Box ('tenc') の IV_size フィールドと IsEncrypted フィールドは復号化中に使用されますが、MPD ContentProtection 記述子要素では必要ありません。

手記 mspr:kid の KID 値は、ビッグ エンディアン UUID を格納するために定義された "tenc" default_KIDバイト配列の base64 でエンコードされたリトル エンディアン GUID 解釈です。 Track Encryption Box のすべてのフィールドは MPD にコピーできますが、ライセンス取得のために公開するにはdefault_KIDのみが必要です。

表 1 – 暗号化ボックスのフィールドの追跡

要素 デフォルト 説明
default_IsEncrypted 1 サンプル グループ内のサンプルの暗号化状態を示すフラグ。 使用できる値は、0 (暗号化されていない) と 1 (暗号化) です。
default_IV_size 8 初期化ベクター (IV) フィールドのサイズ (バイト単位)。
- PlayReady バージョン 1、2、3 では 0 と 8 がサポートされます。
- PlayReady バージョン 4 以降では、0、8、16 がサポートされます。
default_IsEncrypted =1 の場合、default_IV_sizeを 0 に設定することはできません。

すべての PlayReady 対応プレイヤーが 16 バイトの初期化ベクトルをサポートしているわけではないため、サービスが PlayReady バージョン 1/2/3 プレイヤーに到達する必要がある場合は、暗号化されたコンテンツに 8 のdefault_IV_sizeのみを使用することをお勧めします。
default_KID なし 関連付けられているサンプルの暗号化を解除するために必要なキーを一意に識別する 16 バイト (128 ビット) キー識別子。 キー識別子は 、[CENC] に従って UUID として扱われます
PlayReady ヘッダー [PRH] の KID とは異なり、'tenc' default_KIDは、[X.667] で指定されたバイナリ (セクション 6.2) および数値 (セクション 6.3) UUID 表現に相当する 128 ビット整数の大きなエンディアン バイトを含む 16 バイト配列として格納されることに注意してください。

手記: Track Encryption Box のdefault_KIDの形式は、cenc:pssh、mspr:pro、mspr:kid の PRO に埋め込まれている KID 値の形式とは異なります。 詳細については、セクション 2.2.5、[CENC]、および [PRO] を参照してください。

PlayReady をコンテンツ保護スキームとして識別し、MPD に Track Encryption Box フィールドを含めるには、次の構文を使用します。

<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
  <mspr:IsEncrypted>1</mspr:IsEncrypted>
  <mspr:IV_size>8</mspr:IV_size>
  <mspr:kid>2ptZlGAMKtD5bfEnJXgJeA==</mspr:kid>
</ContentProtection>

Common Encryption ContentProtection 記述子要素に cenc:default_KID 属性を含め、PlayReady ContentProtection 記述子要素の [Track Encryption Box]\(暗号化ボックスの追跡\) フィールドを含めるとき、次の規則に従う必要があります。

  • Common Encryption ContentProtection Descriptor 要素の cenc:default_KID 属性の KID 文字列は、そのトラックの [Track Encryption] ボックスの default_KID UUID と等価である必要があります。

  • PlayReady ContentProtection Descriptor 要素の mspr:IsEncrypted、mspr:IV_size、および/または mspr:kid の値は、そのトラックの [トラック暗号化] ボックスの default_IsEncrypted、default_IV_size、または default_KID フィールドと等価である必要があります。

  • mspr:pro および cenc:pssh が、Track Encryption Box フィールドを含む PlayReady ContentProtection 記述子要素 (セクション 2.1.2 を参照) に含まれている場合:

    • mspr:pro および cenc:pssh 要素の PRO に埋め込まれた KID は、そのトラックの Track Encryption Box のdefault_KIDと同じでなければなりません。

    • Common Encryption ContentProtection Descriptor 要素の cenc:default_KID 属性の KID と PlayReady ContentProtection Descriptor elementShall の mspr:kid 値は、そのトラックの Track Encryption Box 内のdefault_KIDと同じです。

手記 Track Encryption Box のdefault_KIDは、16 バイトのビッグ エンディアン バイト配列、cenc:default_KID の UUID ハイフネーション文字列、PRO および mspr:kid のリトル エンディアン バイト順 GUID 表現からエンコードされた base64 文字列として格納されるバイナリまたは数値 UUID として解釈されることに注意してください。ただし、すべて同じ UUID の代替表現である必要があります。 セクション 2.2.5 を参照してください。

トップ に戻る

2.2 実装の推奨事項と要件

PlayReady オブジェクト (PRO) [PRO] は、エンコードされたメディア保護システム固有のヘッダー ボックス ('pssh') [ISOBFF]、初期化セグメント、または MPD 自体でエンコードされている場合があります。

'pssh' ボックスは、ムービー ボックス ('moov') またはムービー フラグメント ボックス ('moof') に挿入できます。 たとえば、'pssh' ボックスを 'moov' ボックスに挿入して、初期化セグメント ([DASH]、セクション 5.3.9.5.2) を使用できるようにします。 'pssh' ボックスを各 'moof' ボックスに挿入して、キーのローテーションのために KID によってインデックス付けされたリーフ ライセンスを伝える場合があります。

サンプルグループとサンプル補助情報は、それを参照する任意のムービーセグメント内に格納しなければなりません。 サンプルグループ説明ボックス ('sgdp') は、サンプルからグループへのボックス ('sbgp') が存在する場合、各 'moof' ボックスに存在しなければなりません。 サンプル補助情報オフセット ボックス ('saio') とサンプル補助情報サイズ ボックス ('saiz') は、Track Encryption Box ('tenc') を含むすべてのトラックの各ムービー セグメントに存在し、サンプル補助情報への有効なポインターを持つものとします。

2.2.1 全般

PlayReady ContentProtection 記述子要素は、適応セットまたはそのリプレゼンテーションに関連付けられますが、シームレスなアダプティブ ビットレートの切り替えと DASH アプリケーション仕様への準拠のために、PlayReady ContentProtection 記述子要素は Representation 要素ではなく AdaptiveSet 要素に含まれる必要があります。 これにより、適応セット内のすべてのセグメントに対して 1 つのライセンスと復号化の構成を使用できることを保証します。

PlayReady ContentProtection 記述子を含め、値が "cenc" の DASH MP4 ContentProtection 記述子を MPD に含める必要があります。

これにより、アプリケーション、MPD、または初期化セグメント内の 'pssh' 内のライセンス取得情報を持つ "cenc" 機能を持つ DRM は、コンテンツが Common Encrypted であることを識別し、必要なライセンス (default_KIDを使用) を識別し、ライセンスを取得し、メディアの暗号化を解除できます。

名前とバージョン "MSPR 2.0" を持つ @value 属性を、人間の認識用の PlayReady ContentProtection 記述子に UUID に加えて含することをお勧めします。 例えば:

<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="da9b5994-600c-2ad0-f96d-f12725780978"/>

<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”/>

2.2.2 PRO の場所の優先順位

クライアント アプリケーションが MPD で PRO を見つけると、初期化セグメントに含まれる PRO よりも優先されます (2.2.3 の追加の初期化セグメント PRO 要件を参照)。

クライアント アプリケーションが MPD で PRO を見つけると、その PRO に含まれる Rights Management ヘッダーは、メディア コンテンツの [moov] ボックスの [pssh] ボックスに含まれる PRO の Rights Management ヘッダーよりも優先されます。

クライアント アプリケーションが初期化セグメントで PRO を見つけた場合、メディア コンテンツの 'moov' ボックス ヘッダーの 'pssh' ボックスに含まれる PRO よりも優先されます (2.2.3 の追加の初期化セグメント PRO 要件を参照)。

2.2.3 PRO を含める場所

PRO は MPD または初期化セグメントに存在するものとします。 両方に存在してもよい。 MPD では、PlayReady コンテンツ保護記述子 (レガシ プレーヤーの場合は mspr:pro) の mspr:pro 要素と cenc:pssh 要素の両方に存在する必要があります。

初期化セグメントまたは MPD の PRO には Rights Management ヘッダーが含まれる場合があります。

初期化セグメントを使用するかどうかにかかわらず、初期化セグメントをダウンロードせずに Rights Management ヘッダー情報を取得できるように、MPD に適切な PRO を含めるようにすることをお勧めします。

2.2.4 MPD PRO に含める内容

PRO には Rights Management ヘッダーや埋め込みライセンス ストア (ELS) を含めることができます。

MPD PRO には Rights Management ヘッダーが含まれていることをお勧めします。

DRM ドメインまたはライセンス チェーン スキームの一部として必要な場合を除き、ELS を含めるのはお勧めしません。

2.2.5 KID バイトオーダー

PlayReady のキー識別子 (KID) は、GUID (DWORD、WORD、WORD、8 バイト配列) として書式設定されたバイト配列にリトル エンディアン バイト順に格納されます。この後、BASE64 は PRO の文字列としてストレージ用にエンコードされます。 PlayReady エコシステムの PlayReady ライセンス サーバーと PlayReady クライアントはどちらも、PRO ライセンスと PlayReady ライセンスの KID が [GUID] のリトル エンディアン バイト順表現であることを想定しています。

同等の KID は、[X.667] で指定されているように、UUID 文字列 ([X.667] セクション 6.4) またはビッグ エンディアン バイトオーダー バイナリ (セクション 6.2) または数値 (セクション 6.3) の UUID を含むバイト配列として表すことができます。 Common Encryption [CENC] と DASH は、cenc:default_KID 属性 (6.4 文字列)、Track Encryption Box ('tenc')、および 'seig' Sample Group Description Box ('sgpd') (6.2 バイナリまたは 6.3 数値バイト配列) でこれらの表現を使用します。

その結果、変更がない限り、クライアントは KIDs バイト配列のエンディアンを PlayReady ライセンスに一致させるために変換する必要があります。

cenc:default_KID 属性と [ISOBFF] ボックスの KID を PlayReady KID に変換するには、次のサンプル コードを使用します。

// Create a PlayReady GUID from the KID value in ISOBFF box.
// Since the PlayReady Server always runs on an Intel processor,
// this will be a little endian representation.
// e.g. KID in Track Encryption Box is:
//      {f81d4fae-7dec-11d0-a765-00a0c91e6bf6}

byte[] tencKidBytes = new byte[] {
    0xf8, 0x1d, 0x4f, 0xae,
    0x7d, 0xec,
    0x11, 0xd0,
    0xa7, 0x65,
    0x00, 0xa0, 0xc9, 0x1e, 0x6b, 0xf6
};

Byte[] prKidBytes = new byte[16];

// Swap the endianness of the GUID value:
// - Reverse bytes 0 to 3,
// - swap bytes 4 and 5,
// - swap bytes 6 and 7, and
// - copy bytes 8-15 as-is without swapping

ConvertEndianness(tencKidBytes, prKidBytes);
Guid prKid = new Guid(prKidBytes);
void ConvertEndianness(byte[] original, byte[] guidBytes)
{
    System.Array.Copy(original, guidBytes, 16);
    Swap(ref guidBytes, 0, 3);
    Swap(ref guidBytes, 1, 2);
    Swap(ref guidBytes, 4, 5);
    Swap(ref guidBytes, 6, 7);
}

void Swap(ref byte[] bytes, int pos1, int pos2)
{
    byte temp = bytes[pos1];
    bytes[pos1] = bytes[pos2];
    bytes[pos2] = temp;
}

表 2KID 表現の例

KID パラメーター タイプ 代表
子供 UUID BE 16 進数 f81d4fae7dec11d0a76500a0c91e6bf6
[X.667] のセクション 6.3
cenc:default_KID 属性 UUID 16 進文字列 (ハイフン付き) "f81d4fae-7dec-11d0-a765-00a0c91e6bf6"
[X.667] のセクション 6.4
ISOBFF ボックスの KID UUID BE バイト配列 16 進数表現は{ 0xf8、0x1d、0x4f、0xae、0x7d、0xec、0x11、0xd0、0xa7、0x65、0x00、0xa0、0xc9、0x1e、0x6b、0xf6 } です。
[X.667] のセクション 6.2
KID in PRO GUID LE バイト配列の Base64 文字列 "rk8d+Ox90BGnLZCgyR5r9g=="
(Base64 エンコード前のデータの 16 進表現は{ 0xae、0x4f、0x1d、0xf8、0xec、0x7d、0xd0、0x11、0xa7、0x65、0x00、0xa0、0xc9、0x1e、0x6b、0xf6 })
mspr:kid 'tenc' ボックスの default_KID バイト配列の Base64 文字列 "+B1Prn3sEdCnCZCGyR5r9g=="
(Base64 エンコード前のデータの 16 進表現は{0xf8、0x1d、0x4f、0xae、0x7d、0xec、0x11、0xd0、0xa7 0x65、0x00、0xa0、0xc9、0x1e、0x6b、0xf6})
PlayReady ライセンスの KID GUID LE バイト配列 16 進表現は{ 0xae、0x4f、0x1d、0xf8、0xec、0x7d、0xd0、0x11、0xa7、0x65、0x00、0xa0、0xc9、0x1e、0x6b、0xf6 } です。

トップ に戻る



3. メディア プレゼンテーションの説明の例

3.1 初期化セグメントまたはメディアコンテンツの正しいPRO

上記のセクション 2.1.1 を参照してください。

<?xml version="1.0" encoding="utf-8"?>

<MPD
  xmlns="urn:mpeg:DASH:schema:MPD:2011"
  xmlns:cenc="urn:mpeg:cenc:2013"
  minBufferTime="PT2.00S"
  profiles="urn:mpeg:dash:profile:isoff-live:2011"
  type="static">
  <Period>
    <AdaptationSet mimeType="audio/mp4">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="0b630844-cb17-496a-9700-3702e1d23ee2"/>
      <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
      </ContentProtection>
      <Representation bandwidth="134878" id="audio">
        <SegmentList duration="4000" timescale="1000">
          <Initialization sourceURL="audio/init.mp4"/>
          <SegmentURL media="audio/seg-0000.m4f"/>
          <SegmentURL media="audio/seg-0001.m4f"/>
          <SegmentURL media="audio/seg-0002.m4f"/>
        </SegmentList>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

3.2 MPD に PlayReady オブジェクト (PRO) を含む

上記のセクション 2.1.2 を参照してください。

<?xml version="1.0" encoding="utf-8"?>

<MPD
  xmlns="urn:mpeg:DASH:schema:MPD:2011"
  xmlns:cenc="urn:mpeg:cenc:2013"
  xmlns:mspr="urn:microsoft:playready"
  minBufferTime="PT4.00S"
  profiles="urn:mpeg:dash:profile:isoff-live:2011"
  type="static">
  <Period>
    <AdaptationSet mimeType="audio/mp4">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="0b630844-cb17-496a-9700-3702e1d23ee2"/>
      <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
<cenc:pssh>AAAAAJoE8HmYQEKGq5LmW+CIX5UAAALq6gIAAAEAAQDgAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AUgBBAGgAagBDAHgAZgBMAGEAawBtAFgAQQBEAGMAQwA0AGQASQArADQAZwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBxAGgASwBXAEgASgBhAEwAMAAxAEkAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALgBkAHkAbgBkAG4AcwAuAG8AcgBnAC8AYwBvAG4AdABvAHMAbwBzAHMAcAByAC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPAAvAEwAQQBfAFUAUgBMAD4APABEAFMAXwBJAEQAPgBpAEsARwBsAFcARwA0AEQAWABVAHEANAB3AGIAVwBnAFIATgBMAFIASgBnAD0APQA8AC8ARABTAF8ASQBEAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</cenc:pssh>
<mspr:pro>6gIAAAEAAQDgAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AUgBBAGgAagBDAHgAZgBMAGEAawBtAFgAQQBEAGMAQwA0AGQASQArADQAZwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBxAGgASwBXAEgASgBhAEwAMAAxAEkAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALgBkAHkAbgBkAG4AcwAuAG8AcgBnAC8AYwBvAG4AdABvAHMAbwBzAHMAcAByAC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPAAvAEwAQQBfAFUAUgBMAD4APABEAFMAXwBJAEQAPgBpAEsARwBsAFcARwA0AEQAWABVAHEANAB3AGIAVwBnAFIATgBMAFIASgBnAD0APQA8AC8ARABTAF8ASQBEAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</mspr:pro>
      </ContentProtection>
      <Representation bandwidth="134878" id="audio">
        <SegmentList duration="4000" timescale="1000">
          <Initialization sourceURL="audio/init.mp4"/>
          <SegmentURL media="audio/seg-0000.m4f"/>
          <SegmentURL media="audio/seg-0001.m4f"/>
          <SegmentURL media="audio/seg-0002.m4f"/>
        </SegmentList>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>