コンテンツの暗号化
パッケージャーはコンテンツを暗号化する必要があります。 CTR モードまたは CBC モードで使用される AES-128 キーを使用する暗号化形式は、コンプライアンス規則によって許可されます。
MP4 ベースの形式をお勧めします。 CMAF は、PlayReady クライアント、Windows 10、Xbox One に推奨される MP4 ベースの形式です。
Microsoft は、広範な業界の受け入れがある 2 つの一般的な暗号化スキーム ("cbcs" AES-CBC と "cenc" AES-CTR 保護スキーム) をサポートしています。 ISO/IEC FDIS 23001-7:2016「情報テクノロジ - MPEG システム テクノロジ – パート 7: ISO ベース メディア ファイル形式ファイルでの一般的な暗号化」を参照してください。
詳細については、「コンテンツの暗号化と配信」を参照してください。
コンテンツへの PlayReady ヘッダーの挿入
パッケージャーは、コンテンツに生成された PlayReady ヘッダーを挿入する必要があります。 通常、コンテンツ ファイルのヘッダーまたはストリーミング資産のマニフェストに挿入されます。
このヘッダーには、PlayReady クライアントがこの特定のコンテンツ部分のライセンスを要求するために必要な情報の既定値が含まれています。 たとえば、PlayReady クライアントは、キー値を要求できるように、資産で使用されているキー ID (KID) を認識する必要があります。 また、このライセンスを配信するライセンス サーバーのアドレスも把握している必要があります。 必要に応じて、ライセンス サーバーによってライセンス要求が拒否された場合に、ユーザーに表示する Web ページを把握する必要があります (ユーザーは支払いページに送られる可能性があります)。
PlayReady ヘッダーの例を次に示します。
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
<DATA>
<PROTECTINFO>
<KIDS>
<KID ALGID="AESCTR" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID>
</KIDS>
</PROTECTINFO>
<LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
<LUI_URL>http://www.contoso.com/pay/</LUI_URL>
</DATA>
</WRMHEADER>
PlayReady クライアントは、保護されたコンテンツを再生する必要がある場合、まだコンテンツがない場合は、コンテンツのライセンスを要求します。 ライセンス要求を開始するために、アプリ開発者は、KID 配列、LA_URL、およびライセンス要求拒否の場合の動作に対してハードコードまたは動的な値を使用してアプリをプロビジョニングしている可能性があります。 アプリは KID または LA_URL の既定値をオーバーライドしました。 開発者が行っていない場合、クライアントはコンテンツ ヘッダー自体で見つかった既定値に基づいてライセンス要求を行う必要があります。
MP4 ISO ファイルの場合は、ISO 形式の仕様に従い、PlayReady ヘッダーを 'pssh' ボックスに挿入することをお勧めします。
PlayReady オブジェクトを含む MP4 ファイルの例
次の図は、PlayReady ヘッダーを含む PlayReady オブジェクトを含むセグメント化された MP4 ファイルを示しています。
このファイルの HEX ビューを次に示します。
次の図は、PlayReady ヘッダーを含む PlayReady オブジェクトと、PlayReady Embedded ライセンス ストアを含む別の PlayReady オブジェクトを含むセグメント化された MP4 ファイルを示しています。
アダプティブ ストリーミング資産の場合、Microsoft では、アセットのマニフェストに PlayReady ヘッダーを挿入することをお勧めします。
PlayReady ヘッダーを含む MPEG-DASH マニフェストの例
<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" xmlns:cenc="urn:mpeg:cenc:2013" xmlns:mspr="urn:microsoft:playready" mediaPresentationDuration="PT10M56.907S" minBufferTime="PT4S">
<Period>
<AdaptationSet id="1" group="1" profiles="ccff" bitstreamSwitching="true" segmentAlignment="true" contentType="video" mimeType="video/mp4" codecs="avc1.640028" maxWidth="1920" maxHeight="1080" startWithSAP="1">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="10000000-1000-1000-1000-100000000001"/>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value="2.0" cenc:default_KID="10000000-1000-1000-1000-100000000001">
<mspr:pro>PABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMwAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcAA6AC8ALwBlAHgAcABlAHIAaQBtAGUAbgB0AGEAbAAxAC4AYQB6AHUAcgBlAHcAZQBiAHMAaQB0AGUAcwAuAG4AZQB0AC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPwBjAGYAZwA9ACgAYwBrADoAVwAzADEAYgBmAFYAdAA5AFcAMwAxAGIAZgBWAHQAOQBXADMAMQBiAGYAUQA9AD0ALABjAGsAdAA6AEEARQBTADEAMgA4AEIAaQB0AEMAQgBDACkAPAAvAEwAQQBfAFUAUgBMAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAEIAQwAiACAAVgBBAEwAVQBFAD0AIgBBAEEAQQBBAEUAQQBBAFEAQQBCAEEAUQBBAEIAQQBBAEEAQQBBAEEAQQBRAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</mspr:pro>
</ContentProtection>
<SegmentTemplate timescale="10000000" media="video/bbb_sunflower_1080p_60fps_normal_VIDEO$Number$.mp4" initialization="video/bbb_sunflower_1080p_60fps_normal_VIDEO0.mp4">
<SegmentTimeline>
<S d="83166700" />
<S d="79166700" />
<S d="80333300" />
<S d="73000000" />
</SegmentTimeline>
</SegmentTemplate>
<Representation id="video" bandwidth="10646158" width="1920" height="1080"/>
</AdaptationSet>
</Period>
</MPD>