Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
1. Introdução
Essa especificação se aplica a qualquer produto final criado com o PlayReady Server SDK, PlayReady Device Porting Kit, Windows, Xbox, Windows Phone e Silverlight.
1.1. Histórico de alterações
| Versão | Alteração |
|---|---|
| 8 de setembro de 2021 | Adicione o atributo LICENSEREQUESTED opcional ao nó PROTECTINFO. |
| 1º de novembro de 2017 | Adicione a seção Requisitos de Sintaxe. Corrigir vários exemplos com ordem de atributo incorreta (os atributos devem estar em ordem alfabética) |
| 12 de julho de 2017 | Adicione a seção Cabeçalho PlayReady 4.3.0.0, com suporte a partir do PlayReady versão 4. Adicione o requisito de sintaxe de que todos os nós XML devem ser explicitamente fechados por uma marcação de fechamento |
| 10 de abril de 2015 | Adicionar a seção Cabeçalho PlayReady 4.2.0.0, com suporte a partir da versão 3 do PlayReady |
| Setembro de 2011 | Adicionar a seção Cabeçalho PlayReady 4.1.0.0, com suporte a partir da versão 2 do PlayReady |
| Agosto de 2008 | Versão inicial que documenta o PlayReady Header 4.0.0.0 suportada na PlayReady versão 1 |
2. Objeto PlayReady (PRO)
O Objeto PlayReady (PRO) contém os campos a seguir.
| Nome do campo | Tipo de Field | Tamanho (bits) | Descrição |
|---|---|---|---|
| Comprimento | DWORD | 32 | O comprimento do objeto PlayReady em bytes. Esse valor não deve exceder 15 quilobytes (KB). |
| Contagem de registros de objeto PlayReady | PALAVRA | 16 | Especifica o número de registros de objeto PlayReady no objeto PlayReady. |
| Registros de objeto PlayReady | Matriz BYTE | Varia | Contém um número variável de registros que contêm informações relacionadas a licenças e aquisição de licenças. |
2.1 Registros de objeto PlayReady
O objeto PlayReady consiste em sub-objetos adicionais chamados Registros de Objetos PlayReady. Os registros de objeto PlayReady contêm os campos a seguir.
| Nome do campo | Tipo de Field | Tamanho (bits) | Descrição |
|---|---|---|---|
| Tipo de registro | PALAVRA | 16 | Especifica o tipo de dados armazenados no Valor do Registro. |
| Comprimento do registro | PALAVRA | 16 | Especifica o tamanho em bytes do valor do registro. |
| Valor do registro | Matriz BYTE | Varia | O conteúdo do objeto depende do valor do Tipo de Registro. |
O campo Tipo de Registro tem um dos seguintes valores.
| Tipo de valor | Descrição |
|---|---|
| 0x0001 | Indica que o registro contém um Cabeçalho PlayReady (PRH). |
| 0x0002 | Reservado. |
| 0x0003 | Indica um ELS (Repositório de Licenças Incorporado). |
2.2. Exemplos de objeto PlayReady
A figura a seguir mostra um arquivo MP4 segmentado com um objeto PlayReady que contém um cabeçalho PlayReady:

A figura a seguir mostra a exibição HEX deste arquivo MP4:

3. Cabeçalho PlayReady (PRH)
O Cabeçalho PlayReady (PRH) é usado por um cliente para localizar ou adquirir uma licença para a peça de conteúdo em que está armazenado. Ele é codificado usando UTF-16.
Matriz de suporte da versão 3.1
| Cabeçalho PlayReady v4.3.0.0 | Cabeçalho PlayReady v4.2.0.0 | Cabeçalho PlayReady v4.1.0.0 | Cabeçalho PlayReady v4.0.0.0 | |
|---|---|---|---|---|
| Clientes baseados no SDK do PlayReady 4.0 (consulte a observação 1) |
✓ | ✓ | ✓ | ✓ |
| Clientes baseados no SDK do PlayReady 3.0 (consulte a observação 2) |
✓ | ✓ | ✓ | |
| Clientes baseados no SDK do PlayReady 2.x (consulte a observação 3) |
✓ | ✓ | ||
| Clientes baseados no SDK do PlayReady 1.x (consulte a observação 4) |
✓ |
Observações:
- Xbox One versão 1709 ou superior são clientes PlayReady 4.X.
- O Windows 10 (todas as versões) e o Xbox One versão 1703 ou inferior são clientes Do PlayReady 3.X. Os dispositivos não Windows mais recentes (por exemplo, Smart TVs) lançados após 2017 são clientes PlayReady 3.X.
- Silverlight e Windows 8, 8.1 são clientes Do PlayReady 2.X. A maioria dos dispositivos não Windows (por exemplo, Smart TVs) lançados entre 2011 e 2017 são clientes Do PlayReady 2.X.
- A maioria dos dispositivos não Windows (por exemplo, Smart TVs) lançados entre 2008 e 2011 são clientes PlayReady 1.X.
3.2. Requisitos de sintaxe
3.2.1. Canonicizado
O XML deve ser canonizado.
3.2.2. Todos os nomes de nós e atributos diferenciam maiúsculas de minúsculas
Suportado
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
Sem suporte
<KID value="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<kid VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </kid>
3.2.3. As marcas de fechamento devem ser explícitas
Todos os nós XML devem ser explicitamente fechados por uma marcação de fechamento, incluindo aqueles dentro do nó CUSTOMATTRIBUTES.
Suportado
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>
Sem suporte
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> <CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </CUSTOMATTRIBUTES>
3.2.4. Atributos do namespace
Todos os atributos de namespace devem aparecer antes dos atributos não namespaces.
Suportado
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
Sem suporte
<WRMHEADER version="4.3.0.0" xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader>
3.2.5. Ordem alfabética
Todos os atributos devem estar em ordem alfabética, incluindo aqueles em nós que estão dentro do nó CUSTOMATTRIBUTES.
Suportado
<KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode BarAttribute="Bar" FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>
Sem suporte
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg==" ALGID="AESCBC"> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo" BarAttribute="Bar"> </MyNode> </CUSTOMATTRIBUTES>
3.3. v4.3.0.0
O PlayReady Header v4.3.0.0 foi introduzido com o PlayReady versão 4.0 em setembro de 2017 para dar suporte a chaves AESCBC em um cabeçalho. Esse suporte permite a criptografia de conteúdo no modo CBC, em particular para os modos de Criptografia Comum 'cbcs'. Ele também aumenta a interoperabilidade de clientes PlayReady com outros sistemas DRM, bem como conteúdo existente.
3.3.1. Diferenças com outras versões
A partir da versão 4.0, os SDKs e clientes do PlayReady podem processar as versões 4.0, 4.1, 4.2 e 4.3 do PlayReady Header. Os SDKs do PlayReady anteriores à versão 4.0 retornarão um erro de "versão sem suporte" quando fornecidos com cabeçalhos v4.3.
O formato de cabeçalho PlayReady v.4.3.0.0 tem as seguintes alterações em comparação com a v4.2.0.0:
- O atributo de versão do elemento WRMHEADER é definido como a cadeia de caracteres "4.3.0.0".
- O atributo ALGID localizado dentro do elemento KID pode estar ausente em uma solicitação de aquisição de licença. A Microsoft recomenda que o atributo ALGID tenha um valor válido no cabeçalho incluído no conteúdo.
- Quando o atributo ALGID está presente em qualquer elemento KID e há mais de um elemento KID no elemento KIDS , todos os elementos KID devem incluir o atributo ALGID e os valores de atributo devem ser os mesmos.
- O atributo ALGID localizado dentro do elemento KID agora pode ter o valor "AESCBC", além de "AESCTR", desde que:
- Quando o atributo ALGID é definido como "AESCBC", o atributo CHECKSUM não deve ser incluído.
3.3.2. Exemplos
Veja a seguir um exemplo de um Cabeçalho PlayReady 4.3.0.0 com chaves 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>
Veja a seguir um exemplo de um Cabeçalho PlayReady 4.3.0.0 com um ALGID ausente:
<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
O Cabeçalho PlayReady v4.3.0.0 tem a seguinte sintaxe:
<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>
As etiquetas estão descritas a seguir.
| Nome da etiqueta | Obrigatório | Descrição |
|---|---|---|
| WRMHEADER | Sim | Elemento mais externo do objeto de cabeçalho. Ele pode conter um elemento DATA e deve conter um atributo de versão. A versão do cabeçalho é "4.3.0.0". Sempre que a Microsoft define novas marcas ou atributos obrigatórios, um novo número de versão é associado a essas marcas ou atributos. Se a versão for maior do que a para a qual o código do cliente foi gravado, o código do cliente deverá falhar, pois implica que o cabeçalho contém marcas obrigatórias que o cliente não entende. Se a versão for menor ou igual à que o código do cliente foi escrito, o código do cliente poderá ignorar com segurança quaisquer marcas ou atributos que ele não entenda. |
| DADOS | Não | Elemento contêiner para dados de cabeçalho, incluindo tags de terceiros. Não mais de um elemento DATA pode ser incluído no elemento WRMHEADER . |
| PROTECTINFO | Não | Especifica zero ou um elemento KIDS . Não é possível incluir mais de um elemento PROTECTINFO no elemento DATA . Opcionalmente, inclui o atributo LICENSEREQUESTED. |
| LICENÇA SOLICITADA | Não | Especifica se a aquisição de licença está solicitando pelo menos uma licença ou não. Deve ser configurado como "verdadeiro" ou "falso" se estiver presente e assume-se que seja configurado como "verdadeiro" se não estiver presente. Esse atributo é ignorado pelas versões do PlayReady antes da 4.5. O aplicativo SDK do PlayReady Server pode ignorar esse atributo; é apenas informativo. |
| GAROTADA | Não | Especifica um ou mais elementos KID que podem ser usados para criar objetos de descriptografia para o conteúdo associado. Um ou nenhum elemento KIDS pode estar presente no nó PROTECTINFO. |
| CABRITO | Não | Contém todos os dados principais de uma determinada licença. Se o nó KIDS estiver presente, um ou mais elemento KID deverá existir sob o nó KIDS. O elemento KID contém os atributos a seguir. ALGID: Opcional. Especifica o algoritmo de criptografia. Pode ser definido como: "AESCTR", "AESCBC" ou "COCKTAIL". CHECKSUM: opcional. Somente para chaves AES-CTR. Contém uma soma de verificação calculada usando o atributo KID VALUE e a chave de conteúdo. Consulte a seção Algoritmo de Soma de Verificação de Chave deste documento para obter detalhes. Se esse nó existir no WRMHeader XML, seu valor de dados deverá estar vazio. VALOR: Obrigatório. Contém um valor GUID de ID de chave codificada em base64. Observe que esse valor GUID (DWORD, WORD, WORD, matriz de 8 BYTES) deve estar na ordem de bytes little endian. |
| LA_URL | Não | Contém a URL do serviço Web de aquisição de licença. Somente URLs absolutas são permitidas. Não mais de um elemento LA_URL pode ser incluído no elemento DATA . Se esse nó existir no WRMHeader XML, seu valor de dados não deverá estar vazio. |
| LUI_URL | Não | Contém a URL de uma página da Web para aquisição não silenciosa de licença. Somente URLs absolutas são permitidas. No máximo um elemento LUI_URL pode ser incluído no elemento DATA. Se esse nó existir no XML do WRMHeader, seu valor não deverá estar vazio. |
| DS_ID | Não | ID de serviço do serviço de domínio. Somente até um elemento DS_ID pode ser incluído no elemento DATA . Se esse nó existir no WRMHeader XML, seu valor de dados não deverá estar vazio. |
| CUSTOMATTRIBUTES | Não | O autor do conteúdo pode adicionar XML personalizado dentro desse elemento. O código da Microsoft não atua em nenhum dado contido nesse elemento. Não é possível incluir mais de um elemento CUSTOMATTRIBUTES no elemento DATA . Se esse nó existir no WRMHeader XML, seu valor de dados não deverá estar vazio. |
| DECRYPTORSETUP | Não | Essa tag pode conter apenas o valor "ONDEMAND". Quando essa tag está presente no nó DATA e seu valor é definido como "ONDEMAND", isso indica que um aplicativo não deve esperar que a cadeia completa de licenças para o conteúdo esteja disponível para aquisição ou já esteja disponível no computador cliente, antes de configurar o grafo de mídia. Se essa marca não estiver definida, indica que um aplicativo pode impor a licença a ser adquirida ou já estar presente no computador cliente, antes de configurar o grafo de mídia. Não é possível incluir mais de um elemento DECRYPTORSETUP no elemento DATA . |
3.4. v4.2.0.0
O PlayReady Header v4.2.0.0 foi introduzido com o PlayReady versão 3.0 em abril de 2015 para permitir vários KIDs em um único cabeçalho. Isso significa que várias chaves podem ser usadas para criptografar um único ativo, por exemplo, quando as faixas de áudio devem ser criptografadas com uma chave diferente das faixas de vídeo.
3.4.1. Diferenças com outras versões
Os SDKs do PlayReady 3.0 e os clientes posteriores podem processar as versões v4.0, v4.1 e v4.2 playReady Header. Os SDKs do PlayReady anteriores retornam um erro de "versão não suportada" quando fornecidos com cabeçalhos v4.2. Ao usar o cabeçalho v4.2, o cliente precisa saber qual versão do Servidor ele está usando por meio de um mecanismo personalizado e específico do aplicativo. Os SDKs do PlayReady não fornecem nenhuma maneira nativa de obter essas informações de versão.
O formato de cabeçalho do PlayReady v.4.2.0.0 tem as seguintes alterações em comparação com a v4.1.0.0:
- O atributo de versão do elemento WRMHEADER é definido como a cadeia de caracteres "4.2.0.0".
- O elemento KID localizado dentro do elemento PROTECTINFO foi renomeado para KIDS e ainda é opcional.
- Vários elementos KID estão localizados dentro do elemento KIDS .
3.4.2. Exemplo
Cabeçalho PlayReady 4.2.0.0 com duas chaves 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
O Cabeçalho PlayReady v4.2.0.0 tem a seguinte sintaxe:
<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>
As etiquetas são descritas abaixo.
| Nome da etiqueta | Obrigatório | Descrição |
|---|---|---|
| WRMHEADER | Sim | Elemento mais externo do objeto de cabeçalho. Ele pode conter um elemento DATA e deve conter um atributo de versão. A versão do cabeçalho é "4.2.0.0". Sempre que a Microsoft define novas marcas ou atributos obrigatórios, um novo número de versão é associado a essas marcas ou atributos. Se a versão for maior do que a para a qual o código do cliente foi gravado, o código do cliente deverá falhar, pois implica que o cabeçalho contém marcas obrigatórias que o cliente não entende. Se a versão for menor ou igual à que o código do cliente foi escrito, o código do cliente poderá ignorar com segurança quaisquer marcas ou atributos que ele não entenda. |
| DADOS | Não | Elemento contêiner para dados de cabeçalho, incluindo tags de terceiros. Somente até um elemento DATA pode ser incluído no elemento WRMHEADER . |
| PROTECTINFO | Não | Especifica zero ou um elemento KIDS . Não é possível incluir mais de um elemento PROTECTINFO no elemento DATA . |
| GAROTADA | Não | Especifica um ou mais elementos KID que podem ser usados para criar objetos de descriptografia para o conteúdo associado. Um ou nenhum elemento KIDS pode estar presente no nó PROTECTINFO. |
| CABRITO | Não | Contém todos os dados principais de uma determinada licença. Se o nó KIDS estiver presente, um ou mais elementos KID deverão existir no nó KIDS . O elemento KID contém os atributos a seguir. ALGID: Obrigatório. Especifica o algoritmo de criptografia. Deve ser definido como: AESCTR ou COCKTAIL CHECKSUM: Opcional. Contém uma soma de verificação calculada usando o KID VALUE e a chave de conteúdo. Consulte a seção Algoritmo de Soma de Verificação de Chave deste documento para obter detalhes. Se esse nó existir no WRMHeader XML, seu valor de dados deverá estar vazio. VALUE: obrigatório. Contém um valor GUID de ID de chave codificada em base64. Observe que esse valor GUID (DWORD, WORD, WORD, matriz de 8 BYTES) deve estar na ordem de bytes little endian. |
| LA_URL | Não | Contém a URL do serviço Web de aquisição de licença. Somente URLs absolutas são permitidas. Não mais de um elemento LA_URL pode ser incluído no elemento DATA . Se esse nó existir no WRMHeader XML, seu valor de dados não deverá estar vazio. |
| LUI_URL | Não | Contém a URL para uma página da Web de aquisição de licença não silenciosa. Somente URLs absolutas são permitidas. No máximo um elemento LUI_URL pode ser incluído no elemento DATA. Se esse nó existir no XML do WRMHeader, seu valor de conteúdo não deverá estar vazio. |
| DS_ID | Não | ID de serviço do serviço de domínio. Não mais de um elemento DS_ID pode ser incluído no elemento DATA . Se esse nó existir no WRMHeader XML, seu valor de dados não deverá estar vazio. |
| CUSTOMATTRIBUTES | Não | O autor do conteúdo pode adicionar XML arbitrário dentro desse elemento. O código da Microsoft não atua em nenhum dado contido nesse elemento. Não é possível incluir mais de um elemento CUSTOMATTRIBUTES no elemento DATA . Se esse nó existir no WRMHeader XML, seu valor de dados não deverá estar vazio. |
| CONFIGURAÇÃO DO DECRIPTADOR | Não | Esta etiqueta pode conter apenas o valor ONDEMAND. Quando essa tag está presente no nó DATA e seu valor é definido como "ONDEMAND", ele indica para um aplicativo que não deve esperar que a cadeia completa de licenças para o conteúdo esteja disponível ou já presente na máquina cliente antes de configurar o grafo de mídia. Se essa marca não estiver definida, indica que um aplicativo pode impor a licença a ser adquirida ou já estar presente no computador cliente, antes de configurar o grafo de mídia. Não é possível incluir mais de um elemento DECRYPTORSETUP no elemento DATA . |
3.5. v4.1.0.0
O PlayReady Header v4.1.0.0 foi introduzido com o PlayReady versão 2.0 em setembro de 2011 para dar suporte a fluxos lineares ao vivo com licenças folha escalonáveis inseridas no fluxo. Esse tipo de fluxo requer que os clientes associem uma licença raiz escalonável sem conhecimento da chave de criptografia de conteúdo que será usada no descriptografador.
3.5.1. Diferenças com outras versões
Os SDKs do PlayReady 2.0 e os clientes posteriores podem processar as versões v4.0 e v4.1 playReady Header. Os SDKs anteriores do PlayReady retornam um erro de "versão sem suporte" quando são fornecidos com cabeçalhos v4.1.
O formato de cabeçalho do PlayReady v.4.1.0.0 tem as seguintes alterações em comparação com a v4.0.0.0:
- O atributo de versão do elemento WRMHEADER é definido como a cadeia de caracteres "4.1.0.0".
- O elemento DATA contém um elemento DECRYPTORSETUP opcional.
- O elemento KID está localizado dentro do elemento PROTECTINFO e é opcional em vez de necessário.
- O elemento KID contém os atributos ALGID (obrigatório), CHECKSUM (opcional) e VALUE (obrigatório).
- O elemento KEYLEN foi removido. O atributo KEYLEN foi usado anteriormente para desambiguar licenças de coquetéis com chaves de comprimento diferentes. O cabeçalho v4.1 interromperá a capacidade de que qualquer coisa seja suportada, exceto chaves de coquetel de 8 bytes. Se você usar chaves de coquetel que não sejam de 8 bytes, deverá usar cabeçalhos v4.0.
- Os elementos ALGID e CHECKSUM foram removidos desde que seus dados estão contidos em atributos do elemento KID .
3.5.2. Formato
O Cabeçalho PlayReady v4.1.0.0 tem a seguinte sintaxe:
<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>
As etiquetas estão descritas a seguir.
| Nome da etiqueta | Obrigatório | Descrição |
|---|---|---|
| WRMHEADER | Sim | Elemento mais externo do objeto de cabeçalho. Ele pode conter um elemento DATA e deve conter um atributo de versão. A versão do cabeçalho é "4.1.0.0". Sempre que a Microsoft define novas marcas ou atributos obrigatórios, um novo número de versão é associado a essas marcas ou atributos. Se a versão for maior do que a para a qual o código do cliente foi gravado, o código do cliente deverá falhar, pois implica que o cabeçalho contém marcas obrigatórias que o cliente não entende. Se a versão for menor ou igual à que o código do cliente foi escrito, o código do cliente poderá ignorar com segurança quaisquer marcas ou atributos que ele não entenda. |
| DADOS | Não | Elemento contêiner para dados de cabeçalho, incluindo tags de terceiros. Não mais de um elemento DATA pode ser incluído no elemento WRMHEADER . |
| PROTECTINFO | Não | Especifica zero ou um elemento KID que pode ser usado para criar objetos de descriptografia para o conteúdo associado. Não é possível incluir mais de um elemento PROTECTINFO no elemento DATA . |
| CABRITO | Não | Contém todos os dados principais de uma determinada licença. Um ou nenhum elemento KID pode estar presente no nó PROTECTINFO. O elemento KID contém os atributos a seguir. VALOR: Obrigatório. Contém um valor GUID de ID de chave codificada em base64. Observe que este valor GUID (DWORD, WORD, WORD, matriz de 8 BYTES) deve estar na ordem de bytes little endian. ALGID: obrigatório. Especifica o algoritmo de criptografia. Deve ser definido como: "AESCTR" ou "COCKTAIL" CHECKSUM: Opcional. Contém uma soma de verificação calculada usando o KID VALUE e a chave de conteúdo. Consulte a seção Algoritmo de Soma de Verificação de Chave deste documento para obter detalhes. Se esse nó existir no WRMHeader XML, seu valor de dados deverá estar vazio. |
| LA_URL | Não | Contém a URL do serviço Web de aquisição de licença. Somente URLs absolutas são permitidas. Não mais de um elemento LA_URL pode ser incluído no elemento DATA . Se esse nó existir no WRMHeader XML, seu valor de dados não deverá estar vazio. |
| LUI_URL | Não | Contém a URL para uma página da Web de aquisição de licença não silenciosa. Somente URLs absolutas são permitidas. No máximo um elemento LUI_URL pode ser incluído no elemento DATA. Se esse nó existir no XML do WRMHeader, seu valor de conteúdo não deverá estar vazio. |
| DS_ID | Não | ID de serviço do serviço de domínio. Não mais de um elemento DS_ID pode ser incluído no elemento DATA . Se esse nó existir no WRMHeader XML, seu valor de dados não deverá estar vazio. |
| CUSTOMATTRIBUTES | Não | O autor do conteúdo pode adicionar XML arbitrário dentro desse elemento. O código da Microsoft não atua em nenhum dado contido nesse elemento. Somente até um elemento CUSTOMATTRIBUTES pode ser incluído no elemento DATA . Se esse nó existir no WRMHeader XML, seu valor de dados não deverá estar vazio. |
| CONFIGURAÇÃO DO DECRIPTADOR | Não | Esta etiqueta pode conter apenas o valor ONDEMAND. Quando essa marca presente no nó DATA e seu valor é definido como "ONDEMAND", indica a um aplicativo que ele não deve esperar que a cadeia de licenças completa para o conteúdo esteja disponível para aquisição ou já esteja presente no computador cliente, antes de configurar o grafo de mídia. Se essa marca não estiver definida, indica que um aplicativo pode impor a licença a ser adquirida ou já estar presente no computador cliente, antes de configurar o grafo de mídia. Somente até um elemento DECRYPTORSETUP pode ser incluído no elemento DATA . |
Notas para v4.1:
- Todas as tags XML e atributos no Cabeçalho PlayReady são definidos pela Microsoft. A única exceção é o conteúdo do elemento CUSTOMATTRIBUTES . Os desenvolvedores de aplicativos para PC PlayReady não devem adicionar marcas personalizadas fora do elemento CUSTOMATTRIBUTES .
- O cabeçalho PlayReady deve respeitar as especificações XML canônicas do W3C v1.1.
- O cabeçalho PlayReady não contém uma marcação
?XMLde nível superior necessária em XML bem formado. - É recomendável que o tamanho desse campo não exceda 1 KB.
3.6. v4.0.0.0
O PlayReady Header v4.0.0.0 foi introduzido com o PlayReady versão 1.0 em 2008 e permite que uma única chave AESCTR dê suporte a conteúdo criptografado do AES ou uma chave COCKTAIL para dar suporte ao conteúdo criptografado WMDRM.
3.6.1. Exemplos
Cabeçalho 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 em Base64 que contém um cabeçalho PlayReady 4.0.0.0
XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AcQA1AEgAZwBDAFQAagA0ADAAawBHAGUATgBWAGgAVABIADkARwBlAHgAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgB3ACsATwBaAFYAcgA4AHYAegByAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADcAMAA1AC4AMQA5ADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=
3.6.2. Formato
O Cabeçalho do PlayReady v4.0.0.0 tem a seguinte sintaxe:
<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>
A tabela a seguir descreve as diferentes etiquetas.
| Nome da etiqueta | Obrigatório | Descrição |
|---|---|---|
| WRMHEADER | Sim | Elemento mais externo do objeto de cabeçalho. Ele pode conter um elemento DATA e um atributo de versão. A versão do cabeçalho é "4.0.0.0". Semântica para empacotador:sempre que a Microsoft define novas marcas ou atributos obrigatórios, um novo número de versão é associado a essas marcas ou atributos. A versão do Cabeçalho PlayReady deve ser definida como a mais alta das versões das marcas e atributos obrigatórios presentes no cabeçalho. Semântica para Cliente: se a versão for maior do que a para a qual o código do cliente foi escrito, o código do cliente deve falhar porque implica que o cabeçalho contém marcas obrigatórias que o cliente não entende. Se a versão for menor ou igual à para a qual o código do cliente foi escrito, o código do cliente poderá ignorar com segurança quaisquer tags ou atributos que não entender. |
| DADOS | Sim | Elemento contêiner para dados de cabeçalho, incluindo tags de terceiros. |
| PROTECTINFO | Sim | Especifica o tipo de criptografia usando os elementos filho KEYLEN e ALGID . |
| KEYLEN | Sim | Especifica o tamanho da chave de conteúdo. Deve ser definido como 16 se ALGID estiver definido como "AESCTR" e 7 se ALGID estiver definido como "COCKTAIL". |
| ALGID | Sim | Especifica o algoritmo de criptografia. Deve ser definido como o seguinte valor: AESCTR: corresponde ao algoritmo AES no modo de contador. COCKTAIL: corresponde ao algoritmo Cocktail. |
| CABRITO | Sim | Contém um valor GUID de ID de chave codificada em base64. Observe que esse valor GUID (DWORD, WORD, WORD, matriz de 8 BYTES) deve estar na ordem de bytes little endian. |
| CHECKSUM | Não | Contém soma de verificação calculada usando o KID VALUE e a chave de conteúdo. Consulte a seção Algoritmo de Soma de Verificação de Chave para obter detalhes. As versões anteriores do PlayReady trataram esse campo como necessário, portanto, ele deve ser incluído em qualquer cabeçalho que será consumido por uma versão anterior do PlayReady. |
| LA_URL | Não | Contém a URL do serviço Web de aquisição de licença. Somente URLs absolutas são permitidas. |
| LUI_URL | Não | Contém a URL para uma página da Web de aquisição de licença não silenciosa. Somente URLs absolutas são permitidas. |
| DS_ID | Não | ID de serviço do serviço de domínio. |
| CUSTOMATTRIBUTES | Não | O autor do conteúdo pode adicionar XML arbitrário dentro desse elemento. O código da Microsoft não atua em nenhum dado contido nesse elemento. |
Notas para v4.0:
- Todas as tags XML e atributos do Cabeçalho PlayReady são definidos pela Microsoft. A única exceção é o conteúdo do elemento CUSTOMATTRIBUTES . Os desenvolvedores de aplicativos para PC PlayReady não devem adicionar marcas personalizadas fora do elemento CUSTOMATTRIBUTES , pois isso pode entrar em conflito com marcas futuras definidas pela Microsoft.
- A ordem dos elementos filho dentro de um elemento de contêiner não é relevante.
- Observe que o cabeçalho PlayReady não contém uma marcação
?XMLde nível superior necessária em XML bem formado. - É recomendável que o tamanho desse campo não exceda 1 KB.
- CHECKSUM é exigido pelo SDK do PlayReady Server até a versão 1.2. Desde a versão 1.5, o SDK do PlayReady Server trata o CHECKSUM como opcional. O PlayReady Porting Kit 1.2 funciona imediatamente sem configurações adicionais e requer o CHECKSUM. O PlayReady Porting Kit 2.0 trata o CHECKSUM como opcional.
4. ELS (Repositório de Licenças Incorporado)
É uma boa prática adicionar um Repositório de Licenças Inserido vazio ao objeto PlayReady nas seguintes condições:
- O Objeto PlayReady deve ser inserido em um arquivo de conteúdo.
- O conteúdo pode ser usado em um contexto de domínios PlayReady com licenças incorporadas.
Isso permite que um cliente PlayReady insira ainda mais uma licença associada ao domínio no Objeto PlayReady simplesmente preenchendo o Repositório de Licenças Incorporado existente e salva o esforço de ter que redirecionar o arquivo inteiro com um novo Objeto PlayReady de um tamanho maior do que o da inicial.
Observação
Não inclua um Repositório de Licenças Inserido vazio em um objeto PlayReady, destinado a ser inserido como uma cadeia de caracteres base-64 em um manifesto do cliente Smooth Streaming.
Observação
O tamanho recomendado é 10 KB.
5. Algoritmo de soma de verificação de chave
O algoritmo de soma de verificação no Cabeçalho PlayReady destina-se a proteger contra chaves incompatíveis. Nos primeiros dias do DRM, as músicas eram criptografadas com chaves rotuladas incorretamente. Isso resultou na reprodução de ruído branco quando as músicas foram decodificadas. Caso as músicas fossem reproduzidas com um volume alto o suficiente, o equipamento de reprodução seria destruído. Com a soma de verificação, pode-se verificar se a chave de conteúdo é a mesma chave que foi usada para criptografar o arquivo. O algoritmo funciona da seguinte maneira:
Para um valor ALGID definido como "AESCBC", não há nenhum algoritmo de soma de verificação de chave definido. O atributo CHECKSUM deve ser omitido.
Para um valor ALGID definido como "AESCTR", a ID da chave de 16 bytes é criptografada com uma chave de conteúdo AES de 16 bytes usando o modo ECB. Os primeiros 8 bytes do buffer são extraídos e codificados em base64.
Para um valor ALGID definido como "COCKTAIL", execute as seguintes etapas:
Um buffer de 21 bytes é criado.
A chave de conteúdo é colocada no buffer e o restante do buffer é preenchido com zeros.
Para cinco iterações:
a. buffer = SHA-1 (buffer).
Os primeiros 7 bytes do buffer são extraídos e codificados em base64.
Depois que essas etapas são executadas, os bytes codificados em base64 são usados como a soma de verificação.
6. CUSTOMATTRIBUTES
Um provedor de serviços pode adicionar XML proprietário dentro do elemento CUSTOMATTRIBUTES do Cabeçalho PlayReady. Todas as marcas usadas dentro do elemento CUSTOMATTRIBUTES têm a garantia de não entrar em conflito com marcas futuras definidas pela Microsoft.
O código da Microsoft não atua em nenhum XML dentro desse elemento. O back-end do provedor de serviços ou o código do lado do cliente são os únicos que normalmente interpretam o valor desse elemento. Por exemplo, digamos que um serviço de rótulo branco represente os serviços de front-end AAA, BBB e CCC. Esse serviço pode criptografar sua biblioteca de conteúdo apenas uma vez (já que essa é uma operação cara), mas quando ele serve conteúdo para um usuário final, ele pode definir CUSTOMATTRIBUTES como o nome do serviço front-end específico ao qual o usuário final assina. Quando o usuário final solicita uma licença para esse conteúdo, isso permite que o serviço de rótulo branco determine a qual serviço front-end o usuário final assina, para que ele possa emitir uma licença diferente.
O tamanho desse campo não deve exceder 1 quilobyte (KB).