Especificación del encabezado PlayReady
1. Introducción
Esta especificación se aplica a cualquier producto final creado con el SDK de PlayReady Server, playReady Device Porting Kit, Windows, Xbox, Windows Phone y Silverlight.
1.1. Historial de cambios
Versión | Change |
---|---|
8 de septiembre de 2021 | Agregue el atributo opcional LICENSEREQUESTED al nodo PROTECTINFO. |
1 de noviembre de 2017 | Agregue la sección Requisitos de sintaxis. Corrección de varios ejemplos con un orden de atributo incorrecto (los atributos deben estar en orden alfabético) |
12 de julio de 2017 | Agregue la sección Encabezado de PlayReady 4.3.0.0, compatible con la versión 4 de PlayReady. Se ha agregado el requisito de sintaxis de que todos los nodos XML deben cerrarse explícitamente mediante una etiqueta de cierre. |
10 de abril de 2015 | Se ha agregado la sección Encabezado playReady 4.2.0.0, compatible a partir de la versión 3 de PlayReady |
Septiembre de 2011 | Agregue la sección Encabezado de PlayReady 4.1.0.0, compatible a partir de la versión 2 de PlayReady. |
Agosto de 2008 | Versión inicial que documenta el encabezado de PlayReady 4.0.0.0 compatible con La versión 1 de PlayReady |
2. Objeto PlayReady (PRO)
El objeto PlayReady (PRO) contiene los campos siguientes.
Nombre del campo | Tipo de campo | Tamaño (bits) | Descripción |
---|---|---|---|
Length | DWORD | 32 | Longitud del objeto PlayReady en bytes. Este valor no debe superar los 15 kilobytes (KB). |
Recuento de registros de objetos PlayReady | WORD | 16 | Especifica el número de registros de objeto PlayReady en el objeto PlayReady. |
Registros de objetos PlayReady | Matriz BYTE | Varía | Contiene un número variable de registros que contienen información relacionada con las licencias y la adquisición de licencias. |
2.1 Registros de objetos PlayReady
El objeto PlayReady consta de subobjetos adicionales denominados Registros de objetos PlayReady. Los registros de objetos PlayReady contienen los campos siguientes.
Nombre del campo | Tipo de campo | Tamaño (bits) | Descripción |
---|---|---|---|
Tipo de registro | WORD | 16 | Especifica el tipo de datos almacenados en el valor de registro. |
Longitud del registro | WORD | 16 | Especifica el tamaño en bytes del valor de registro. |
Valor de registro | Matriz BYTE | Varía | El contenido del objeto depende del valor de Tipo de registro. |
El campo Tipo de registro tiene uno de los valores siguientes.
Tipo de valor | Descripción |
---|---|
0x0001 | Indica que el registro contiene un encabezado playReady (PRH). |
0x0002 | Reservado. |
0x0003 | Indica un almacén de licencias incrustado (ELS). |
2.2. Ejemplos de objetos PlayReady
En la ilustración siguiente se muestra un archivo MP4 segmentado con un objeto PlayReady que contiene un encabezado PlayReady:
En la ilustración siguiente se muestra la vista HEX de este archivo MP4:
3. Encabezado PlayReady (PRH)
Un cliente usa el encabezado PlayReady (PRH) para buscar o adquirir una licencia para el fragmento de contenido en el que se almacena. Se codifica mediante UTF-16.
Matriz de compatibilidad de versiones 3.1
Encabezado de PlayReady v4.3.0.0 | Encabezado playReady v4.2.0.0 | Encabezado de PlayReady v4.1.0.0 | Encabezado playReady v4.0.0.0 | |
---|---|---|---|---|
Clientes basados en sdk de PlayReady 4.0 (consulte la nota 1) |
✓ | ✓ | ✓ | ✓ |
Clientes basados en sdk de PlayReady 3.0 (consulte la nota 2) |
✓ | ✓ | ✓ | |
Clientes basados en sdk de PlayReady 2.x (consulte la nota 3) |
✓ | ✓ | ||
Clientes basados en sdk de PlayReady 1.x (consulte la nota 4) |
✓ |
Notas:
- Xbox One versión 1709 o superior son clientes de PlayReady 4.X.
- Windows 10 (todas las versiones) y Xbox One versión 1703 o inferior son los clientes de PlayReady 3.X. Los dispositivos no Windows más recientes (por ejemplo, televisores inteligentes) publicados después de 2017 son los clientes de PlayReady 3.X.
- Silverlight y Windows 8, 8.1 son clientes de PlayReady 2.X. La mayoría de los dispositivos que no son Windows (por ejemplo, televisores inteligentes) publicados entre 2011 y 2017 son clientes de PlayReady 2.X.
- La mayoría de los dispositivos que no son Windows (por ejemplo, televisores inteligentes) publicados entre 2008 y 2011 son clientes de PlayReady 1.X.
3.2. Requisitos de sintaxis
3.2.1. Canónico
El XML debe ser canónico.
3.2.2. Todos los nombres de nodo y atributos distinguen mayúsculas de minúsculas
Compatible
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
No compatible
<KID value="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<kid VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </kid>
3.2.3. Las etiquetas de cierre deben ser explícitas
Todos los nodos XML deben cerrarse explícitamente mediante una etiqueta de cierre, incluidas las de los nodos dentro del nodo CUSTOMATTRIBUTES.
Compatible
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>
No compatible
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> <CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </CUSTOMATTRIBUTES>
3.2.4. Atributos de espacio de nombres
Todos los atributos de espacio de nombres deben aparecer antes de los atributos que no son de espacios de nombres.
Compatible
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
No compatible
<WRMHEADER version="4.3.0.0" xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader>
3.2.5. Orden alfabético
Todos los atributos deben estar en orden alfabético, incluidos los de los nodos dentro del nodo CUSTOMATTRIBUTES.
Compatible
<KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode BarAttribute="Bar" FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>
No compatible
<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 se introdujo con PlayReady versión 4.0 en septiembre de 2017 para admitir claves AESCBC en un encabezado. Esta compatibilidad permite el cifrado de contenido en modo CBC, en particular para los modos de cifrado común 'cbcs'. También aumenta la interoperabilidad de los clientes de PlayReady con otros sistemas DRM, así como el contenido existente.
3.3.1. Diferencias con otras versiones
A partir de la versión 4.0, los SDK de PlayReady y los clientes pueden procesar las versiones 4.0, 4.1, 4.2 y 4.3 de PlayReady Header. Los SDK de PlayReady anteriores a la versión 4.0 devolverán un error de "versión no admitida" cuando se proporcionen encabezados v4.3.
El formato de encabezado playReady v.4.3.0.0 tiene los siguientes cambios en comparación con v4.2.0.0:
- El atributo de versión del elemento WRMHEADER se establece en la cadena "4.3.0.0".
- Es posible que falte el atributo ALGID ubicado dentro del elemento KID en una solicitud de adquisición de licencias. Microsoft recomienda que el atributo ALGID tenga un valor válido en el encabezado incluido en el contenido.
- Cuando el atributo ALGID está presente en cualquier elemento KID y hay más de un elemento KID en el elemento KIDS , todos los elementos KID deben incluir el atributo ALGID y los valores de atributo deben ser los mismos.
- El atributo ALGID ubicado dentro del elemento KID ahora puede tener el valor "AESCBC", además de "AESCTR", siempre que:
- Cuando el atributo ALGID se establece en "AESCBC", no se debe incluir el atributo CHECKSUM .
3.3.2. Ejemplos
A continuación se muestra un ejemplo de un encabezado de PlayReady 4.3.0.0 con claves 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>
A continuación se muestra un ejemplo de un encabezado de PlayReady 4.3.0.0 con un ALGID que falta:
<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
El encabezado de PlayReady v4.3.0.0 tiene la siguiente sintaxis:
<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>
Las etiquetas se describen a continuación.
Nombre de etiqueta | Requerido | Descripción |
---|---|---|
WRMHEADER | Sí | Elemento más externo del objeto de encabezado. Puede contener un elemento DATA y debe contener un atributo de versión. La versión del encabezado es "4.3.0.0". Cada vez que Microsoft define nuevas etiquetas o atributos obligatorios, se asocia un nuevo número de versión con esas etiquetas o atributos. Si la versión es mayor que aquella para la que se escribió el código de cliente, el código de cliente debe producir un error, ya que implica que el encabezado contiene etiquetas obligatorias que el cliente no entiende. Si la versión es menor o igual que para la que se escribió el código de cliente, el código de cliente puede omitir de forma segura cualquier etiqueta o atributo que no comprenda. |
DATA | No | Elemento contenedor para los datos de encabezado, incluidas las etiquetas de terceros. No se puede incluir más de un elemento DATA en el elemento WRMHEADER . |
PROTECTINFO | No | Especifica cero o un elemento KIDS . No se puede incluir más de un elemento PROTECTINFO en el elemento DATA . Opcionalmente, incluye el atributo LICENSEREQUESTED. |
LICENSEREQUESTED | No | Especifica si la adquisición de licencias solicita al menos una licencia o no. Debe establecerse en "true" o "false" si está presente y se supone que se establece en "true" si no está presente. Las versiones de PlayReady omiten este atributo antes de la versión 4.5. La aplicación playReady Server SDK es libre de omitir este atributo; es solo informativo. |
NIÑOS | No | Especifica uno o varios elementos KID que se pueden usar para crear objetos de descifrador para el contenido asociado. Uno o cero elementos KIDS pueden existir en el nodo PROTECTINFO . |
NIÑO | No | Contiene todos los datos clave de una licencia determinada. Si el nodo KIDS está presente, uno o varios elementos KID deben existir en el nodo KIDS . El elemento KID contiene los siguientes atributos. ALGID: opcional. Especifica el algoritmo de cifrado. Puede establecerse en: "AESCTR", "AESCBC" o "COCKTAIL". CHECKSUM: opcional. Solo para las claves AESCTR. Contiene una suma de comprobación calculada mediante el atributo KID VALUE y la clave de contenido. Consulte la sección Algoritmo de suma de comprobación de claves de este documento para obtener más información. Si este nodo existe en el XML WRMHeader, su valor de datos debe estar vacío. VALOR: obligatorio. Contiene un valor GUID de identificador de clave codificado en base64. Tenga en cuenta que este valor GUID (DWORD, WORD, WORD, matriz de 8 BYTES) debe ser un orden de bytes poco endian. |
LA_URL | No | Contiene la dirección URL del servicio web de adquisición de licencias. Solo se permiten direcciones URL absolutas. No se puede incluir más de un elemento LA_URL en el elemento DATA . Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío. |
LUI_URL | No | Contiene la dirección URL de una página web de adquisición de licencias no silenciosa. Solo se permiten direcciones URL absolutas. No se puede incluir más de un elemento LUI_URL en el elemento DATA . Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío. |
DS_ID | No | Id. de servicio del servicio de dominio. Solo se puede incluir hasta un elemento DS_ID en el elemento DATA . Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío. |
CUSTOMATTRIBUTES | No | El autor del contenido puede agregar XML personalizado dentro de este elemento. El código de Microsoft no actúa sobre los datos contenidos dentro de este elemento. No se puede incluir más de un elemento CUSTOMATTRIBUTES en el elemento DATA . Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío. |
DECRYPTORSETUP | No | Esta etiqueta solo puede contener el valor "ONDEMAND". Cuando esta etiqueta está presente en el nodo DATA y su valor se establece en "ONDEMAND", entonces indica a una aplicación que no debe esperar que la cadena de licencias completa para el contenido esté disponible para la adquisición, o ya presente en el equipo cliente, antes de configurar el grafo multimedia. Si no se establece esta etiqueta, indica que una aplicación puede exigir que se adquiera la licencia o que ya esté presente en el equipo cliente, antes de configurar el grafo multimedia. No se puede incluir más de un elemento DECRYPTORSETUP en el elemento DATA . |
3.4. v4.2.0.0
PlayReady Header v4.2.0.0 se introdujo con PlayReady versión 3.0 en abril de 2015 para permitir varios KID en un solo encabezado. Esto significa que se pueden usar varias claves para cifrar un único recurso, por ejemplo, cuando las pistas de audio deben cifrarse con una clave diferente a las pistas de vídeo.
3.4.1. Diferencias con otras versiones
Los SDK de PlayReady 3.0 y versiones posteriores de los clientes pueden procesar las versiones v4.0, v4.1 y v4.2 del encabezado PlayReady. Los SDK de PlayReady anteriores devuelven un error de "versión no admitida" cuando se proporciona con encabezados v4.2. Cuando se usa el encabezado v4.2, el cliente tiene que saber qué versión del servidor usa a través de un mecanismo personalizado específico de la aplicación. Los SDK de PlayReady no proporcionan ninguna manera nativa de obtener esta información de versión.
El formato de encabezado de PlayReady v.4.2.0.0 tiene los siguientes cambios en comparación con v4.1.0.0:
- El atributo de versión del elemento WRMHEADER se establece en la cadena "4.2.0.0".
- El elemento KID ubicado dentro del elemento PROTECTINFO se ha cambiado de nombre a KIDS y sigue siendo opcional.
- Varios elementos KID se encuentran dentro del elemento KIDS .
3.4.2. Ejemplo
Encabezado playReady 4.2.0.0 con dos teclas 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
El encabezado de PlayReady v4.2.0.0 tiene la siguiente sintaxis:
<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>
Las etiquetas se describen a continuación.
Nombre de etiqueta | Requerido | Descripción |
---|---|---|
WRMHEADER | Sí | Elemento más externo del objeto de encabezado. Puede contener un elemento DATA y debe contener un atributo de versión. La versión del encabezado es "4.2.0.0". Cada vez que Microsoft define nuevas etiquetas o atributos obligatorios, se asocia un nuevo número de versión con esas etiquetas o atributos. Si la versión es mayor que aquella para la que se escribió el código de cliente, el código de cliente debe producir un error, ya que implica que el encabezado contiene etiquetas obligatorias que el cliente no entiende. Si la versión es menor o igual que para la que se escribió el código de cliente, el código de cliente puede omitir de forma segura cualquier etiqueta o atributo que no comprenda. |
DATA | No | Elemento contenedor para los datos de encabezado, incluidas las etiquetas de terceros. Solo se puede incluir hasta un elemento DATA en el elemento WRMHEADER . |
PROTECTINFO | No | Especifica cero o un elemento KIDS . No se puede incluir más de un elemento PROTECTINFO en el elemento DATA . |
NIÑOS | No | Especifica uno o varios elementos KID que se pueden usar para crear objetos de descifrador para el contenido asociado. Uno o cero elementos KIDS pueden existir en el nodo PROTECTINFO . |
NIÑO | No | Contiene todos los datos clave de una licencia determinada. Si el nodo KIDS está presente, uno o varios elementos KID deben existir en el nodo KIDS . El elemento KID contiene los siguientes atributos. ALGID: obligatorio. Especifica el algoritmo de cifrado. Debe establecerse en: AESCTR o COCKTAIL CHECKSUM: Opcional. Contiene una suma de comprobación calculada mediante kid VALUE y la clave de contenido. Consulte la sección Algoritmo de suma de comprobación de claves de este documento para obtener más información. Si este nodo existe en el XML WRMHeader, su valor de datos debe estar vacío. VALOR: obligatorio. Contiene un valor GUID de identificador de clave codificado en base64. Tenga en cuenta que este valor GUID (DWORD, WORD, WORD, matriz de 8 BYTES) debe ser un orden de bytes poco endian. |
LA_URL | No | Contiene la dirección URL del servicio web de adquisición de licencias. Solo se permiten direcciones URL absolutas. No se puede incluir más de un elemento LA_URL en el elemento DATA . Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío. |
LUI_URL | No | Contiene la dirección URL de una página web de adquisición de licencias no silenciosa. Solo se permiten direcciones URL absolutas. No se puede incluir más de un elemento LUI_URL en el elemento DATA . Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío. |
DS_ID | No | Id. de servicio del servicio de dominio. No se puede incluir más de un elemento DS_ID en el elemento DATA . Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío. |
CUSTOMATTRIBUTES | No | El autor del contenido puede agregar XML arbitrario dentro de este elemento. El código de Microsoft no actúa sobre los datos contenidos dentro de este elemento. No se puede incluir más de un elemento CUSTOMATTRIBUTES en el elemento DATA . Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío. |
DECRYPTORSETUP | No | Esta etiqueta solo puede contener el valor "ONDEMAND". Cuando esta etiqueta está presente en el nodo DATA y su valor se establece en "ONDEMAND", entonces indica a una aplicación que no debe esperar que la cadena de licencias completa para el contenido esté disponible para la adquisición, o ya presente en el equipo cliente, antes de configurar el grafo multimedia. Si no se establece esta etiqueta, indica que una aplicación puede exigir que se adquiera la licencia o que ya esté presente en el equipo cliente, antes de configurar el grafo multimedia. No se puede incluir más de un elemento DECRYPTORSETUP en el elemento DATA . |
3.5. v4.1.0.0
PlayReady Header v4.1.0.0 se introdujo con PlayReady versión 2.0 en septiembre de 2011 para admitir secuencias lineales en vivo con licencias hoja escalables insertadas en la secuencia. Este tipo de secuencia requiere que los clientes enlacen una licencia raíz escalable sin conocimiento de la clave de cifrado de contenido que se usará en el descifrador.
3.5.1. Diferencias con otras versiones
Los SDK de PlayReady 2.0 y los clientes posteriores pueden procesar las versiones v4.0 y v4.1 del encabezado PlayReady. Los SDK de PlayReady anteriores devuelven un error de "versión no admitida" cuando se proporciona con encabezados v4.1.
El formato de encabezado playReady v.4.1.0.0 tiene los siguientes cambios en comparación con v4.0.0.0:
- El atributo de versión del elemento WRMHEADER se establece en la cadena "4.1.0.0".
- El elemento DATA contiene un elemento OPCIONAL DECRYPTORSETUP .
- El elemento KID se encuentra dentro del elemento PROTECTINFO y es opcional en lugar de necesario.
- El elemento KID contiene los atributos ALGID (obligatorio), CHECKSUM (opcional) y VALUE (obligatorio).
- Se ha quitado el elemento KEYLEN . El atributo KEYLEN se usó anteriormente para eliminar la ambigüedad de las licencias de cócteles con claves de longitud diferentes. El encabezado v4.1 interrumpirá la capacidad de admitir cualquier cosa, excepto las llaves de cóctel de 8 bytes. Si usa llaves de cóctel que no son de 8 bytes, debe usar encabezados v4.0.
- Los elementos ALGID y CHECKSUM se han quitado, ya que sus datos están contenidos dentro de los atributos del elemento KID .
3.5.2. Formato
El encabezado de PlayReady v4.1.0.0 tiene la siguiente sintaxis:
<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>
Las etiquetas se describen a continuación.
Nombre de etiqueta | Requerido | Descripción |
---|---|---|
WRMHEADER | Sí | Elemento más externo del objeto de encabezado. Puede contener un elemento DATA y debe contener un atributo de versión. La versión del encabezado es "4.1.0.0". Cada vez que Microsoft define nuevas etiquetas o atributos obligatorios, un nuevo número de versión está asociado a esas etiquetas o atributos. Si la versión es mayor que aquella para la que se escribió el código de cliente, el código de cliente debe producir un error, ya que implica que el encabezado contiene etiquetas obligatorias que el cliente no entiende. Si la versión es menor o igual que para la que se escribió el código de cliente, el código de cliente puede omitir de forma segura cualquier etiqueta o atributo que no comprenda. |
DATA | No | Elemento contenedor para los datos de encabezado, incluidas las etiquetas de terceros. No se puede incluir más de un elemento DATA en el elemento WRMHEADER . |
PROTECTINFO | No | Especifica cero o uno de los elementos KID que se pueden usar para crear objetos de descifrador para el contenido asociado. No se puede incluir más de un elemento PROTECTINFO en el elemento DATA . |
NIÑO | No | Contiene todos los datos clave de una licencia determinada. Puede haber uno o cero elementos KID en el nodo PROTECTINFO . El elemento KID contiene los siguientes atributos. VALUE: obligatorio. Contiene un valor GUID de identificador de clave codificado en base64. Tenga en cuenta que este valor GUID (DWORD, WORD, WORD, matriz de 8 BYTES) debe ser un orden de bytes little endian. ALGID: obligatorio. Especifica el algoritmo de cifrado. Debe establecerse en: "AESCTR" o "COCKTAIL" CHECKSUM: Opcional. Contiene una suma de comprobación calculada mediante kid VALUE y la clave de contenido. Consulte la sección Algoritmo de suma de comprobación de clave de este documento para obtener más información. Si este nodo existe en el XML WRMHeader, su valor de datos debe estar vacío. |
LA_URL | No | Contiene la dirección URL del servicio web de adquisición de licencias. Solo se permiten direcciones URL absolutas. No se puede incluir más de un elemento LA_URL en el elemento DATA . Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío. |
LUI_URL | No | Contiene la dirección URL de una página web de adquisición de licencias no silenciosa. Solo se permiten direcciones URL absolutas. No se puede incluir más de un elemento LUI_URL en el elemento DATA . Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío. |
DS_ID | No | Id. de servicio para el servicio de dominio. No se puede incluir más de un elemento DS_ID en el elemento DATA . Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío. |
CUSTOMATTRIBUTES | No | El autor del contenido puede agregar XML arbitrario dentro de este elemento. El código de Microsoft no actúa sobre ningún dato contenido dentro de este elemento. Solo se puede incluir un elemento CUSTOMATTRIBUTES en el elemento DATA . Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío. |
DECRYPTORSETUP | No | Esta etiqueta solo puede contener el valor "ONDEMAND". Cuando esta etiqueta presente en el nodo DATA y su valor se establece en "ONDEMAND", indica a una aplicación que no debe esperar que la cadena de licencias completa del contenido esté disponible para su adquisición, o ya esté presente en el equipo cliente, antes de configurar el grafo multimedia. Si no se establece esta etiqueta, indica que una aplicación puede exigir que se adquiera la licencia, o que ya esté presente en el equipo cliente, antes de configurar el grafo multimedia. Solo se puede incluir hasta un elemento DECRYPTORSETUP en el elemento DATA . |
Notas de la versión 4.1:
- Microsoft define todas las etiquetas y atributos XML del encabezado PlayReady. La única excepción es el contenido del elemento CUSTOMATTRIBUTES . Los desarrolladores de aplicaciones de PC playReady no deben agregar etiquetas personalizadas fuera del elemento CUSTOMATTRIBUTES .
- El encabezado PlayReady debe cumplir las especificaciones xml canónicas de W3C v1.1.
- El encabezado PlayReady no contiene una etiqueta de nivel
?XML
superior necesaria en XML con formato correcto. - Se recomienda que el tamaño de este campo no supere los 1 KB.
3.6. v4.0.0.0
PlayReady Header v4.0.0.0 se introdujo con PlayReady versión 1.0 en 2008 y permite que una sola clave AESCTR admita contenido cifrado AES o una clave COCKTAIL para admitir contenido cifrado WMDRM.
3.6.1. Ejemplos
Encabezado de 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>
Objeto PlayReady codificado en Base64 que contiene un encabezado de PlayReady 4.0.0.0
XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AcQA1AEgAZwBDAFQAagA0ADAAawBHAGUATgBWAGgAVABIADkARwBlAHgAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgB3ACsATwBaAFYAcgA4AHYAegByAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+ AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADcAMAA1AC4AMQA5ADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQAQQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=
3.6.2. Formato
El encabezado de PlayReady v4.0.0.0 tiene la siguiente sintaxis:
<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>
En la tabla siguiente se describen las distintas etiquetas.
Nombre de etiqueta | Requerido | Descripción |
---|---|---|
WRMHEADER | Sí | Elemento más externo del objeto de encabezado. Puede contener un elemento DATA y un atributo de versión. La versión del encabezado es "4.0.0.0". Semántica del empaquetador: cada vez que Microsoft define nuevas etiquetas o atributos obligatorios, se asocia un nuevo número de versión a esas etiquetas o atributos. La versión del encabezado PlayReady debe establecerse en el valor más alto de las versiones de las etiquetas y atributos obligatorios presentes en el encabezado. Semántica para Client: Si la versión es mayor que la para la que se escribió el código de cliente, el código de cliente debe producir un error porque implica que el encabezado contiene etiquetas obligatorias que el cliente no entiende. Si la versión es menor o igual que para la que se escribió el código de cliente, el código de cliente puede omitir de forma segura cualquier etiqueta o atributo que no comprenda. |
DATA | Sí | Elemento contenedor para los datos de encabezado, incluidas las etiquetas de terceros. |
PROTECTINFO | Sí | Especifica el tipo de cifrado mediante los elementos secundarios KEYLEN y ALGID . |
KEYLEN | Sí | Especifica el tamaño de la clave de contenido. Debe establecerse en 16 si ALGID está establecido en "AESCTR" y 7 si ALGID está establecido en "COCKTAIL". |
ALGID | Sí | Especifica el algoritmo de cifrado. Debe establecerse en el siguiente valor: AESCTR: corresponde al algoritmo AES en modo contador. COCKTAIL: corresponde al algoritmo de cóctel. |
NIÑO | Sí | Contiene un valor GUID de identificador de clave codificado en base64. Tenga en cuenta que este valor GUID (DWORD, WORD, WORD, matriz de 8 BYTES) debe ser un orden de bytes little endian. |
CHECKSUM | No | Contiene la suma de comprobación calculada mediante kid VALUE y la clave de contenido. Consulte la sección Algoritmo de suma de comprobación de claves para obtener más información. Las versiones anteriores de PlayReady trataron este campo según sea necesario, por lo que debe incluirse en cualquier encabezado que vaya a consumir una versión anterior de PlayReady. |
LA_URL | No | Contiene la dirección URL del servicio web de adquisición de licencias. Solo se permiten direcciones URL absolutas. |
LUI_URL | No | Contiene la dirección URL de una página web de adquisición de licencias no silenciosa. Solo se permiten direcciones URL absolutas. |
DS_ID | No | Id. de servicio para el servicio de dominio. |
CUSTOMATTRIBUTES | No | El autor del contenido puede agregar XML arbitrario dentro de este elemento. El código de Microsoft no actúa sobre ningún dato contenido dentro de este elemento. |
Notas de la versión 4.0:
- Microsoft define todas las etiquetas y atributos XML del encabezado PlayReady. La única excepción es el contenido del elemento CUSTOMATTRIBUTES . Los desarrolladores de aplicaciones de PC playReady no deben agregar etiquetas personalizadas fuera del elemento CUSTOMATTRIBUTES , ya que esto puede entrar en conflicto con etiquetas futuras que Microsoft define.
- El orden de los elementos secundarios dentro de un elemento contenedor no importa.
- Tenga en cuenta que el encabezado PlayReady no contiene una etiqueta de nivel
?XML
superior necesaria en XML con formato correcto. - Se recomienda que el tamaño de este campo no supere los 1 KB.
- EL SDK del servidor de PlayReady requiere CHECKSUM hasta la versión 1.2. Desde la versión 1.5, el SDK de PlayReady Server trata CHECKSUM como opcional. PlayReady Porting Kit 1.2 está listo para usar. PlayReady Porting Kit 2.0 trata CHECKSUM como opcional.
4. Almacén de licencias insertado (ELS)
Se recomienda agregar un almacén de licencias incrustado vacío al objeto PlayReady en las condiciones siguientes:
- El objeto PlayReady se va a insertar en un archivo de contenido.
- El contenido se puede usar en un contexto de dominios de PlayReady con licencias insertadas.
Esto permite que un cliente de PlayReady inserte aún más una licencia enlazada a un dominio en el objeto PlayReady simplemente rellenando el almacén de licencias incrustado existente y ahorra el esfuerzo de tener que volver a encabezado todo el archivo con un nuevo objeto PlayReady de un tamaño mayor que el del inicial.
Nota
No incluya un almacén de licencias incrustado vacío en un objeto PlayReady, destinado a insertarse como una cadena base 64 en un manifiesto de cliente de Smooth Streaming.
Nota
El tamaño recomendado es de 10 KB.
5. Algoritmo de suma de comprobación de clave
El algoritmo de suma de comprobación del encabezado PlayReady está diseñado para protegerse frente a claves no coincidedas. En los primeros días de DRM, las canciones se cifraron con claves etiquetadas incorrectamente. Esto dio lugar a que el ruido blanco se reproducira cuando las canciones se descifran. Y si las canciones fueron reproducidas lo suficientemente fuerte, el equipo de reproducción fue destruido. Con la suma de comprobación, la clave de contenido se puede comprobar como la clave que se usó para cifrar el archivo. El algoritmo funciona de la siguiente manera:
Para un valor ALGID establecido en "AESCBC", no hay ningún algoritmo de suma de comprobación de clave definido. Se debe omitir el atributo CHECKSUM .
Para un valor ALGID establecido en "AESCTR", el identificador de clave de 16 bytes se cifra con una clave de contenido AES de 16 bytes mediante el modo ECB. Los primeros 8 bytes del búfer se extraen y se codifican en base64.
Para un valor ALGID establecido en "COCKTAIL", realice los pasos siguientes:
Se crea un búfer de 21 bytes.
La clave de contenido se coloca en el búfer y el resto del búfer se rellena con ceros.
Para cinco iteraciones:
a. buffer = SHA-1 (búfer).
Los primeros 7 bytes del búfer se extraen y se codifican en base64.
Una vez realizados estos pasos, los bytes codificados en base64 se usan como suma de comprobación.
6. CUSTOMATTRIBUTES
Un proveedor de servicios puede agregar XML propietario dentro del elemento CUSTOMATTRIBUTES del encabezado PlayReady. Se garantiza que las etiquetas usadas dentro del elemento CUSTOMATTRIBUTES no entren en conflicto con etiquetas futuras definidas por Microsoft.
El código de Microsoft no actúa en ningún XML dentro de este elemento. El back-end del proveedor de servicios o su código del lado cliente son los únicos que normalmente interpretan el valor de este elemento. Por ejemplo, supongamos que un servicio de etiqueta blanca representa los servicios front-end AAA, BBB, CCC. Este servicio puede cifrar su biblioteca de contenido solo una vez (ya que es una operación costosa), pero cuando sirve contenido a un usuario final, puede establecer CUSTOMATTRIBUTES en el nombre del servicio front-end específico al que se suscribe el usuario final. Cuando el usuario final solicita una licencia para ese contenido, esto permite al servicio de etiqueta blanca determinar a qué servicio front-end se suscribe el usuario final, de modo que pueda emitir una licencia diferente.
El tamaño de este campo no debe superar los 1 kilobytes (KB).