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 Veränderung
8. September 2021 Fügen Sie dem PROTECTINFO-Knoten optionales LICENSEREQUESTED-Attribut hinzu.
1. November 2017 Fügen Sie den Abschnitt "Syntaxanforderungen" hinzu. Korrigieren 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 durch ein schließende Tag explizit geschlossen werden müssen
10. April 2015 Hinzufügen des Abschnitts "PlayReady Header 4.2.0.0", 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 Erste Version zur Dokumentation des PlayReady-Header 4.0.0.0, der in PlayReady-Version 1 unterstützt wird.

2. PlayReady-Objekt (PRO)

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

Feldname Field-Typ Größe (Bits) BESCHREIBUNG
Länge DWORD 32 Die Länge des PlayReady-Objekts in Byte. Dieser Wert darf 15 KB nicht überschreiten.
PlayReady Object Record Count WORT 16 Gibt die Anzahl der PlayReady-Objektdatensätze im PlayReady-Objekt an.
PlayReady-Objektdatensätze BYTE-Array Variiert Enthält eine variable Anzahl von Datensätzen, die Informationen zu Lizenzen und Lizenzerwerb enthalten.

2.1 PlayReady-Objektdatensätze

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

Feldname Field-Typ Größe (Bits) BESCHREIBUNG
Eintragstyp WORT 16 Gibt den Datentyp an, der im Datensatzwert gespeichert ist.
Record Length WORT 16 Gibt die Größe in Byte des Datensatzwerts an.
Wert des Eintrags BYTE-Array Variiert Der Inhalt des Objekts hängt vom Wert des Datensatztyps ab.

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

Werttyp BESCHREIBUNG
0x0001 Zeigt an, dass der Datensatz einen PlayReady Header (PRH) enthält.
0x0002 Reserviert.
0x0003 Gibt einen eingebetteten Lizenzspeicher (EMBEDDED License 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-Objekt in MP4

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

PlayReady Objekt Hex Dump

3. PlayReady-Kopfzeile (PRH)

Der PlayReady-Header (PRH) wird von einem Client verwendet, um eine Lizenz für den Inhalt zu suchen oder zu erwerben, in dem er gespeichert wird. Sie wird mit 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. Kanonischisiert

Der XML-Code muss kanonisch sein.

3.2.2. Bei allen Knoten- und Attributnamen wird die Groß- und Kleinschreibung beachtet

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ßendes Tag geschlossen werden, einschließlich der 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. Namespace-Attribute

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 der Attribute 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 einem Header 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 erhöht sie die Interoperabilität von PlayReady-Clients mit anderen DRM-Systemen sowie vorhandenen Inhalten.

3.3.1. Unterschiede mit 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 geben einen Fehler "nicht unterstützte Version" zurück, wenn sie mit v4.3-Headern bereitgestellt werden.

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

  • Das Versionsattribut des WRMHEADER-Elements wird auf die Zeichenfolge "4.3.0.0" festgelegt.
  • In der Lizenzakquisitionsanforderung könnte das im KID-Element enthaltene ALGID-Attribut fehlen. Microsoft empfiehlt, dass das ALGID-Attribut einen gültigen Wert in der Kopfzeile aufweist, die im Inhalt enthalten ist.
  • Wenn das ALGID-Attribut in einem beliebigen KID-Element vorhanden ist und mehrere KID-Elemente im KIDS-Elementvorhanden sind, müssen alle KID-Elemente das ALGID-Attribut enthalten, und die Attributwerte müssen identisch sein.
  • Das IM KID-Element enthaltene ALGID-Attribut kann nun zusätzlich zu "AESCTR" den Wert "AESCBC" aufweisen, vorausgesetzt:
    • Wenn das ALGID-Attribut auf "AESCBC" festgelegt ist, darf das CHECKSUM-Attribut nicht eingeschlossen werden.

3.3.2. Beispiele

Im Folgenden 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>

Im Folgenden 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 Äußerstes Element des Headerobjekts. Sie kann ein DATA-Element enthalten und muss ein Versionsattribut enthalten. Die Version für die Kopfzeile 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 der Version ist, für die der Client-Code geschrieben wurde, dann kann der Client-Code ohne Bedenken alle Tags oder Attribute überspringen, die er nicht versteht.
DATEN Nein Containerelement für Headerdaten, einschließlich Tags von Drittanbietern. Nicht mehr als ein DATA-Element kann im WRMHEADER-Element enthalten sein.
PROTECTINFO Nein Gibt null oder ein KIDS-Element an. Nicht mehr als ein PROTECTINFO-Element kann im DATA-Element enthalten sein. Enthält optional das Attribut LICENSEREQUESTED.
LICENSEREQUESTED Nein Gibt an, ob beim Lizenzerwerb mindestens eine Lizenz erforderlich ist oder nicht. Muss auf "true" oder "false" festgelegt werden, wenn vorhanden und angenommen wird, dass er auf "true" festgelegt wird, wenn nicht vorhanden. Dieses Attribut wird von PlayReady-Versionen vor 4.5 ignoriert. Die PlayReady Server SDK-Anwendung kann dieses Attribut ignorieren. es ist nur informational.
KINDER Nein Gibt ein oder mehrere KID-Elemente an, die zum Erstellen von Entschlüsselungsobjekten für den zugehörigen Inhalt verwendet werden können. Entweder ein oder null KIDS-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, müssen eins oder mehrere KID-Elementeunter dem KIDS-Knoten vorhanden sein. Das KID-Element enthält die folgenden Attribute.

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

CHECKSUM: Optional. Nur für AESCTR-Schlüssel. 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 im WRMHeader-XML vorhanden ist, muss der Datenwert leer sein.

WERT: Erforderlich. Enthält einen base64-kodierten Schlüssel-ID-GUID-Wert. Beachten Sie, dass dieser GUID-Wert (DWORD, WORD, WORD, 8-BYTE-Array) in Little-Endian-Byte-Reihenfolge vorliegen muss.
LA_URL Nein Enthält die URL für den Lizenzerwerbswebdienst. Es sind nur absolute URLs zulässig. Nicht mehr als ein LA_URL-Element kann im DATA-Element enthalten sein.

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

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

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

Wenn dieser Knoten im WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
DECRYPTORSETUP Nein Dieser Tag darf nur den Wert „ONDEMAND“ enthalten. Wenn dieses Tag innerhalb des DATA-Knoten vorhanden ist und der Wert auf "ONDEMAND" gesetzt ist, wird der Anwendung signalisiert, dass sie nicht erwarten sollte, dass die vollständige Lizenzkette für den Inhalt zum Erwerb verfügbar ist oder bereits auf dem Client-Rechner vorhanden vorliegt, bevor das Mediendiagramm eingerichtet wird. Wenn dieses Tag nicht festgelegt ist, gibt es an, dass eine Anwendung vor dem Einrichten des Mediendiagramms die zu erwerbende Lizenz erzwingen kann oder bereits auf dem Clientcomputer vorhanden ist. Nicht mehr als ein DECRYPTORSETUP-Element kann im DATA-Element enthalten sein.

3.4. v4.2.0.0

PlayReady Header v4.2.0.0 wurde mit PlayReady Version 3.0 im April 2015 eingeführt, um mehrere KIDs in einem einzelnen Header zuzulassen. Dies bedeutet, dass mehrere Schlüssel zum Verschlüsseln einer einzelnen Ressource verwendet werden können, z. B. wenn die Audiospuren mit einem anderen Schlüssel als den Videospuren verschlüsselt werden müssen.

3.4.1. Unterschiede mit anderen Versionen

PlayReady 3.0-SDKs und höhere 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. Bei Verwendung des v4.2-Headers 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 hat die folgenden Änderungen im Vergleich zu v4.1.0.0:

  • Das Versionsattribut des WRMHEADER-Elements wird auf die Zeichenfolge "4.2.0.0" festgelegt.
  • Das KID-Element im PROTECTINFO-Element 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-Schlüsseln:

<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ßerstes Element des Headerobjekts. Sie 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 er impliziert, dass der Header obligatorische Tags enthält, die der Client nicht versteht. Wenn die Version kleiner oder gleich der Version ist, für die der Clientcode geschrieben wurde, dann kann der Clientcode sicher alle Tags oder Attribute überspringen, die er nicht versteht.
DATEN Nein Containerelement für Headerdaten, einschließlich Tags von Drittanbietern. Nur bis zu einem DATA-Element kann im WRMHEADER-Element enthalten sein.
PROTECTINFO Nein Gibt null oder ein KIDS-Element an. Nicht mehr als ein PROTECTINFO-Element kann im DATA-Element enthalten sein.
KINDER Nein Gibt ein oder mehrere KID-Elemente an, die zum Erstellen von Entschlüsselungsobjekten für den zugehörigen Inhalt verwendet werden können. Unter dem Knoten PROTECTINFO können entweder ein oder null KIDS Elemente vorhanden sein.
KIND Nein Enthält alle Schlüsseldaten für eine bestimmte Lizenz. Wenn der KIDS-Knoten vorhanden ist, müssen eins oder mehrere KID-Elementeunter dem KIDS-Knoten vorhanden sein. Das KID-Element enthält die folgenden Attribute.

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

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

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

WERT: Erforderlich. Enthält einen base64-kodierten Schlüssel-ID-GUID-Wert. Beachten Sie, dass dieser GUID-Wert (DWORD, WORD, WORD, 8-BYTE-Array) in Little-Endian-Byte-Reihenfolge vorliegen muss.
LA_URL Nein Enthält die URL für den Lizenzerwerbswebdienst. Es sind nur absolute URLs zulässig. Nicht mehr als ein LA_URL-Element kann im DATA-Element enthalten sein.

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

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

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

Wenn dieser Knoten im WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
DECRYPTORSETUP Nein Dieser Tag darf nur den Wert „ONDEMAND“ enthalten. Wenn dieses Tag im DATA-Knoten vorhanden ist und sein Wert auf "ONDEMAND" festgelegt ist, weist es eine Anwendung darauf hin, dass sie nicht erwarten sollte, dass die vollständige Lizenzkette für den Inhalt zum Erwerb verfügbar ist oder bereits auf dem Clientcomputer vorhanden ist, bevor die Medienstruktur eingerichtet wird. Wenn dieses Tag nicht festgelegt ist, gibt es an, dass eine Anwendung vor dem Einrichten des Mediendiagramms die zu erwerbende Lizenz erzwingen kann oder bereits auf dem Clientcomputer vorhanden ist. Nicht mehr als ein DECRYPTORSETUP-Element kann im DATA-Element enthalten sein.

3.5. v4.1.0.0

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

3.5.1. Unterschiede mit anderen Versionen

PlayReady 2.0-SDKs und höhere Clients können sowohl die Versionen v4.0 als auch v4.1 PlayReady Header verarbeiten. Frühere 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 optional und nicht erforderlich.
  • Das KID-Element enthält die Attribute ALGID (erforderlich), CHECKSUM (optional) und VALUE (erforderlich).
  • Das KEYLEN-Element wurde entfernt. Das Attribut KEYLEN wurde früher verwendet, um Cocktail-Lizenzen mit unterschiedlich langen Schlüsseln uneindeutig zu machen. Der v4.1 Header ist fehlerhaft und unterstützt nur noch 8-Byte-Cocktail-Schlüssel. Wenn Sie Cocktailtasten verwenden, die nicht 8-Byte sind, müssen Sie v4.0-Header verwenden.
  • Die ELEMENTE ALGID und CHECKSUM 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 Äußerstes Element des Headerobjekts. Sie 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 der Version ist, für die der Clientcode geschrieben wurde, dann kann der Clientcode sicher alle Tags oder Attribute überspringen, die er nicht versteht.
DATEN Nein Containerelement für Headerdaten, einschließlich Tags von Drittanbietern. Nicht mehr als ein DATA-Element kann im WRMHEADER-Element enthalten sein.
PROTECTINFO Nein Gibt null- oder ein KID-Element an, das zum Erstellen von Entschlüsselungsobjekten für den zugehörigen Inhalt verwendet werden kann. Nicht mehr als ein PROTECTINFO-Element kann im DATA-Element enthalten sein.
KIND Nein Enthält alle Schlüsseldaten für eine bestimmte Lizenz. 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-kodierten Schlüssel-ID-GUID-Wert. Beachten Sie, dass dieser GUID-Wert (DWORD, WORD, WORD, 8-BYTE-Array) eine kleine endische Bytereihenfolge aufweisen 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-WERTs und des Inhaltsschlüssels berechnet wird. Ausführliche Informationen finden Sie im Abschnitt " Key Checksum Algorithm" dieses Dokuments.

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

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

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

Wenn dieser Knoten im WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
CUSTOMATTRIBUTES Nein Der Inhaltsautor kann beliebigen XML-Code 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 im WRMHeader-XML vorhanden ist, darf der Datenwert nicht leer sein.
DECRYPTORSETUP Nein Dieser Tag darf nur den Wert „ONDEMAND“ enthalten. Wenn dieses Tag im DATA-Knoten vorhanden ist und der Wert auf "ONDEMAND" festgelegt ist, weist es eine Anwendung darauf hin, dass sie nicht erwarten sollte, dass die vollständige Lizenzkette für den Inhalt zum Erwerb verfügbar ist oder bereits auf dem Client-Rechner vorhanden ist, bevor das Mediendiagramm eingerichtet wird. Wenn dieses Tag nicht festgelegt ist, gibt es an, dass eine Anwendung vor dem Einrichten des Mediendiagramms die zu erwerbende Lizenz erzwingen kann oder bereits auf dem Clientcomputer vorhanden ist. Nur bis zu einem DECRYPTORSETUP-Element kann 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 . Entwickler von PlayReady-PC-Anwendungen dürfen keine benutzerdefinierten Tags außerhalb des CUSTOMATTRIBUTES-Elements hinzufügen.
  • Der PlayReady-Header sollte die Spezifikationen der W3C-Kanonischen XML-Version 1.1 einhalten.
  • Der PlayReady-Header enthält kein ?XML-Tag auf oberster Ebene, das in wohlgeformtem XML erforderlich ist.
  • Es wird empfohlen, dass die Größe dieses Felds 1 KB nicht überschreitet.

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 einem einzigen AESCTR-Schlüssel die Unterstützung von AES verschlüsselten Inhalten 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 mit einem PlayReady-Header 4.0.0.0

XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AcQA1AEgAZwBDAFQAagA0ADAAawBHAGUATgBWAGgAVABIADkARwBlAHgAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgB3ACsATwBaAFYAcgA4AHYAegByAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADcAMAA1AC4AMQA5ADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=

3.6.2. Format

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

<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ßerstes Element des Headerobjekts. Sie 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 den höchsten Wert der 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 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 der Version ist, für die der Clientcode geschrieben wurde, kann der Clientcode alle Tags oder Attribute, die er nicht versteht, sicher überspringen.
DATEN Ja Containerelement für Headerdaten, einschließlich Tags von Drittanbietern.
PROTECTINFO Ja ** Gibt den Typ der Verschlüsselung fest, indem die Unterelemente KEYLEN und ALGID verwendet werden.
KEYLEN Ja Gibt die Größe des Inhaltsschlüssels an. Muss auf 16 festgelegt sein, 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 base64-kodierten Schlüssel-ID-GUID-Wert. Beachten Sie, dass dieser GUID-Wert (DWORD, WORD, WORD, 8-BYTE-Array) in Little-Endian-Byte-Reihenfolge vorliegen muss.
PRÜFSUMME Nein Enthält eine Prüfsumme, die unter Verwendung des KID VALUE und des Inhaltsschlüssels berechnet wird. Ausführliche Informationen finden Sie im Abschnitt " Key Checksum Algorithm" .

In früheren Versionen von PlayReady wurde dieses Feld nach Bedarf behandelt, 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. Es sind nur absolute URLs zulässig.
LUI_URL Nein Enthält die URL für eine nicht stille Webseite zum Lizenzerwerb. Es sind nur absolute URLs zulässig.
DS_ID Nein Dienst-ID für den Domänendienst.
CUSTOMATTRIBUTES Nein Der Inhaltsautor kann beliebigen XML-Code innerhalb dieses Elements hinzufügen. Microsoft-Code reagiert 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 . Entwickler von PlayReady-PC-Anwendungen dürfen keine benutzerdefinierten Tags außerhalb des CUSTOMATTRIBUTES-Elements hinzufügen, da dies zu einem Konflikt mit zukünftigen Tags führen kann, die von Microsoft definiert werden.
  • Die Reihenfolge der untergeordneten Elemente innerhalb eines Container-Elements spielt keine Rolle.
  • Beachten Sie, dass der PlayReady-Header kein Tag der obersten Ebene ?XML enthält, das in wohlgeformtem XML erforderlich ist.
  • Es wird empfohlen, dass die Größe dieses Felds 1 KB nicht überschreitet.
  • CHECKSUM ist von PlayReady Server SDK bis Version 1.2 erforderlich. Seit Version 1.5 behandelt PlayReady Server SDK die CHECKSUM als optional. Für das PlayReady Porting Kit 1.2 ist die CHECKSUM standardmäßig erforderlich. PlayReady Porting Kit 2.0 behandelt die CHECKSUM als optional.

4. Eingebetteter Lizenzspeicher (ELS)

Es empfiehlt sich, dem PlayReady-Objekt unter den folgenden Bedingungen einen leeren eingebetteten Lizenzspeicher 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.

Auf diese Weise kann ein PlayReady-Client eine domänengebundene Lizenz weiter in das PlayReady-Objekt einbetten, indem er einfach den vorhandenen eingebetteten Lizenzspeicher nutzt, was den Aufwand erspart, die gesamte Datei mit einem neuen, größeren PlayReady-Objekt als dem ursprünglichen neu zu versehen.

Hinweis

Fügen Sie keinen leeren eingebetteten Lizenzspeicher in ein PlayReady-Objekt ein, das darauf abzielt, als Base64-Zeichenfolge in ein Smooth Streaming Client Manifest eingefügt zu werden.

Hinweis

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

5. Schlüssel-Checksummen-Algorithmus

Der Prüfsummenalgorithmus im PlayReady-Header soll vor nicht übereinstimmenden Schlüsseln geschützt werden. In den frühen Tagen des DRM wurden Songs mit falsch bezeichneten Schlüsseln verschlüsselt. Dies führte dazu, dass beim Entschlüsseln der Songs weißes Rauschen wiedergegeben wurde. Und wenn die Songs laut genug wiedergegeben wurden, wurde die Wiedergabeausrüstung 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üsselprüfalgorithmus definiert. Das CHECKSUM-Attribut muss weggelassen werden.

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

Führen Sie für einen ALGID-Wert , der auf "COCKTAIL" festgelegt ist, die folgenden Schritte aus:

  1. Ein 21-Byte-Puffer wird erstellt.

  2. Der Inhaltsschlüssel wird in den Puffer gesetzt, und der Rest des Puffers wird mit Nullen gefüllt.

  3. Für fünf Iterationen:

    a) buffer = SHA-1 (buffer).

  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. BENUTZERDEFINIERTE ATTRIBUTE

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 nicht mit zukünftigen von Microsoft definierten Tags in Konflikt geraten.

Microsoft-Code reagiert nicht auf XML in diesem Element. Das Back-End des Dienstanbieters oder der clientseitige Code sind die einzigen, die normalerweise den Wert dieses Elements interpretieren. Angenommen, ein White Label-Dienst stellt Front-End-Dienste AAA, BBB, CCC dar. Ein solcher Dienst kann seine Inhaltsbibliothek nur einmal verschlüsseln (da dies 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 abonniert hat. Wenn der Endbenutzer eine Lizenz für diesen Inhalt anfordert, kann der White label-Dienst ermitteln, welcher Front-End-Dienst der Endbenutzer abonniert hat, damit er eine andere Lizenz ausstellen kann.

Die Größe dieses Felds darf nicht größer als 1 KB sein.