Condividi tramite


Specifica dell'intestazione PlayReady

1. Introduzione

Questa specifica si applica a qualsiasi prodotto finale creato con PlayReady Server SDK, PlayReady Device Porting Kit, Windows, Xbox, Windows Phone e Silverlight.

1.1. Cronologia modifiche

Versione Modifica
8 settembre 2021 Aggiungere l'attributo LICENSEREQUESTED facoltativo al nodo PROTECTINFO.
1 novembre 2017 Aggiungere la sezione Requisiti sintassi. Correzione di più esempi con ordine di attributo non corretto (gli attributi devono essere in ordine alfabetico)
12 luglio 2017 Aggiungere la sezione Aggiungi intestazione PlayReady 4.3.0.0, supportata a partire da PlayReady versione 4.
Aggiungere il requisito di sintassi che tutti i nodi XML devono essere chiusi in modo esplicito da un tag di chiusura
10 aprile 2015 Aggiungere la sezione Aggiungi intestazione PlayReady 4.2.0.0, supportata a partire da PlayReady versione 3
Settembre 2011 Aggiungere la sezione Aggiungi intestazione PlayReady 4.1.0.0, supportata a partire da PlayReady versione 2
Agosto 2008 Versione iniziale che documenta l'intestazione PlayReady 4.0.0.0 supportata in PlayReady versione 1

2. Oggetto PlayReady (PRO)

L'oggetto PlayReady (PRO) contiene i campi seguenti.

Nome del campo Tipo di campo Dimensioni (bit) Descrizione
Length DWORD 32 Lunghezza dell'oggetto PlayReady in byte. Questo valore non deve superare i 15 kilobyte (KB).
Conteggio record dell'oggetto PlayReady WORD 16 Specifica il numero di record di oggetti PlayReady nell'oggetto PlayReady.
Record di oggetti PlayReady Matrice BYTE Varia Contiene un numero variabile di record che contengono informazioni correlate alle licenze e all'acquisizione delle licenze.

2.1 Record di oggetti PlayReady

L'oggetto PlayReady è costituito da oggetti secondari aggiuntivi denominati Record oggetto PlayReady. I record oggetto PlayReady contengono i campi seguenti.

Nome del campo Tipo di campo Dimensioni (bit) Descrizione
Tipo di record WORD 16 Specifica il tipo di dati archiviati nel valore record.
Lunghezza record WORD 16 Specifica le dimensioni in byte del valore record.
Valore record Matrice BYTE Varia Il contenuto dell'oggetto dipende dal valore di Tipo record.

Il campo Tipo di record ha uno dei valori seguenti.

Tipo di valore Descrizione
0x0001 Indica che il record contiene un'intestazione PlayReady (PRH).
0x0002 Riservato.
0x0003 Indica un archivio licenze incorporato (ELS).

2.2. Esempi di oggetti PlayReady

La figura seguente mostra un file MP4 segmentato con un oggetto PlayReady che contiene un'intestazione PlayReady:

PlayReady Object in MP4

La figura seguente mostra la visualizzazione HEX del file MP4:

PlayReady Object Hex Dump

3. Intestazione PlayReady (PRH)

L'intestazione PlayReady (PRH) viene usata da un client per individuare o acquisire una licenza per il contenuto archiviato. Viene codificato usando UTF-16.

Matrice di supporto della versione 3.1

  Intestazione PlayReady v4.3.0.0 Intestazione PlayReady v4.2.0.0 Intestazione PlayReady v4.1.0.0 Intestazione PlayReady v4.0.0.0
Client
basati su PlayReady 4.0 SDK (vedere la nota 1)
Client
basati su PlayReady 3.0 SDK (vedere la nota 2)
 
Client
basati su PlayReady 2.x SDK (vedere la nota 3)
   
Client basati su
PlayReady 1.x SDK (vedere la nota 4)
     

Note:

  1. Xbox One versione 1709 o successiva sono client PlayReady 4.X.
  2. Windows 10 (tutte le versioni) e Xbox One versione 1703 o inferiore sono Client PlayReady 3.X. I dispositivi non Windows più recenti (ad esempio, Smart TV) rilasciati dopo il 2017 sono Client PlayReady 3.X.
  3. Silverlight e Windows 8, 8.1 sono client PlayReady 2.X. La maggior parte dei dispositivi non Windows (ad esempio, Smart TV) rilasciati tra il 2011 e il 2017 sono client PlayReady 2.X.
  4. La maggior parte dei dispositivi non Windows (ad esempio, Smart TV) rilasciati tra il 2008 e il 2011 sono client PlayReady 1.X.

3.2. Requisiti di sintassi

3.2.1. Canonizzato

Il codice XML deve essere canonico.

3.2.2. Tutti i nomi dei nodi e degli attributi sono distinzione tra maiuscole e minuscole

Supportato

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

Non supportato

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

3.2.3. I tag di chiusura devono essere espliciti

Tutti i nodi XML devono essere chiusi in modo esplicito da un tag di chiusura, inclusi quelli inclusi nei nodi all'interno del nodo CUSTOMATTRIBUTES.

Supportato

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

Non supportato

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

3.2.4. Attributi dello spazio dei nomi

Tutti gli attributi dello spazio dei nomi devono essere visualizzati prima degli attributi non dello spazio dei nomi.

Supportato

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

Non supportato

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

3.2.5. Ordine alfabetico

Tutti gli attributi devono essere in ordine alfabetico, inclusi quelli inclusi nei nodi all'interno del nodo CUSTOMATTRIBUTES.

Supportato

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

Non supportato

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

3.3. v4.3.0.0

L'intestazione PlayReady v4.3.0.0 è stata introdotta con PlayReady versione 4.0 nel settembre 2017 per supportare le chiavi AESCBC in un'intestazione. Questo supporto consente la crittografia del contenuto in modalità CBC, in particolare per le modalità di crittografia comuni "cbcs". Aumenta anche l'interoperabilità dei client PlayReady con altri sistemi DRM, nonché il contenuto esistente.

3.3.1. Differenze con altre versioni

A partire dalla versione 4.0, gli SDK e i client PlayReady sono in grado di elaborare le versioni di Intestazione PlayReady 4.0, 4.1, 4.2 e 4.3. Gli SDK PlayReady precedenti alla versione 4.0 restituiranno un errore "versione non supportata" quando vengono fornite intestazioni v4.3.

Il formato di intestazione PlayReady v.4.3.0.0 presenta le modifiche seguenti rispetto alla versione 4.2.0.0:

  • L'attributo della versione dell'elemento WRMHEADER è impostato sulla stringa "4.3.0.0".
  • L'attributo ALGID che si trova all'interno dell'elemento KID potrebbe essere mancante in una richiesta di acquisizione delle licenze. Microsoft consiglia che l'attributo ALGID abbia un valore valido nell'intestazione inclusa nel contenuto.
  • Quando l'attributo ALGID è presente in qualsiasi elementoKID ed è presente più di un elemento KID nell'elemento KIDS, tutti gli elementi KID devono includere l'attributo ALGID e i valori dell'attributo devono essere uguali.
  • L'attributo ALGID che si trova all'interno dell'elemento KID può ora avere il valore "AESCBC", oltre a "AESCTR", a condizione che:
    • Quando l'attributo ALGID è impostato su "AESCBC", l'attributo CHECKSUM non deve essere incluso.

3.3.2. Esempio

Di seguito è riportato un esempio di un'intestazione PlayReady 4.3.0.0 con chiavi AESCBC:

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

Di seguito è riportato un esempio di un'intestazione PlayReady 4.3.0.0 con un ALGID mancante:

<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. Formato

L'intestazione PlayReady v4.3.0.0 ha la sintassi seguente:

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

I tag sono descritti di seguito.

Nome del tag Obbligatoria Descrizione
WRMHEADER Elemento più esterno dell'oggetto intestazione. Può contenere un elemento DATA e deve contenere un attributo di versione. La versione per l'intestazione è "4.3.0.0". Ogni volta che Microsoft definisce nuovi tag o attributi obbligatori, un nuovo numero di versione è associato a tali tag o attributi. Se la versione è maggiore di quella per cui è stato scritto il codice client, il codice client deve non riuscire, perché implica che l'intestazione contenga tag obbligatori che il client non riconosce. Se la versione è minore o uguale a quella per cui è stato scritto il codice client, il codice client può ignorare in modo sicuro i tag o gli attributi che non lo comprendono.
DATA No Elemento Contenitore per i dati di intestazione, inclusi i tag di terze parti. Non è possibile includere più di un elemento DATA nell'elemento WRMHEADER .
PROTECTINFO No Specifica zero o un elemento KIDS . Non è possibile includere più di un elemento PROTECTINFO nell'elemento DATA . Facoltativamente include l'attributo LICENSEREQUESTED.
LICENSEREQUESTED No Specifica se l'acquisizione delle licenze richiede almeno una licenza o meno. Deve essere impostato su "true" o "false" se presente e si presuppone che sia impostato su "true" se non presente. Questo attributo viene ignorato dalle versioni di PlayReady prima della versione 4.5. L'applicazione PlayReady Server SDK è gratuita per ignorare questo attributo; è solo informativo.
BAMBINI No Specifica uno o più elementi KID che possono essere usati per la creazione di oggetti decrittografi per il contenuto associato. Uno o zero elementi KIDS possono esistere nel nodo PROTECTINFO .
RAGAZZO No Contiene tutti i dati chiave per una determinata licenza. Se il nodo KIDS è presente, uno o più elementi KID devono esistere nel nodo KIDS . L'elemento KID contiene gli attributi seguenti.

ALGID: facoltativo. Specifica l'algoritmo di crittografia. Può essere impostato su: "AESCTR", "AESCBC" o "COCKTAIL".

CHECKSUM: facoltativo. Solo per le chiavi AESCTR. Contiene un checksum calcolato usando l'attributo KID VALUE e la chiave di contenuto. Per informazioni dettagliate, vedere la sezione Algoritmo Checksum chiave di questo documento.

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati deve essere vuoto.

VALUE: obbligatorio. Contiene un valore GUID con ID chiave con codifica base64. Si noti che questo VALORE GUID (DWORD, WORD, WORD, matrice 8-BYTE) deve essere un ordine di byte endian piccolo.
LA_URL No Contiene l'URL per il servizio Web di acquisizione licenze. Sono consentiti solo URL assoluti. Non è possibile includere più di un elemento LA_URL nell'elemento DATA .

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati non deve essere vuoto.
LUI_URL No Contiene l'URL per una pagina Web di acquisizione di licenze non invisibile all'utente. Sono consentiti solo URL assoluti. Non è possibile includere più di un elemento LUI_URL nell'elemento DATA .

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati non deve essere vuoto.
DS_ID No ID servizio per il servizio di dominio. Solo un elemento DS_ID può essere incluso nell'elemento DATA .

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati non deve essere vuoto.
CUSTOMATTRIBUTES No L'autore del contenuto può aggiungere xml personalizzato all'interno di questo elemento. Il codice Microsoft non agisce su dati contenuti all'interno di questo elemento. Non è possibile includere più di un elemento CUSTOMATTRIBUTES nell'elemento DATA .

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati non deve essere vuoto.
DECRYPTORSETUP No Questo tag può contenere solo il valore "ONDEMAND". Quando questo tag è presente nel nodo DATA e il relativo valore è impostato su "ONDEMAND", quindi indica a un'applicazione che non deve prevedere che la catena di licenze completa per il contenuto sia disponibile per l'acquisizione o già presente nel computer client, prima di configurare il grafico multimediale. Se questo tag non è impostato, indica che un'applicazione può applicare la licenza da acquisire o già presente nel computer client, prima di configurare il grafico multimediale. Non è possibile includere più di un elemento DECRYPTORSETUP nell'elemento DATA .

3.4. v4.2.0.0

L'intestazione PlayReady v4.2.0.0 è stata introdotta con PlayReady versione 3.0 nell'aprile 2015 per consentire più KID in un'unica intestazione. Ciò significa che è possibile usare più chiavi per crittografare un singolo asset, ad esempio quando le tracce audio devono essere crittografate con una chiave diversa rispetto alle tracce video.

3.4.1. Differenze con altre versioni

Gli SDK PlayReady 3.0 e versioni successive dei client possono elaborare le versioni v4.0, v4.1 e v4.2 PlayReady Header. Gli SDK PlayReady precedenti restituiscono un errore "versione non supportata" quando vengono fornite intestazioni v4.2. Quando si usa l'intestazione v4.2, il client deve conoscere la versione del server usata tramite un meccanismo specifico dell'app personalizzato. Gli SDK PlayReady non offrono alcun modo nativo per ottenere queste informazioni sulla versione.

Il formato di intestazione PlayReady v.4.2.0.0 presenta le modifiche seguenti rispetto alla versione 4.1.0.0:

  • L'attributo di versione dell'elemento WRMHEADER è impostato sulla stringa "4.2.0.0".
  • L'elemento KID che si trova all'interno dell'elemento PROTECTINFO è stato rinominato in KIDS ed è ancora facoltativo.
  • Più elementi KID si trovano all'interno dell'elemento KIDS .

3.4.2. Esempio

Intestazione PlayReady 4.2.0.0 con due chiavi AESCTR:

<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. Formato

L'intestazione PlayReady v4.2.0.0 ha la sintassi seguente:

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

I tag sono descritti di seguito.

Nome del tag Obbligatoria Descrizione
WRMHEADER Elemento più esterno dell'oggetto intestazione. Può contenere un elemento DATA e deve contenere un attributo di versione. La versione per l'intestazione è "4.2.0.0". Ogni volta che Microsoft definisce nuovi tag o attributi obbligatori, un nuovo numero di versione è associato a tali tag o attributi. Se la versione è maggiore di quella per cui è stato scritto il codice client, il codice client deve non riuscire, perché implica che l'intestazione contenga tag obbligatori che il client non riconosce. Se la versione è minore o uguale a quella per cui è stato scritto il codice client, il codice client può ignorare in modo sicuro i tag o gli attributi che non lo comprendono.
DATA No Elemento Contenitore per i dati di intestazione, inclusi i tag di terze parti. Solo un elemento DATA può essere incluso nell'elemento WRMHEADER .
PROTECTINFO No Specifica zero o un elemento KIDS . Non è possibile includere più di un elemento PROTECTINFO nell'elemento DATA .
BAMBINI No Specifica uno o più elementi KID che possono essere usati per la creazione di oggetti decrittografi per il contenuto associato. Uno o zero elementi KIDS possono esistere nel nodo PROTECTINFO .
RAGAZZO No Contiene tutti i dati chiave per una determinata licenza. Se il nodo KIDS è presente, uno o più elementi KID devono esistere nel nodo KIDS . L'elemento KID contiene gli attributi seguenti.

ALGID: obbligatorio. Specifica l'algoritmo di crittografia. Deve essere impostato su: AESCTR o COCKTAIL

CHECKSUM: Facoltativo. Contiene un checksum calcolato usando il valore KID VALUE e la chiave di contenuto. Per informazioni dettagliate, vedere la sezione Algoritmo Checksum chiave di questo documento.

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati deve essere vuoto.

VALUE: obbligatorio. Contiene un valore GUID con ID chiave con codifica base64. Si noti che questo VALORE GUID (DWORD, WORD, WORD, matrice 8-BYTE) deve essere un ordine di byte endian piccolo.
LA_URL No Contiene l'URL per il servizio Web di acquisizione licenze. Sono consentiti solo URL assoluti. Non è possibile includere più di un elemento LA_URL nell'elemento DATA .

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati non deve essere vuoto.
LUI_URL No Contiene l'URL per una pagina Web di acquisizione di licenze non invisibile all'utente. Sono consentiti solo URL assoluti. Non è possibile includere più di un elemento LUI_URL nell'elemento DATA .

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati non deve essere vuoto.
DS_ID No ID servizio per il servizio di dominio. Non è possibile includere più di un elemento DS_ID nell'elemento DATA .

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati non deve essere vuoto.
CUSTOMATTRIBUTES No L'autore del contenuto può aggiungere XML arbitrario all'interno di questo elemento. Il codice Microsoft non agisce su dati contenuti all'interno di questo elemento. Non è possibile includere più di un elemento CUSTOMATTRIBUTES nell'elemento DATA .

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati non deve essere vuoto.
DECRYPTORSETUP No Questo tag può contenere solo il valore "ONDEMAND". Quando questo tag è presente nel nodo DATA e il relativo valore è impostato su "ONDEMAND", quindi indica a un'applicazione che non deve prevedere che la catena di licenze completa per il contenuto sia disponibile per l'acquisizione o già presente nel computer client, prima di configurare il grafico multimediale. Se questo tag non è impostato, indica che un'applicazione può applicare la licenza da acquisire o già presente nel computer client, prima di configurare il grafico multimediale. Non è possibile includere più di un elemento DECRYPTORSETUP nell'elemento DATA .

3.5. v4.1.0.0

L'intestazione PlayReady v4.1.0.0 è stata introdotta con PlayReady versione 2.0 nel settembre 2011 per supportare flussi lineari live con licenze foglia scalabili incorporate nel flusso. Questo tipo di flusso richiede ai client di associare una licenza radice scalabile senza conoscenza della chiave di crittografia del contenuto che verrà usata nel decrittografia.

3.5.1. Differenze con altre versioni

Gli SDK PlayReady 2.0 e i client successivi sono in grado di elaborare sia le versioni v4.0 che v4.1 PlayReady Header. Gli SDK PlayReady precedenti restituiscono un errore "versione non supportata" quando vengono fornite intestazioni v4.1.

Il formato di intestazione PlayReady v.4.1.0.0 presenta le modifiche seguenti rispetto alla versione 4.0.0.0:

  • L'attributo di versione dell'elemento WRMHEADER è impostato sulla stringa "4.1.0.0".
  • L'elemento DATA contiene un elemento DECRYPTORSETUP facoltativo.
  • L'elemento KID si trova all'interno dell'elemento PROTECTINFO ed è facoltativo anziché obbligatorio.
  • L'elemento KID contiene gli attributi ALGID (obbligatorio), CHECKSUM (facoltativo) e VALUE (obbligatorio).
  • L'elemento KEYLEN è stato rimosso. L'attributo KEYLEN è stato usato in precedenza per disambiguare le licenze cocktail con chiavi di lunghezza diverse. L'intestazione v4.1 interromperà la possibilità di supportare qualsiasi tipo di cocktail ma di 8 byte. Se si usano chiavi cocktail che non sono 8 byte, è necessario usare intestazioni v4.0.
  • Gli elementi ALGID e CHECKSUM sono stati rimossi dal momento che i dati sono contenuti all'interno degli attributi dell'elemento KID .

3.5.2. Formato

L'intestazione PlayReady v4.1.0.0 ha la sintassi seguente:

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

I tag sono descritti di seguito.

Nome del tag Obbligatoria Descrizione
WRMHEADER Elemento più esterno dell'oggetto intestazione. Può contenere un elemento DATA e deve contenere un attributo di versione. La versione per l'intestazione è "4.1.0.0". Ogni volta che Microsoft definisce nuovi tag o attributi obbligatori, un nuovo numero di versione è associato a tali tag o attributi. Se la versione è maggiore di quella per cui è stato scritto il codice client, il codice client deve non riuscire, perché implica che l'intestazione contenga tag obbligatori che il client non riconosce. Se la versione è minore o uguale a quella per cui è stato scritto il codice client, il codice client può ignorare in modo sicuro i tag o gli attributi che non lo comprendono.
DATA No Elemento Contenitore per i dati di intestazione, inclusi i tag di terze parti. Non è possibile includere più di un elemento DATA nell'elemento WRMHEADER .
PROTECTINFO No Specifica zero o uno elementi KID che possono essere usati per la creazione di oggetti decrittografi per il contenuto associato. Non è possibile includere più di un elemento PROTECTINFO nell'elemento DATA .
RAGAZZO No Contiene tutti i dati chiave per una determinata licenza. Uno o zero elementi KID possono esistere nel nodo PROTECTINFO . L'elemento KID contiene gli attributi seguenti.

VALUE: obbligatorio. Contiene un valore GUID con ID chiave con codifica base64. Si noti che questo VALORE GUID (DWORD, WORD, WORD, matrice 8-BYTE) deve essere un ordine di byte endian piccolo.

ALGID: obbligatorio. Specifica l'algoritmo di crittografia. Deve essere impostato su : "AESCTR" o "COCKTAIL"

CHECKSUM: Facoltativo. Contiene un checksum calcolato usando il valore KID VALUE e la chiave di contenuto. Per informazioni dettagliate, vedere la sezione Algoritmo Checksum chiave di questo documento.

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati deve essere vuoto.
LA_URL No Contiene l'URL per il servizio Web di acquisizione licenze. Sono consentiti solo URL assoluti. Non è possibile includere più di un elemento LA_URL nell'elemento DATA .

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati non deve essere vuoto.
LUI_URL No Contiene l'URL per una pagina Web di acquisizione di licenze non invisibile all'utente. Sono consentiti solo URL assoluti. Non è possibile includere più di un elemento LUI_URL nell'elemento DATA .

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati non deve essere vuoto.
DS_ID No ID servizio per il servizio di dominio. Non è possibile includere più di un elemento DS_ID nell'elemento DATA .

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati non deve essere vuoto.
CUSTOMATTRIBUTES No L'autore del contenuto può aggiungere XML arbitrario all'interno di questo elemento. Il codice Microsoft non agisce su dati contenuti all'interno di questo elemento. Solo un elemento CUSTOMATTRIBUTES può essere incluso nell'elemento DATA .

Se questo nodo esiste nel codice XML WRMHeader, il valore dei dati non deve essere vuoto.
DECRYPTORSETUP No Questo tag può contenere solo il valore "ONDEMAND". Quando questo tag presente nel nodo DATA e il relativo valore è impostato su "ONDEMAND", quindi indica a un'applicazione che non deve aspettarsi che la catena di licenze completa per il contenuto sia disponibile per l'acquisizione o già presente nel computer client, prima di configurare il grafico multimediale. Se questo tag non è impostato, indica che un'applicazione può applicare la licenza da acquisire o già presente nel computer client, prima di configurare il grafico multimediale. Solo un elemento DECRYPTORSETUP può essere incluso nell'elemento DATA .

Note per v4.1:

  • Tutti i tag e gli attributi XML nell'intestazione PlayReady sono definiti da Microsoft. L'unica eccezione è il contenuto dell'elemento CUSTOMATTRIBUTES . Gli sviluppatori di applicazioni PC PlayReady non devono aggiungere tag personalizzati all'esterno dell'elemento CUSTOMATTRIBUTES .
  • L'intestazione PlayReady deve rispettare le specifiche XML canoniche W3C v1.1.
  • L'intestazione PlayReady non contiene un tag di primo livello ?XML richiesto in XML ben formato.
  • È consigliabile che le dimensioni di questo campo non superino 1 KB.

3.6. v4.0.0.0

L'intestazione PlayReady v4.0.0.0 è stata introdotta con PlayReady versione 1.0 nel 2008 e consente una singola chiave AESCTR per supportare il contenuto crittografato AES o una chiave COCKTAIL per supportare il contenuto crittografato WMDRM.

3.6.1. Esempio

Intestazione PlayReady 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>
Oggetto PlayReady con codifica Base64 contenente un'intestazione PlayReady 4.0.0.0

XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AcQA1AEgAZwBDAFQAagA0ADAAawBHAGUATgBWAGgAVABIADkARwBlAHgAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgB3ACsATwBaAFYAcgA4AHYAegByAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+ AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADcAMAA1AC4AMQA5ADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQGBVAFQARQBTAD4APAAvAEQAQBUAEEAPgA8AC8AVwBSAE0ASABFAEEEARABFAEEARABFAPGA=

3.6.2. Formato

L'intestazione PlayReady v4.0.0.0 ha la sintassi seguente:

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

La tabella seguente descrive i diversi tag.

Nome del tag Obbligatoria Descrizione
WRMHEADER Elemento più esterno dell'oggetto intestazione. Può contenere un elemento DATA e un attributo version. La versione per l'intestazione è "4.0.0.0".

Semantica per packager:
Ogni volta che Microsoft definisce nuovi tag o attributi obbligatori, un nuovo numero di versione è associato a tali tag o attributi. La versione dell'intestazione PlayReady deve essere impostata sulla versione più alta delle versioni dei tag e degli attributi obbligatori presenti nell'intestazione.

Semantica per Client:
se la versione è maggiore di quella per cui è stato scritto il codice client, il codice client deve avere esito negativo perché implica che l'intestazione contiene tag obbligatori che il client non riconosce. Se la versione è minore o uguale a quella per cui è stato scritto il codice client, il codice client può ignorare in modo sicuro eventuali tag o attributi che non riconosce.
DATA Elemento contenitore per i dati di intestazione, inclusi i tag di terze parti.
PROTECTINFO Specifica il tipo di crittografia usando gli elementi figlio KEYLEN e ALGID .
KEYLEN Specifica le dimensioni della chiave simmetrica. Deve essere impostato su 16 se ALGID è impostato su "AESCTR" e 7 se ALGID è impostato su "COCKTAIL".
ALGID Specifica l'algoritmo di crittografia. Deve essere impostato sul valore seguente:

AESCTR: corrisponde all'algoritmo AES in modalità contatore.

COCKTAIL: corrisponde all'algoritmo Cocktail.
RAGAZZO Contiene un valore GUID DELL'ID chiave con codifica Base64. Si noti che questo VALORE GUID (matrice DWORD, WORD, WORD, 8 BYTE) deve essere un ordine di byte endian minimo.
CHECKSUM No Contiene il checksum calcolato utilizzando il VALORE KID e la chiave simmetrica. Per informazioni dettagliate, vedere la sezione Key Checksum Algorithm .See the Key Checksum Algorithm section for details.

Le versioni precedenti di PlayReady considerano questo campo come richiesto, quindi devono essere incluse in qualsiasi intestazione che verrà utilizzata da una versione precedente di PlayReady.
LA_URL No Contiene l'URL per il servizio Web di acquisizione delle licenze. Sono consentiti solo URL assoluti.
LUI_URL No Contiene l'URL per una pagina Web di acquisizione delle licenze non invisibile all'utente. Sono consentiti solo URL assoluti.
DS_ID No ID servizio per il servizio di dominio.
CUSTOMATTRIBUTES No L'autore del contenuto può aggiungere codice XML arbitrario all'interno di questo elemento. Il codice Microsoft non agisce sui dati contenuti in questo elemento.

Note per la versione 4.0:

  • Tutti i tag XML e gli attributi nell'intestazione PlayReady sono definiti da Microsoft. L'unica eccezione è il contenuto dell'elemento CUSTOMATTRIBUTES . Gli sviluppatori di applicazioni PER PC PlayReady non devono aggiungere tag personalizzati all'esterno dell'elemento CUSTOMATTRIBUTES , in quanto ciò potrebbe essere in conflitto con i tag futuri definiti da Microsoft.
  • L'ordine degli elementi figlio all'interno di un elemento contenitore non è rilevante.
  • Si noti che l'intestazione PlayReady non contiene un tag di primo livello ?XML obbligatorio nel formato XML corretto.
  • È consigliabile che le dimensioni di questo campo non superino 1 KB.
  • CHECKSUM è richiesto da PlayReady Server SDK fino alla versione 1.2. Dalla versione 1.5, PlayReady Server SDK considera CHECKSUM come facoltativo. PlayReady Porting Kit 1.2 richiede checkSUM. PlayReady Porting Kit 2.0 considera CHECKSUM come facoltativo.

4. Archivio licenze incorporate (ELS)

È consigliabile aggiungere un archivio licenze incorporato vuoto all'oggetto PlayReady nelle condizioni seguenti:

  • L'oggetto PlayReady deve essere inserito in un file di contenuto.
  • Il contenuto può essere usato in un contesto di domini PlayReady con licenze incorporate.

Ciò consente a un client PlayReady di incorporare ulteriormente una licenza associata a dominio nell'oggetto PlayReady semplicemente popolando l'archivio licenze embedded esistente e risparmia il tentativo di dover reintezionare l'intero file con un nuovo oggetto PlayReady di dimensioni maggiori rispetto a quello iniziale.

Nota

Non includere un archivio licenze incorporato vuoto in un oggetto PlayReady, destinato a essere inserito come stringa base 64 in un manifesto del client Smooth Streaming.

Nota

La dimensione consigliata è 10 KB.

5. Algoritmo checksum chiave

L'algoritmo checksum nell'intestazione PlayReady è progettato per proteggersi da chiavi non corrispondenti. Nei primi giorni di DRM, i brani sono stati crittografati con chiavi etichettate in modo non corretto. Ciò ha causato il rumore bianco riprodotto quando le canzoni sono state decrittografate. E se le canzoni sono state riprodotte abbastanza forte, l'apparecchiatura di riproduzione è stata distrutta. Con il checksum, la chiave simmetrica può essere verificata come chiave usata per crittografare il file. L'algoritmo funziona come segue:

Per un valore ALGID impostato su "AESCBC", non è definito alcun algoritmo key checksum. L'attributo CHECKSUM deve essere omesso.

Per un valore ALGID impostato su "AESCTR", l'ID chiave a 16 byte viene crittografato con una chiave simmetrica AES a 16 byte tramite la modalità BCE. I primi 8 byte del buffer vengono estratti e codificati in base64.

Per un valore ALGID impostato su "COCKTAIL", seguire questa procedura:

  1. Viene creato un buffer a 21 byte.

  2. La chiave simmetrica viene inserita nel buffer e il resto del buffer viene riempito con zeri.

  3. Per cinque iterazioni:

    a. buffer = SHA-1 (buffer).

  4. I primi 7 byte del buffer vengono estratti e codificati in base64.

  5. Dopo aver eseguito questi passaggi, i byte con codifica Base64 vengono usati come checksum.

6. CUSTOMATTRIBUTES

Un provider di servizi può aggiungere codice XML proprietario all'interno dell'elemento CUSTOMATTRIBUTES dell'intestazione PlayReady. Tutti i tag usati all'interno dell'elemento CUSTOMATTRIBUTES non sono necessariamente in conflitto con i tag futuri definiti da Microsoft.

Il codice Microsoft non agisce su alcun codice XML all'interno di questo elemento. Il back-end del provider di servizi o il relativo codice lato client sono gli unici che in genere interpretano il valore di questo elemento. Si supponga, ad esempio, che un servizio etichetta bianca rappresenti i servizi front-end AAA, BBB, CDC. Un servizio di questo tipo può crittografare la raccolta contenuto una sola volta (poiché si tratta di un'operazione costosa), ma quando gestisce il contenuto a un utente finale, può impostare CUSTOMATTRIBUTES sul nome del servizio front-end specifico a cui l'utente finale sottoscrive. Quando l'utente finale richiede una licenza per tale contenuto, questo consente al servizio etichetta bianca di determinare il servizio front-end a cui l'utente finale sottoscrive, in modo che possa rilasciare una licenza diversa.

Le dimensioni di questo campo non devono superare 1 kilobyte (KB).