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 gemeinsamen Verschlüsselungsschemas, die eine breite Branchenakzeptanz haben – die AES-CBC- und "cenc"-AES-CTR-Schutzschemas. Siehe ISO/IEC FDIS 23001-7:2016 "Informationstechnologie – MPEG Systems Technologies – Teil 7: Allgemeine Verschlüsselung in ISO-Basismediendateidateien"

Weitere Informationen finden Sie unter Inhaltsverschlüsselung und -übermittlung

Einfügen eines PlayReady-Headers in den Inhalt

Der Packager muss den PlayReady-Header einfügen, den er im Inhalt generiert hat. Sie wird in der Regel entweder in der Kopfzeile der Inhaltsdateien oder im Manifest von 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. Ein PlayReady-Client muss beispielsweise wissen, welche Schlüssel-IDs (KIDs) im Objekt verwendet werden, damit er die Schlüsselwerte anfordern kann. Sie muss auch die Adresse eines Lizenzservers kennen, der diese Lizenz liefert. Optional muss sie wissen, welche Webseite dem 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 einen PlayReady-Header

<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, wenn 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 nicht vorhanden ist, wird der Client erwartet, dass die Lizenzanforderung basierend auf den Standardwerten im Inhaltsheader selbst ausgeführt wird.

Bei 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, die ein PlayReady-Objekt enthält

Die folgende Abbildung zeigt eine segmentierte MP4-Datei mit einem PlayReady-Objekt, das einen PlayReady-Header enthält:

PlayReady Header in MP4

Hier ist die HEX-Ansicht dieser Datei:

PlayReady Object Hex Dump

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

PlayReady Header and ELS in MP4

Bei adaptiven Streamingressourcen empfiehlt Microsoft, den PlayReady-Header im Manifest der Ressource einzufügen.

Beispiel für ein MPEG-DASH-Manifest, das einen PlayReady-Header 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>

Weitere Informationen

Unterstützte Formate

PlayReady-Testserverinhalt