PlayReady 用に MP4 ベースのコンテンツをパッケージ化する方法
コンテンツの暗号化
パッケージャーはコンテンツを暗号化する必要があります。 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 License Microsoft Storeを含む別の 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>