Freigeben über


Verpacken von MP4-basierten Inhalten für PlayReady

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:

PlayReady Header in MP4

Dies ist die HEX-Ansicht dieser Datei:

PlayReady Objekt Hex Dump

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:

PlayReady Header und ELS in MP4

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>

Siehe auch

Unterstützte Formate

PlayReady-Testinhalte