Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Inhaltsverschlüsselung
Der Packager muss den Inhalt verschlüsseln. Jedes Verschlüsselungsformat, das AES-128-Schlüssel verwendet, die im CTR-Modus oder im CBC-Modus verwendet werden, ist durch die Complianceregeln zulässig.
MP4-basierte Formate werden empfohlen. CMAF ist das bevorzugte MP4-basierte Format für PlayReady-Clients, Windows 10 und Xbox One.
Microsoft unterstützt die beiden gängigen Verschlüsselungsschemas, die eine breite Branchenakzeptanz haben: die "cbcs"-AES-CBC und "cenc" AES-CTR Schutzschemas. Siehe ISO/IEC FDIS 23001-7:2016 „Informationstechnik – MPEG-Systemtechnologien – Teil 7: Gemeinsame Verschlüsselung in Dateien im ISO-Basis-Medienformat“
Weitere Informationen finden Sie unter Inhaltsverschlüsselung und -übermittlung
Einfügen einer PlayReady-Kopfzeile in den Inhalt
Der Packager muss den PlayReady-Header einfügen, den er im Inhalt generiert hat. Sie wird in der Regel entweder in die Kopfzeile der Inhaltsdateien oder im Manifest der Streamingressourcen eingefügt.
Dieser Header enthält Standardwerte für Informationen, die von einem PlayReady-Client benötigt werden, um eine Lizenz für dieses bestimmte Inhaltsstück anzufordern. Beispielsweise muss ein PlayReady-Client wissen, welche Schlüssel-IDs (KIDs) in der Ressource verwendet werden, damit er die Schlüsselwerte anfordern kann. Außerdem muss die Adresse eines Lizenzservers bekannt sein, der diese Lizenz liefert. Optional muss sie wissen, welche Webseite für den Benutzer gerendert werden soll, falls eine Lizenzanforderung vom Lizenzserver abgelehnt wird (der Benutzer kann an eine Zahlungsseite weitergeleitet werden).
Hier ist ein Beispiel für eine PlayReady-Kopfzeile
<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>
Wenn ein PlayReady-Client geschützte Inhalte wiedergeben muss, fordert er eine Lizenz für den Inhalt an, sofern er noch nicht vorhanden ist. Um die Lizenzanforderung zu initiieren, hat der App-Entwickler die App möglicherweise mit hartcodierten oder dynamischen Werten für das KID-Array, LA_URL und das Verhalten im Falle einer Lizenzanforderungsverweigerung bereitgestellt. Die App hat die KID- oder LA_URL Standardwerte außer Kraft gesetzt. Wenn der Entwickler dies nicht getan hat, wird erwartet, dass der Client die Lizenzanforderung basierend auf den Standardwerten im Inhaltskopf selbst ausführen wird.
Für MP4-ISO-Dateien empfiehlt Microsoft, die ISO-Formatspezifikation zu folgen und den PlayReady-Header in ein Feld "pssh" einzufügen.
Beispiel für eine MP4-Datei mit einem PlayReady-Objekt
Die folgende Abbildung zeigt eine segmentierte MP4-Datei mit einem PlayReady-Objekt, das einen PlayReady-Header enthält:

Dies ist die HEX-Ansicht dieser Datei:

Die folgende Abbildung zeigt eine segmentierte MP4-Datei mit einem PlayReady-Objekt, das einen PlayReady-Header enthält, und ein anderes PlayReady-Objekt, das einen PlayReady Embedded License Store enthält:

Für adaptive Streamingressourcen empfiehlt Microsoft, den PlayReady-Header in das Manifest der Ressource einzufügen.
Beispiel für ein MPEG-DASH-Manifest, das eine PlayReady-Kopfzeile enthält
<?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>