Freigeben über


PlayReady-Headerspezifikation

1. Einführung

Diese Spezifikation gilt für jedes Endprodukt, das mit dem PlayReady Server SDK, playReady Device Porting Kit, Windows, Xbox, Windows Phone und Silverlight erstellt wurde.

1.1. Änderungsverlauf

Version Change
8. September 2021 Fügen Sie optionales LICENSEREQUESTED-Attribut zum PROTECTINFO-Knoten hinzu.
1. November 2017 Fügen Sie den Abschnitt "Syntaxanforderungen" hinzu. Beheben von Mehrfachbeispielen mit falscher Attributreihenfolge (Attribute müssen alphabetisch angeordnet sein)
12. Juli 2017 Fügen Sie den Abschnitt "PlayReady Header 4.3.0.0" hinzu, der ab PlayReady Version 4 unterstützt wird.
Hinzufügen einer Syntaxanforderung, dass alle XML-Knoten explizit durch ein schließende Tag geschlossen werden müssen
10. April 2015 Hinzufügen von PlayReady Header 4.2.0.0 Abschnitt, der ab PlayReady Version 3 unterstützt wird
September 2011 Hinzufügen des Abschnitts "PlayReady Header 4.1.0.0", der ab PlayReady Version 2 unterstützt wird
August 2008 Ursprüngliche Version, die den PlayReady-Header 4.0.0.0 dokumentiert, der in PlayReady Version 1 unterstützt wird

2. PlayReady-Objekt (PRO)

Das PlayReady-Objekt (PRO) enthält die folgenden Felder.

Feldname Feldtyp Größe (Bits) Beschreibung
Länge DWORD 32 Die Länge des PlayReady-Objekts in Bytes. Dieser Wert sollte nicht 15 Kilobyte (KB) überschreiten.
Anzahl der PlayReady-Objektdatensatz WORD 16 Gibt die Anzahl der PlayReady-Objektdatensätze im PlayReady-Objekt an.
PlayReady-Objektdatensätze BYTE-Array Varies Enthält eine variable Anzahl von Datensätzen, die Informationen im Zusammenhang mit Lizenzen und Lizenzkäufen enthalten.

2.1 PlayReady-Objektdatensätze

Das PlayReady-Objekt besteht aus zusätzlichen Unterobjekten namens PlayReady Object Records. PlayReady-Objekteinträge enthalten die folgenden Felder.

Feldname Feldtyp Größe (Bits) Beschreibung
Datensatztyp WORD 16 Gibt den Datentyp an, der im Datensatzwert gespeichert ist.
Datensatzlänge WORD 16 Gibt die Größe in Bytes des Datensatzwerts an.
Datensatzwert BYTE-Array Varies Der Inhalt des Objekts hängt vom Wert des Datensatztyps ab.

Das Feld "Datensatztyp" weist einen der folgenden Werte auf.

Werttyp BESCHREIBUNG
0x0001 Gibt an, dass der Datensatz einen PlayReady-Header (PRH) enthält.
0x0002 Reserviert.
0x0003 Gibt eine eingebettete Lizenz Store (ELS) an.

2.2. PlayReady-Objektbeispiele

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

PlayReady Object in MP4

Die folgende Abbildung zeigt die HEX-Ansicht dieser MP4-Datei:

PlayReady Object Hex Dump

3. PlayReady-Header (PRH)

Der PlayReady-Header (PRH) wird von einem Client verwendet, um eine Lizenz für den Inhalt zu finden oder zu erwerben, in dem er gespeichert wird. Sie wird mithilfe von UTF-16 codiert.

3.1 Versionsunterstützungsmatrix

  PlayReady Header v4.3.0.0 PlayReady Header v4.2.0.0 PlayReady Header v4.1.0.0 PlayReady Header v4.0.0.0
PlayReady 4.0 SDK-basierte Clients
(siehe Hinweis 1)
PlayReady 3.0 SDK-basierte Clients
(siehe Hinweis 2)
 
PlayReady 2.x SDK-basierte Clients
(siehe Hinweis 3)
   
PlayReady 1.x SDK-basierte Clients
(siehe Hinweis 4)
     

Hinweise:

  1. Xbox One Version 1709 oder höher sind PlayReady 4.X Clients.
  2. Windows 10 (alle Versionen) und Xbox One Version 1703 oder niedriger sind PlayReady 3.X Clients. Neueste nicht Windows Geräte (z. B. Smart TVs), die nach 2017 veröffentlicht wurden, sind PlayReady 3.X Clients.
  3. Silverlight und Windows 8, 8.1 sind PlayReady 2.X-Clients. Die meisten nicht Windows Geräte (z. B. Smart TVs), die zwischen 2011 und 2017 veröffentlicht werden, sind PlayReady 2.X-Clients.
  4. Die meisten nicht Windows Geräte (z. B. Smart TVs), die zwischen 2008 und 2011 veröffentlicht werden, sind PlayReady 1.X-Clients.

3.2. Syntaxanforderungen

3.2.1. Kanonisch

Der XML-Code muss kanonisiert werden.

3.2.2. Alle Namen von Knoten und Attributen sind groß- und kleinschreibungsempfindlich.

Unterstützt

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>

Nicht unterstützt

<KID value="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<kid VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </kid>

3.2.3. Schließende Tags müssen explizit sein.

Alle XML-Knoten müssen explizit durch ein schließende Tag geschlossen werden, einschließlich derer in Knoten innerhalb des CUSTOMATTRIBUTES-Knotens.

Unterstützt

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>

Nicht unterstützt

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> <CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </CUSTOMATTRIBUTES>

3.2.4. Namespaceattribute

Alle Namespaceattribute müssen vor Nicht-Namespaces-Attributen angezeigt werden.

Unterstützt

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">

Nicht unterstützt

<WRMHEADER version="4.3.0.0" xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader>

3.2.5. Alphabetische Reihenfolge

Alle Attribute müssen alphabetisch angeordnet sein, einschließlich derer in Knoten innerhalb des CUSTOMATTRIBUTES-Knotens.

Unterstützt

<KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode BarAttribute="Bar" FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>

Nicht unterstützt

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg==" ALGID="AESCBC"> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo" BarAttribute="Bar"> </MyNode> </CUSTOMATTRIBUTES>

3.3. v4.3.0.0

PlayReady Header v4.3.0.0 wurde im September 2017 mit PlayReady Version 4.0 eingeführt, um AESCBC-Schlüssel in einer Kopfzeile zu unterstützen. Diese Unterstützung ermöglicht die Verschlüsselung von Inhalten im CBC-Modus, insbesondere für die allgemeinen Verschlüsselungsmodi "cbcs". Außerdem wird die Interoperabilität von PlayReady-Clients mit anderen DRM-Systemen sowie vorhandenen Inhalten erhöht.

3.3.1. Unterschiede bei anderen Versionen

Ab Version 4.0 können PlayReady SDKs und Clients PlayReady Header-Versionen 4.0, 4.1, 4.2 und 4.3 verarbeiten. PlayReady SDKs vor Version 4.0 gibt einen Fehler "nicht unterstützte Version" zurück, wenn er mit v4.3-Headern bereitgestellt wird.

Das PlayReady-Headerformat v.4.3.0.0 hat die folgenden Änderungen im Vergleich zu v4.2.0.0:

  • Das Versionsattribut des WRMHEADER-Elements wird auf die Zeichenfolge "4.3.0.0" festgelegt.
  • Das ALGID-Attribut , das sich im KID-Element befindet, fehlt möglicherweise in einer Lizenzakquisitionsanforderung. Microsoft empfiehlt, dass das ALGID-Attribut einen gültigen Wert in der Kopfzeile enthält, die in den Inhalten enthalten ist.
  • Wenn das ALGID-Attribut in einem beliebigen KID-Element vorhanden ist, und es gibt mehrere KID-Elemente im KIDS-Element , müssen alle KID-Elemente das ALGID-Attribut enthalten, und die Attributwerte müssen identisch sein.
  • Das ALGID-Attribut , das sich im KID-Element befindet, kann nun zusätzlich zu "AESCTR" den Wert "AESCBC" haben, vorausgesetzt:
    • Wenn das ALGID-Attribut auf "AESCBC" festgelegt ist, darf das CHECKUM-Attribut nicht eingeschlossen werden.

3.3.2. Beispiele

Nachfolgend sehen Sie ein Beispiel für einen PlayReady-Header 4.3.0.0 mit AESCBC-Schlüsseln:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID>
        <KID ALGID="AESCBC" VALUE="tuhDoKUN7EyxDPtMRNmhyA=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
  </DATA>
</WRMHEADER>

Nachfolgend sehen Sie ein Beispiel für einen PlayReady-Header 4.3.0.0 mit fehlendem ALGID:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

3.3.3. Format

Der PlayReady-Header v4.3.0.0 weist die folgende Syntax auf:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
      <PROTECTINFO LICENSEREQUESTED="true">
        <KIDS>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
        </KIDS>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Die Tags werden unten beschrieben.

Tagname Erforderlich Beschreibung
WRMHEADER Ja Outermost-Element des Headerobjekts. Es kann ein DATA-Element enthalten und muss ein Versionsattribut enthalten. Die Version für den Header lautet "4.3.0.0". Jedes Mal, wenn Microsoft neue obligatorische Tags oder Attribute definiert, wird eine neue Versionsnummer diesen Tags oder Attributen zugeordnet. Wenn die Version größer ist als die, für die der Clientcode geschrieben wurde, muss der Clientcode fehlschlagen, da er impliziert, dass der Header obligatorische Tags enthält, die der Client nicht versteht. Wenn die Version kleiner oder gleich dem ist, für den der Clientcode geschrieben wurde, kann der Clientcode sicher alle Tags oder Attribute überspringen, die sie nicht verstehen.
DATA Nein Containerelement für Headerdaten, einschließlich Drittanbietertags. Es kann nicht mehr als ein DATA-Element im WRMHEADER-Element enthalten sein.
PROTECTINFO Nein Gibt null oder ein KIDS-Element an. Es kann nicht mehr als ein PROTECTINFO-Element im DATA-Element enthalten sein. Optional enthält das LICENSEREQUESTED-Attribut.
LICENSEREQUESTED Nein Gibt an, ob der Lizenzkauf mindestens eine Lizenz anfordert oder nicht. Muss auf "true" oder "false" festgelegt werden, wenn vorhanden und angenommen wird, dass er auf "true" festgelegt wird, falls nicht vorhanden. Dieses Attribut wird von PlayReady-Versionen vor 4.5 ignoriert. Die PlayReady Server SDK-Anwendung kann dieses Attribut nicht ignorieren. es ist nur informational.
KINDER Nein Gibt mindestens ein KID-Element an, das zum Erstellen von Entschlüsselungsobjekten für den zugeordneten Inhalt verwendet werden kann. Entweder ein oder null KINDER-Elemente können unter dem PROTECTINFO-Knoten vorhanden sein.
KIND Nein Enthält alle Schlüsseldaten für eine bestimmte Lizenz. Wenn der KIDS-Knoten vorhanden ist, muss ein oder mehrere KID-Elemente unter dem KIDS-Knoten vorhanden sein. Das KID-Element enthält die folgenden Attribute.

ALGID: Optional. Gibt den Verschlüsselungsalgorithmus an. Kann entweder auf "AESCTR", "AESCBC" oder "COCKTAIL" festgelegt werden.

PRÜFSUMME: Optional. Nur für AESCTR-Tasten. Enthält eine Prüfsumme, die mithilfe des KID VALUE-Attributs und des Inhaltsschlüssels berechnet wird. Ausführliche Informationen finden Sie im Abschnitt "Key Checksum Algorithm" dieses Dokuments.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, muss der Datenwert leer sein.

WERT: Erforderlich. Enthält einen base64-codierten SCHLÜSSEL-ID-GUID-Wert. Beachten Sie, dass dieser GUID -Wert (DWORD, WORD, WORD, 8-BYTE-Array) kleiner endianischer Bytereihenfolge sein muss.
LA_URL Nein Enthält die URL für den Lizenzkaufwebdienst. Es sind nur absolute URLs zulässig. Es kann nicht mehr als ein LA_URL Element im DATA-Element enthalten sein.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
LUI_URL Nein Enthält die URL für eine Nicht-stille Lizenzerwerbswebseite. Nur absolute URLs sind zulässig. Es kann nicht mehr als ein LUI_URL Element im DATA-Element enthalten sein.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
DS_ID Nein Dienst-ID für den Domänendienst. Es kann nur bis zu einem DS_ID Element im DATA-Element enthalten sein.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
CUSTOMATTRIBUTES Nein Der Inhaltsautor kann in diesem Element benutzerdefinierte XML hinzufügen. Microsoft-Code wirkt nicht auf Daten, die in diesem Element enthalten sind. Es kann nicht mehr als ein CUSTOMATTRIBUTES-Element im DATA-Element enthalten sein.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
ENTSCHLÜSSELUNGSSETUP Nein Dieses Tag kann nur den Wert "ONDEMAND" enthalten. Wenn dieses Tag im DATA-Knoten vorhanden ist und der Wert auf "ONDEMAND" festgelegt ist, gibt es eine Anwendung an, die nicht erwarten sollte, dass die vollständige Lizenzkette für den Inhalt für den Erwerb verfügbar ist oder bereits auf dem Clientcomputer vorhanden ist, bevor Sie das Mediendiagramm einrichten. Wenn dieses Tag nicht festgelegt ist, gibt es an, dass eine Anwendung die Lizenz erzwingen kann, oder bereits auf dem Clientcomputer vorhanden ist, bevor Sie das Mediendiagramm einrichten. Es kann nicht mehr als ein ENTSCHLÜSSELUNGSSETUP-Element im DATA-Element enthalten sein.

3.4. v4.2.0.0

PlayReady Header v4.2.0.0 wurde im April 2015 mit PlayReady Version 3.0 eingeführt, um mehrere KIDs in einer einzelnen Kopfzeile zu ermöglichen. Dies bedeutet, dass mehrere Schlüssel verwendet werden können, um ein einzelnes Objekt zu verschlüsseln, z. B. wenn die Audiospuren mit einem anderen Schlüssel verschlüsselt werden müssen als die Videotitel.

3.4.1. Unterschiede mit anderen Versionen

PlayReady 3.0 SDKs und höher Clients können die Versionen v4.0, v4.1 und v4.2 PlayReady Header verarbeiten. Frühere PlayReady-SDKs geben einen Fehler "nicht unterstützte Version" zurück, wenn sie mit v4.2-Headern bereitgestellt werden. Wenn Sie den v4.2-Header verwenden, muss der Client wissen, welche Serverversion er über einen benutzerdefinierten, appspezifischen Mechanismus verwendet. PlayReady SDKs bieten keine native Möglichkeit, diese Versionsinformationen abzurufen.

Das PlayReady-Headerformat v.4.2.0.0 weist die folgenden Änderungen im Vergleich zu v4.1.0.0 auf:

  • Das Versionsattribut des WRMHEADER-Elements wird auf die Zeichenfolge "4.2.0.0" festgelegt.
  • Das KID-Element , das sich im PROTECTINFO-Element befindet, wurde in KIDS umbenannt und ist weiterhin optional.
  • Mehrere KID-Elemente befinden sich im KIDS-Element .

3.4.2. Beispiel

PlayReady Header 4.2.0.0 mit zwei AESCTR-Tasten:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.2.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID ALGID="AESCTR" CHECKSUM="xNvWVxoWk04=" VALUE="0IbHou/5s0yzM80yOkKEpQ=="></KID>
        <KID ALGID="AESCTR" CHECKSUM="GnKaQIRacPU=" VALUE="/qgG2xbs4k2SKCxx6bhWqw=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
  </DATA>
</WRMHEADER>

3.4.3. Format

Der PlayReady-Header v4.2.0.0 weist die folgende Syntax auf:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.2.0.0">
  <DATA>
      <PROTECTINFO>
        <KIDS>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
        </KIDS>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Die Tags werden unten beschrieben.

Tagname Erforderlich Beschreibung
WRMHEADER Ja Äußeres Element des Headerobjekts. Es kann ein DATA-Element enthalten und muss ein Versionsattribut enthalten. Die Version für die Kopfzeile lautet "4.2.0.0". Jedes Mal, wenn Microsoft neue obligatorische Tags oder Attribute definiert, wird eine neue Versionsnummer diesen Tags oder Attributen zugeordnet. Wenn die Version größer ist als die, für die der Clientcode geschrieben wurde, muss der Clientcode fehlschlagen, da die Kopfzeile obligatorische Tags enthält, die der Client nicht versteht. Wenn die Version kleiner oder gleich dem ist, für den der Clientcode geschrieben wurde, kann der Clientcode sicher alle Tags oder Attribute überspringen, die sie nicht verstehen.
DATA Nein Containerelement für Kopfzeilendaten, einschließlich Drittanbietertags. Es kann nur bis zu einem DATA-Element im WRMHEADER-Element enthalten sein.
PROTECTINFO Nein Gibt null oder ein KIDS-Element an. Es kann nicht mehr als ein PROTECTINFO-Element im DATA-Element enthalten sein.
KINDER Nein Gibt mindestens ein KID-Element an, das zum Erstellen von Entschlüsselungsobjekten für den zugeordneten Inhalt verwendet werden kann. Entweder ein oder null KIDS-Elemente sind möglicherweise unter dem PROTECTINFO-Knoten vorhanden.
KIND Nein Enthält alle Schlüsseldaten für eine bestimmte Lizenz. Wenn der KIDS-Knoten vorhanden ist, muss ein oder mehrere KID-Elemente unter dem KIDS-Knoten vorhanden sein. Das KID-Element enthält die folgenden Attribute.

ALGID: Erforderlich. Gibt den Verschlüsselungsalgorithmus an. Muss entweder auf AESCTR oderCOCKTAILCHECKUM

festgelegt werden: Optional. Enthält eine Prüfsumme, die mithilfe des KID-WERTs und des Inhaltsschlüssels berechnet wird. Weitere Informationen finden Sie im Abschnitt " Schlüsselüberprüfungsalgorithmus " dieses Dokuments.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, muss der Datenwert leer sein.

WERT: Erforderlich. Enthält einen basis64-codierten SCHLÜSSEL-ID-GUID-Wert. Beachten Sie, dass dieser GUID -Wert (DWORD, WORD, WORD, 8-BYTE-Array) kleiner Endian-Byte-Reihenfolge sein muss.
LA_URL Nein Enthält die URL für den Lizenzerwerbswebdienst. Nur absolute URLs sind zulässig. Es kann nicht mehr als ein LA_URL Element im DATA-Element enthalten sein.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
LUI_URL Nein Enthält die URL für eine Nicht-stille Lizenzerwerbswebseite. Nur absolute URLs sind zulässig. Es kann nicht mehr als ein LUI_URL Element im DATA-Element enthalten sein.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
DS_ID Nein Dienst-ID für den Domänendienst. Es kann nicht mehr als ein DS_ID Element im DATA-Element enthalten sein.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
CUSTOMATTRIBUTES Nein Der Inhaltsautor kann beliebige XML in diesem Element hinzufügen. Microsoft-Code wirkt nicht auf Daten, die in diesem Element enthalten sind. Es kann nicht mehr als ein CUSTOMATTRIBUTES-Element im DATA-Element enthalten sein.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
ENTSCHLÜSSELUNGSSETUP Nein Dieses Tag kann nur den Wert "ONDEMAND" enthalten. Wenn dieses Tag im DATA-Knoten vorhanden ist und der Wert auf "ONDEMAND" festgelegt ist, gibt es eine Anwendung an, die nicht erwarten sollte, dass die vollständige Lizenzkette für den Inhalt für den Erwerb verfügbar ist oder bereits auf dem Clientcomputer vorhanden ist, bevor Sie das Mediendiagramm einrichten. Wenn dieses Tag nicht festgelegt ist, gibt es an, dass eine Anwendung die Lizenz erzwingen kann, oder bereits auf dem Clientcomputer vorhanden ist, bevor Sie das Mediendiagramm einrichten. Es kann nicht mehr als ein ENTSCHLÜSSELUNGSSETUP-Element im DATA-Element enthalten sein.

3.5. v4.1.0.0

PlayReady Header v4.1.0.0 wurde im September 2011 mit PlayReady Version 2.0 eingeführt, um live lineare Streams mit skalierbaren Blattlizenzen zu unterstützen, die im Stream eingebettet sind. Diese Art von Datenstrom erfordert Clients, eine skalierbare Stammlizenz ohne Wissen über den Inhaltsverschlüsselungsschlüssel zu binden, der im Entschlüsseler verwendet wird.

3.5.1. Unterschiede bei anderen Versionen

PlayReady 2.0 SDKs und höher Clients können sowohl die Versionen v4.0 als auch v4.1 PlayReady Header verarbeiten. Vorherige PlayReady SDKs geben einen Fehler "nicht unterstützte Version" zurück, wenn sie mit v4.1-Headern bereitgestellt werden.

Das PlayReady-Headerformat v.4.1.0.0 weist die folgenden Änderungen im Vergleich zu v4.0.0.0 auf:

  • Das Versionsattribut des WRMHEADER-Elements wird auf die Zeichenfolge "4.1.0.0" festgelegt.
  • Das DATA-Element enthält ein optionales DECRYPTORSETUP-Element .
  • Das KID-Element befindet sich im PROTECTINFO-Element und ist nicht erforderlich.
  • Das KID-Element enthält die Attribute ALGID (erforderlich), CHECKUM (optional) und WERT (erforderlich).
  • Das KEYLEN-Element wurde entfernt. Das KEYLEN-Attribut wurde zuvor verwendet, um Cocktaillizenzen mit unterschiedlichen Längenschlüsseln zu disambiguieren. Der v4.1-Header wird die Fähigkeit unterbrechen, alles, aber 8-Byte-Cocktailtasten zu unterstützen. Wenn Sie Cocktailtasten verwenden, die nicht 8-Byte sind, müssen Sie v4.0-Kopfzeilen verwenden.
  • Die ALGID - und CHECKUM-Elemente wurden entfernt, da ihre Daten in Attributen des KID-Elements enthalten sind.

3.5.2. Format

Der PlayReady-Header v4.1.0.0 weist die folgende Syntax auf:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.1.0.0">
  <DATA>
      <PROTECTINFO>
        <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Die Tags werden unten beschrieben.

Tagname Erforderlich Beschreibung
WRMHEADER Ja Outermost-Element des Headerobjekts. Es kann ein DATA-Element enthalten und muss ein Versionsattribut enthalten. Die Version für den Header lautet "4.1.0.0". Jedes Mal, wenn Microsoft neue obligatorische Tags oder Attribute definiert, wird eine neue Versionsnummer diesen Tags oder Attributen zugeordnet. Wenn die Version größer ist als die, für die der Clientcode geschrieben wurde, muss der Clientcode fehlschlagen, da er impliziert, dass der Header obligatorische Tags enthält, die der Client nicht versteht. Wenn die Version kleiner oder gleich dem ist, für den der Clientcode geschrieben wurde, kann der Clientcode sicher alle Tags oder Attribute überspringen, die sie nicht verstehen.
DATA Nein Containerelement für Headerdaten, einschließlich Drittanbietertags. Es kann nicht mehr als ein DATA-Element im WRMHEADER-Element enthalten sein.
PROTECTINFO Nein Gibt Null- oder ein KID-Element an, das zum Erstellen von Entschlüsselungsobjekten für den zugeordneten Inhalt verwendet werden kann. Es kann nicht mehr als ein PROTECTINFO-Element im DATA-Element enthalten sein.
KIND Nein Enthält alle Schlüsseldaten für eine bestimmte Lizenz. Entweder ein oder null KID-Elemente können unter dem PROTECTINFO-Knoten vorhanden sein. Das KID-Element enthält die folgenden Attribute.

WERT: Erforderlich. Enthält einen base64-codierten SCHLÜSSEL-ID-GUID-Wert. Beachten Sie, dass dieser GUID -Wert (DWORD, WORD, WORD, 8-BYTE-Array) kleiner endianischer Bytereihenfolge sein muss.

ALGID: Erforderlich. Gibt den Verschlüsselungsalgorithmus an. Muss entweder auf "AESCTR" oder "COCKTAIL"

CHECKSUM: Optional festgelegt werden. Enthält eine Prüfsumme, die mithilfe des KID VALUE- und Inhaltsschlüssels berechnet wird. Ausführliche Informationen finden Sie im Abschnitt " Key Checksum Algorithm " dieses Dokuments.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, muss der Datenwert leer sein.
LA_URL Nein Enthält die URL für den Lizenzkaufwebdienst. Es sind nur absolute URLs zulässig. Es kann nicht mehr als ein LA_URL Element im DATA-Element enthalten sein.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
LUI_URL Nein Enthält die URL für eine Webseite ohne automatische Lizenzerfassung. Es sind nur absolute URLs zulässig. Es kann nicht mehr als ein LUI_URL Element im DATA-Element enthalten sein.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
DS_ID Nein Dienst-ID für den Domänendienst. Es kann nicht mehr als ein DS_ID Element im DATA-Element enthalten sein.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
CUSTOMATTRIBUTES Nein Der Inhaltsautor kann beliebige XML innerhalb dieses Elements hinzufügen. Microsoft-Code reagiert nicht auf daten, die in diesem Element enthalten sind. Nur bis zu einem CUSTOMATTRIBUTES-Element kann im DATA-Element enthalten sein.

Wenn dieser Knoten in der WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
DECRYPTORSETUP Nein Dieses Tag darf nur den Wert "ONDEMAND" enthalten. Wenn dieses Tag im DATA-Knoten vorhanden ist und sein Wert auf "ONDEMAND" festgelegt ist, gibt es an, dass es nicht erwarten sollte, dass die vollständige Lizenzkette für den Inhalt für den Erwerb verfügbar ist oder bereits auf dem Clientcomputer vorhanden ist, bevor sie das Mediendiagramm einrichten. Wenn dieses Tag nicht festgelegt ist, gibt es an, dass eine Anwendung die zu erwerbende Lizenz erzwingen oder bereits auf dem Clientcomputer vorhanden ist, bevor Sie das Mediendiagramm einrichten. Es kann nur bis zu einem ENTSCHLÜSSELUNGSSETUP-Element im DATA-Element enthalten sein.

Hinweise für v4.1:

  • Alle XML-Tags und Attribute im PlayReady-Header werden von Microsoft definiert. Die einzige Ausnahme ist der Inhalt des CUSTOMATTRIBUTES-Elements . PlayReady PC-Anwendungsentwickler dürfen keine benutzerdefinierten Tags außerhalb des CUSTOMATTRIBUTES-Elements hinzufügen.
  • Der PlayReady-Header sollte von den Spezifikationen des kanonischen W3C XML v1.1 entsprechen.
  • Der PlayReady-Header enthält kein Tag auf oberster Ebene ?XML , das in wohlgeformten XML-Code erforderlich ist.
  • Es wird empfohlen, dass die Größe dieses Felds nicht mehr als 1 KB beträgt.

3.6. v4.0.0.0

PlayReady Header v4.0.0.0 wurde mit PlayReady Version 1.0 im Jahr 2008 eingeführt und ermöglicht es einem einzelnen AESCTR-Schlüssel, AES verschlüsselten Inhalt zu unterstützen, oder einen COCKTAIL-Schlüssel zur Unterstützung von WMDRM-verschlüsselten Inhalten.

3.6.1. Beispiele

PlayReady Header 4.0.0.0
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0">
  <DATA>
    <PROTECTINFO>
      <ALGID>AESCTR</ALGID>
      <KEYLEN>16</KEYLEN>
    </PROTECTINFO>
    <KID>q5HgCTj40kGeNVhTH9Gexw==</KID>
    <CHECKSUM>w+OZVr8vzrQ=</CHECKSUM>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <CUSTOMATTRIBUTES>
      <IIS_DRM_VERSION>8.0.1705.19</IIS_DRM_VERSION>
    </CUSTOMATTRIBUTES>
  </DATA>
</WRMHEADER>
Base64-codiertes PlayReady-Objekt, das einen PlayReady-Header 4.0.0.0 enthält

XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AcQA1AEgAZwBDAFQAagA0ADAAawBHAGUATgBWAGgAVABIADkARwBlAHgAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgB3ACsATwBaAFYAcgA4AHYAegByAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+ AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADcAMAA1AC4AMQA5ADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ ADwALwBDAFUAUwBUAE8ATQBBAFAVABSAEkAQGBVAFQARQBT4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPGA=

3.6.2. Format

Der PlayReady-Header v4.0.0.0 hat die folgende Syntax:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0">
<DATA>
      <PROTECTINFO>
        <ALGID>AESCTR</ALGID>
        <KEYLEN>16</KEYLEN>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID>base64-encoded guid</DS_ID>
    <KID>base64-encoded kid</KID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <CHECKSUM>
      checksum of the content key for verification
    </CHECKSUM>
  </DATA>
</WRMHEADER>

In der folgenden Tabelle werden die verschiedenen Tags beschrieben.

Tagname Erforderlich Beschreibung
WRMHEADER Ja Äußeres Element des Headerobjekts. Es kann ein DATA-Element und ein Versionsattribut enthalten. Die Version für die Kopfzeile lautet "4.0.0.0".

Semantik für Packager:
Jedes Mal, wenn Microsoft neue obligatorische Tags oder Attribute definiert, wird eine neue Versionsnummer diesen Tags oder Attributen zugeordnet. Die Version des PlayReady-Headers muss auf die höchsten Versionen der obligatorischen Tags und Attribute festgelegt werden, die in der Kopfzeile vorhanden sind.

Semantik für Client:
Wenn die Version größer ist als das, für das der Clientcode geschrieben wurde, muss der Clientcode fehlschlagen, da es bedeutet, dass die Kopfzeile obligatorische Tags enthält, die der Client nicht versteht. Wenn die Version kleiner oder gleich dem ist, für den der Clientcode geschrieben wurde, kann der Clientcode sicher alle Tags oder Attribute überspringen, die sie nicht verstehen.
DATA Ja Containerelement für Kopfzeilendaten, einschließlich Drittanbietertags.
PROTECTINFO Ja Gibt den Typ der Verschlüsselung mithilfe der untergeordneten ELEMENTE KEYLEN und ALGID an.
KEYLEN Ja Gibt die Größe des Inhaltsschlüssels an. Muss auf 16 festgelegt werden, wenn ALGID auf "AESCTR" und 7 festgelegt ist, wenn ALGID auf "COCKTAIL" festgelegt ist.
ALGID Ja Gibt den Verschlüsselungsalgorithmus an. Muss auf den folgenden Wert festgelegt werden:AESCTR:

Entspricht dem AES-Algorithmus im Zählermodus.

COCKTAIL: Entspricht dem Cocktail-Algorithmus.
KIND Ja Enthält einen basis64-codierten SCHLÜSSEL-ID-GUID-Wert. Beachten Sie, dass dieser GUID -Wert (DWORD, WORD, WORD, 8-BYTE-Array) kleiner Endian-Byte-Reihenfolge sein muss.
CHECKSUM Nein Enthält Prüfsummen, die mithilfe des KID-WERTs und des Inhaltsschlüssels berechnet werden. Ausführliche Informationen finden Sie im Abschnitt "Schlüsselcheckalgorithmus ".

Frühere Versionen von PlayReady behandelten dieses Feld als erforderlich, daher sollte es in jeder Kopfzeile enthalten sein, die von einer früheren Version von PlayReady verwendet werden soll.
LA_URL Nein Enthält die URL für den Lizenzerwerbswebdienst. Nur absolute URLs sind zulässig.
LUI_URL Nein Enthält die URL für eine Nicht-stille Lizenzerwerbswebseite. Nur absolute URLs sind zulässig.
DS_ID Nein Dienst-ID für den Domänendienst.
CUSTOMATTRIBUTES Nein Der Inhaltsautor kann beliebige XML in diesem Element hinzufügen. Microsoft-Code wirkt nicht auf Daten, die in diesem Element enthalten sind.

Hinweise für v4.0:

  • Alle XML-Tags und Attribute im PlayReady-Header werden von Microsoft definiert. Die einzige Ausnahme ist der Inhalt des CUSTOMATTRIBUTES-Elements . PlayReady-PC-Anwendungsentwickler dürfen keine benutzerdefinierten Tags außerhalb des CUSTOMATTRIBUTES-Elements hinzufügen, da dies möglicherweise mit zukünftigen Tags, die Microsoft definiert, zusammentreffen kann.
  • Die Reihenfolge untergeordneter Elemente innerhalb eines Containerelements ist nicht wichtig.
  • Beachten Sie, dass der PlayReady-Header kein Tag auf oberster Ebene ?XML enthält, das in gut gebildetem XML erforderlich ist.
  • Es wird empfohlen, die Größe dieses Felds nicht über 1 KB zu überschreiten.
  • CHECKUM ist von PlayReady Server SDK bis Version 1.2 erforderlich. Seit Version 1.5 behandelt playReady Server SDK das CHECKUM als optional. PlayReady Porting Kit 1.2 außerhalb des Felds erfordert das CHECKUM. PlayReady Porting Kit 2.0 behandelt das CHECKUM als optional.

4. Eingebettete Lizenz Store (ELS)

Es empfiehlt sich, unter den folgenden Bedingungen eine leere eingebettete Lizenz Store zum PlayReady-Objekt hinzuzufügen:

  • Das PlayReady-Objekt soll in eine Inhaltsdatei eingefügt werden.
  • Der Inhalt kann in einem Kontext von PlayReady-Domänen mit eingebetteten Lizenzen verwendet werden.

Dadurch kann ein PlayReady-Client eine domänengebundene Lizenz in das PlayReady-Objekt weiter einbetten, indem sie einfach die vorhandene eingebettete Lizenz Store auffüllen und den Aufwand speichert, dass die gesamte Datei mit einem neuen PlayReady-Objekt mit einer neuen PlayReady-Objekt von einer größeren Größe als dem der ursprünglichen Datei neu überschriftet werden muss.

Hinweis

Fügen Sie keine leere eingebettete Lizenz Store in ein PlayReady-Objekt ein, das als Basis-64-Zeichenfolge in ein Smooth Streaming Client Manifest eingefügt wird.

Hinweis

Die empfohlene Größe beträgt 10 KB.

5. Schlüsselcheckalgorithmus

Der Prüfsummenalgorithmus im PlayReady-Header soll vor falsch übereinstimmenden Schlüsseln schützen. In den frühen Tagen von DRM wurden Songs mit falsch bezeichneten Schlüsseln verschlüsselt. Dies führte dazu, dass weiße Rauschen wiedergegeben werden, wenn die Songs entschlüsselt wurden. Und wenn die Songs laut genug wiedergegeben wurden, wurde das Wiedergabegerät zerstört. Mit der Prüfsumme kann der Inhaltsschlüssel als Schlüssel überprüft werden, der zum Verschlüsseln der Datei verwendet wurde. Der Algorithmus funktioniert wie folgt:

Für einen ALGID-Wert , der auf "AESCBC" festgelegt ist, ist kein Schlüsselcheckalgorithmus definiert. Das CHECKUM-Attribut muss ausgelassen werden.

Für einen ALGID-Wert , der auf "AESCTR" festgelegt ist, wird die 16-Byte-Schlüssel-ID mit einem AES-Inhaltsschlüssel mit dem EZB-Modus verschlüsselt. Die ersten 8 Bytes des Puffers werden extrahiert und base64 codiert.

Führen Sie für einen AUF "COCKTAIL " festgelegten ALGID-Wert die folgenden Schritte aus:

  1. Ein 21-Bytepuffer wird erstellt.

  2. Der Inhaltsschlüssel wird im Puffer platziert, und der Rest des Puffers wird mit Nullen gefüllt.

  3. Für fünf Iterationen:

    a. puffer = SHA-1 (Puffer).

  4. Die ersten 7 Bytes des Puffers werden extrahiert und base64 codiert.

  5. Nachdem diese Schritte ausgeführt wurden, werden die base64-codierten Bytes als Prüfsumme verwendet.

6. CUSTOMATTRIBUTES

Ein Dienstanbieter kann proprietäre XML innerhalb des CUSTOMATTRIBUTES-Elements des PlayReady-Headers hinzufügen. Alle Tags, die innerhalb des CUSTOMATTRIBUTES-Elements verwendet werden, werden garantiert nicht mit zukünftigen Tags zusammentreffen, die von Microsoft definiert sind.

Microsoft-Code wirkt nicht auf XML innerhalb dieses Elements. Das Back-End des Dienstanbieters oder der clientseitige Code sind die einzigen, die den Wert dieses Elements in der Regel interpretieren. Beispielsweise stellt ein White Label-Dienst Front-End-Dienste AAA, BBB, CCC dar. Ein solcher Dienst kann seine Inhaltsbibliothek nur einmal verschlüsseln (da das ein teurer Vorgang ist), aber wenn er Inhalte für einen Endbenutzer bereitstellt, kann er die CUSTOMATTRIBUTES auf den Namen des spezifischen Front-End-Diensts festlegen, den der Endbenutzer abonnieren kann. Wenn der Endbenutzer eine Lizenz für diesen Inhalt anfordert, ermöglicht dies dem White Label-Dienst, zu bestimmen, welchen Front-End-Dienst der Endbenutzer abonnieren kann, damit er eine andere Lizenz ausgibt.

Die Größe dieses Felds sollte nicht über 1 Kilobyte (KB) liegen.