Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
1. Introdução
Esta especificação aplica-se 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 opcional LICENSEREQUESTED ao nó PROTECTINFO. |
| Novembro 1, 2017 | Adicione a seção Requisitos de sintaxe. Corrigir exemplos de múltiplos com ordem de atributos incorreta (os atributos devem estar em ordem alfabética) |
| Julho 12, 2017 | Adicionar a seção Header 4.3.0.0 do PlayReady, que é suportada a partir da versão 4 do PlayReady. Adicionar o requisito de sintaxe de que todos os nós XML devem ser explicitamente fechados por uma etiqueta de encerramento |
| Abril 10, 2015 | Adicionar a seção do PlayReady Header 4.2.0.0, suportada a partir da versão 3 do PlayReady |
| Setembro, 2011 | Adicionar a Secção Header 4.1.0.0 do PlayReady, suportada a partir da Versão 2 do PlayReady |
| agosto de 2008 | Versão inicial documentando o PlayReady Header 4.0.0.0 suportado no PlayReady versão 1 |
2. Objeto PlayReady (PRO)
O objeto PlayReady (PRO) contém os seguintes campos.
| Nome do campo | Tipo de campo | Tamanho (bits) | Descrição |
|---|---|---|---|
| Duração | Tipo de dados DWORD | 32 | O comprimento do objeto PlayReady em bytes. Este valor não deve exceder 15 kilobytes (KB). |
| Contagem de registros de objetos PlayReady | PALAVRA | 16 | Especifica o número de registos 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 objetos PlayReady
O objeto PlayReady consiste em subobjetos adicionais chamados PlayReady Object Records. Os registros de objeto PlayReady contêm os seguintes campos.
| Nome do campo | Tipo de campo | Tamanho (bits) | Descrição |
|---|---|---|---|
| Tipo de Registo | PALAVRA | 16 | Especifica o tipo de dados armazenados no Valor de Registro. |
| Duração do Registo | PALAVRA | 16 | Especifica o tamanho em bytes do Valor de Registro. |
| Valor do Registo | Matriz BYTE | Varia | O conteúdo do objeto depende do valor de 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 Armazenamento de Licenças Incorporado (ELS). |
2.2. Exemplos de objetos 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 visualizaçã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 parte do conteúdo em que está armazenado. É codificado usando UTF-16.
3.1 Matriz de suporte de versão
| 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 nota 1) |
✓ | ✓ | ✓ | ✓ |
|
Clientes baseados no SDK do PlayReady 3.0 (consulte a nota 2) |
✓ | ✓ | ✓ | |
|
Clientes baseados no SDK PlayReady 2.x (consulte a nota 3) |
✓ | ✓ | ||
|
Clientes baseados no SDK PlayReady 1.x (consulte a nota 4) |
✓ |
Observações:
- Versão 1709 ou superior da Xbox One é cliente PlayReady 4.X.
- O Windows 10 (todas as versões) e a versão 1703 ou inferior da Xbox One são Clientes 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.
- O Silverlight e o Windows 8, 8.1 são clientes PlayReady 2.X. A maioria dos dispositivos não Windows (por exemplo, Smart TVs) lançados entre 2011 e 2017 são clientes 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. Canonicalizado
O XML deve ser canonicalizado.
3.2.2. Os nomes de nós e atributos são sensíveis a maiúsculas e minúsculas
Suportado
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
Não suportado
<KID value="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<kid VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </kid>
3.2.3. As tags de fechamento devem ser explícitas
Todos os nós XML devem ser explicitamente fechados por uma marca de fechamento, incluindo aqueles em nós dentro do nó CUSTOMATTRIBUTES.
Suportado
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>
Não suportado
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> <CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </CUSTOMATTRIBUTES>
3.2.4. Atributos de namespace
Todos os atributos de namespace devem aparecer antes dos atributos que não são namespaces.
Suportado
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
Não suportado
<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 presentes em nós dentro do nó CUSTOMATTRIBUTES.
Suportado
<KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode BarAttribute="Bar" FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>
Não suportado
<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 a versão 4.0 do PlayReady em setembro de 2017 para dar suporte a chaves AESCBC num cabeçalho. Este suporte permite a encriptação de conteúdos em modo CBC, em particular para os modos de encriptação comum 'cbcs'. Também aumenta a interoperabilidade dos clientes PlayReady com outros sistemas DRM, bem como o conteúdo existente.
3.3.1. Diferenças com outras versões
A partir da versão 4.0, os SDKs e Clientes PlayReady são capazes de processar as versões 4.0, 4.1, 4.2 e 4.3 do PlayReady Header. Os SDKs PlayReady anteriores à versão 4.0 retornarão um erro de "versão não suportada" 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 v4.2.0.0:
- O atributo version 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 do 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
Segue-se um exemplo de um cabeçalho PlayReady com chaves AESCBC, versão 4.3.0.0:
<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>
Segue-se um exemplo de um cabeçalho PlayReady 4.3.0.0 com um ALGID em 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
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 tags são descritas abaixo.
| Nome da etiqueta | Obrigatório | Descrição |
|---|---|---|
| WRMHEADER | Sim | Elemento mais externo do objeto header. Ele pode conter um elemento DATA e deve conter um atributo version. A versão para o 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 aquela 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 tags obrigatórias que o cliente não entende. Se a versão for menor ou igual àquela 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 ele não entenda. |
| DADOS | Não | Elemento de contêiner para dados de cabeçalho, incluindo tags de terceiros. Não mais do que um elemento DATA pode ser incluído no elemento WRMHEADER . |
| PROTECTINFO | Não | Especifica zero ou um elemento KIDS . Não pode ser incluído mais do que um elemento PROTECTINFO no elemento DATA . Opcionalmente, inclui o atributo LICENSEREQUESTED. |
| LICENÇASOLICITADA | Não | Especifica se a aquisição de licença está solicitando pelo menos uma licença ou não. Deve ser definido como "true" ou "false" se presente e é assumido como sendo definido como "true" se não estiver presente. Este atributo é ignorado pelas versões PlayReady anteriores à 4.5. O aplicativo PlayReady Server SDK é livre para ignorar esse atributo; é apenas informativo. |
| CRIANÇAS | Não | Especifica um ou mais elementos KID que podem ser usados para criar objetos desencriptadores para o conteúdo associado. Podem existir um elemento ou nenhum KIDS no nó PROTECTINFO. |
| Criança | Não | Contém todos os dados chave para uma determinada licença. Se o nó KIDS estiver presente, um ou mais elementos KID deverão existir sob o nó KIDS . O elemento KID contém os seguintes atributos. ALGID: Opcional. Especifica o algoritmo de criptografia. Pode ser definido como: "AESCTR", "AESCBC" ou "COCKTAIL". CHECKSUM: Opcional. Apenas para chaves AESCTR. 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 este nó existir no XML WRMHeader, o seu valor de dados deverá estar vazio. VALOR: Obrigatório. Contém um valor GUID do ID da chave codificado em base64. Observe que esse valor GUID (DWORD, WORD, WORD, matriz de 8 bytes) deve ser little endian byte order. |
| LA_URL | Não | Contém a URL do serviço Web de aquisição de licença. Apenas URLs absolutos são permitidos. Não pode ser incluído mais do que um elemento LA_URL no elemento DATA . Se esse nó existir no XML WRMHeader, seu valor de dados não deverá estar vazio. |
| LUI_URL | Não | Contém o URL para uma página Web de aquisição de licença não silenciosa. Apenas URLs absolutos são permitidos. Não pode ser incluído mais do que um elemento LUI_URL no elemento DATA . Se esse nó existir no XML WRMHeader, seu valor de dados não deverá estar vazio. |
| DS_ID | Não | ID de serviço para o serviço de domínio. Apenas um elemento DS_ID pode ser incluído no elemento DATA . Se esse nó existir no XML WRMHeader, seu valor de dados não deverá estar vazio. |
| ATRIBUTOS PERSONALIZADOS | 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 pode ser incluído mais do que um elemento CUSTOMATTRIBUTES no elemento DATA . Se esse nó existir no XML WRMHeader, seu valor de dados não deverá estar vazio. |
| DECRYPTORSETUP | Não | Esta tag só pode conter o valor "ONDEMAND". Quando essa tag está presente no nó DATA e seu valor é definido como "ONDEMAND", ela indica a um aplicativo que ele não deve esperar que toda a cadeia de licenças do conteúdo esteja disponível para aquisição ou já presente na máquina cliente antes de configurar o gráfico de mídia. Se essa tag não estiver definida, ela indica que um aplicativo pode impor a licença a ser adquirida, ou já presente na máquina cliente, antes de configurar o gráfico de mídia. Não mais do que um elemento DECRYPTORSETUP pode ser incluído no elemento DATA . |
3.4. v4.2.0.0
PlayReady Header v4.2.0.0 foi introduzido com 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 posteriores e os Clientes podem processar as versões de cabeçalho PlayReady v4.0, v4.1 e v4.2. SDKs 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 está usando por meio de um mecanismo personalizado específico do aplicativo. Os SDKs PlayReady não fornecem nenhuma maneira nativa de obter essas informações de versão.
O formato de cabeçalho PlayReady v.4.2.0.0 tem as seguintes alterações em comparação com v4.1.0.0:
- O atributo version 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
PlayReady Header 4.2.0.0 com duas 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
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 tags são descritas abaixo.
| Nome da etiqueta | Obrigatório | Descrição |
|---|---|---|
| WRMHEADER | Sim | Elemento mais externo do objeto header. Ele pode conter um elemento DATA e deve conter um atributo version. A versão para o 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 aquela 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 tags obrigatórias que o cliente não entende. Se a versão for menor ou igual àquela 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 ele não entenda. |
| DADOS | Não | Elemento de contêiner para dados de cabeçalho, incluindo tags de terceiros. Apenas até um elemento DATA pode ser incluído no elemento WRMHEADER . |
| PROTECTINFO | Não | Especifica zero ou um elemento KIDS . Não pode ser incluído mais do que um elemento PROTECTINFO no elemento DATA . |
| CRIANÇAS | Não | Especifica um ou mais elementos KID que podem ser usados para criar objetos desencriptadores para o conteúdo associado. Um ou zero elementos KIDS podem existir no nó PROTECTINFO . |
| Criança | Não | Contém todos os dados chave para uma determinada licença. Se o nó KIDS estiver presente, um ou mais elementos KID deverão existir sob o nó KIDS . O elemento KID contém os seguintes atributos. 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 valor KID e a chave de conteúdo. Consulte a seção Algoritmo de soma de verificação de chave deste documento para obter detalhes. Se este nó existir no WRMHeader XML, o seu valor de dados deve estar vazio. VALOR: Obrigatório. Contém um valor GUID de ID de chave codificado em base64. Observe que esse valor GUID (DWORD, WORD, WORD, matriz de 8 bytes) deve ser little endian byte order. |
| LA_URL | Não | Contém a URL do serviço Web de aquisição de licença. Apenas URLs absolutos são permitidos. Não pode ser incluído mais do que um elemento LA_URL no elemento DATA . Se esse nó existir no XML WRMHeader, seu valor de dados não deverá estar vazio. |
| LUI_URL | Não | Contém o URL para uma página Web de aquisição de licença não silenciosa. Apenas URLs absolutos são permitidos. Não pode ser incluído mais do que um elemento LUI_URL no elemento DATA . Se esse nó existir no XML WRMHeader, seu valor de dados não deverá estar vazio. |
| DS_ID | Não | ID de serviço para o serviço de domínio. Não pode ser incluído mais do que um elemento DS_ID no elemento DATA . Se esse nó existir no XML WRMHeader, seu valor de dados não deverá estar vazio. |
| ATRIBUTOS PERSONALIZADOS | 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 pode ser incluído mais do que um elemento CUSTOMATTRIBUTES no elemento DATA . Se esse nó existir no XML WRMHeader, seu valor de dados não deverá estar vazio. |
| DECRYPTORSETUP | Não | Esta tag só pode conter o valor "ONDEMAND". Quando essa tag está presente no nó DATA e seu valor é definido como "ONDEMAND", ela indica a um aplicativo que ele não deve esperar que toda a cadeia de licenças do conteúdo esteja disponível para aquisição ou já presente na máquina cliente antes de configurar o gráfico de mídia. Se essa tag não estiver definida, ela indica que um aplicativo pode impor a licença a ser adquirida, ou já presente na máquina cliente, antes de configurar o gráfico de mídia. Não mais do que um elemento DECRYPTORSETUP pode ser incluído no elemento DATA . |
3.5. v4.1.0.0
PlayReady Header v4.1.0.0 foi introduzido com a versão 2.0 do PlayReady em setembro de 2011 para dar suporte a transmissões lineares ao vivo, com licenças subsidiárias escaláveis incorporadas no fluxo. Esse tipo de fluxo requer que os clientes vinculem uma licença raiz escalável sem conhecimento da chave de criptografia de conteúdo que será usada no desencriptador.
3.5.1. Diferenças com outras versões
As SDKs PlayReady 2.0 e os Clientes subsequentes conseguem processar as versões de cabeçalho PlayReady v4.0 e v4.1. SDKs PlayReady anteriores retornam um erro de "versão não suportada" quando fornecidos com cabeçalhos v4.1.
O formato de cabeçalho PlayReady v.4.1.0.0 tem as seguintes alterações em comparação com v4.0.0.0:
- O atributo version 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 obrigató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 anteriormente usado para desambiguar licenças de cocktail com chaves de comprimentos diferentes. O cabeçalho v4.1 quebrará a capacidade de suportar qualquer coisa, exceto teclas de coquetel de 8 bytes. Se você usar teclas de coquetel que não são de 8 bytes, deverá usar cabeçalhos v4.0.
- Os elementos ALGID e CHECKSUM foram removidos, uma vez 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 tags são descritas abaixo.
| Nome da etiqueta | Obrigatório | Descrição |
|---|---|---|
| WRMHEADER | Sim | Elemento mais externo do objeto header. Ele pode conter um elemento DATA e deve conter um atributo version. A versão para o 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 aquela 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 tags obrigatórias que o cliente não entende. Se a versão for menor ou igual àquela 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 ele não entenda. |
| DADOS | Não | Elemento de contêiner para dados de cabeçalho, incluindo tags de terceiros. Não mais do que um elemento DATA pode ser incluído no elemento WRMHEADER . |
| PROTECTINFO | Não | Especifica zero ou um elemento KID que podem ser usados para criar objetos desencriptadores para o conteúdo associado. Não pode ser incluído mais do que um elemento PROTECTINFO no elemento DATA . |
| Criança | Não | Contém todos os dados chave para uma determinada licença. Pode existir um ou nenhum elemento KID no nó PROTECTINFO. O elemento KID contém os seguintes atributos. VALOR: Obrigatório. Contém um valor GUID de ID de chave codificado em base64. Observe que esse valor GUID (DWORD, WORD, WORD, matriz de 8 bytes) deve ser little endian byte order. 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 valor KID 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 XML WRMHeader, 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. Apenas URLs absolutos são permitidos. Não pode ser incluído mais do que um elemento LA_URL no elemento DATA . Se esse nó existir no XML WRMHeader, seu valor de dados não deverá estar vazio. |
| LUI_URL | Não | Contém o URL para uma página Web de aquisição de licença não silenciosa. Apenas URLs absolutos são permitidos. Não pode ser incluído mais do que um elemento LUI_URL no elemento DATA . Se esse nó existir no XML WRMHeader, seu valor de dados não deverá estar vazio. |
| DS_ID | Não | ID de serviço para o serviço de domínio. Não pode ser incluído mais do que um elemento DS_ID no elemento DATA . Se esse nó existir no XML WRMHeader, seu valor de dados não deverá estar vazio. |
| ATRIBUTOS PERSONALIZADOS | 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. Apenas até um elemento CUSTOMATTRIBUTES pode ser incluído no elemento DATA . Se esse nó existir no XML WRMHeader, seu valor de dados não deverá estar vazio. |
| DECRYPTORSETUP | Não | Esta tag só pode conter o valor "ONDEMAND". Quando essa tag presente no nó DATA e seu valor é definido como "ONDEMAND", ela indica a um aplicativo que ele não deve esperar que a cadeia de licença completa para o conteúdo esteja disponível para aquisição, ou já presente na máquina cliente, antes de configurar o gráfico de mídia. Se essa tag não estiver definida, ela indica que um aplicativo pode impor a licença a ser adquirida, ou já presente na máquina cliente, antes de configurar o gráfico de mídia. Apenas até um elemento DECRYPTORSETUP pode ser incluído no elemento DATA . |
Notas para v4.1:
- Todas as marcas 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 PlayReady PC não devem adicionar nenhuma tag personalizada fora do elemento CUSTOMATTRIBUTES .
- O cabeçalho PlayReady deve obedecer às especificações W3C Canonical XML v1.1.
- O cabeçalho PlayReady não contém uma tag
?XMLde nível superior, que é necessária em XML bem formado. - Recomenda-se que o tamanho deste campo não exceda 1 KB.
3.6. v4.0.0.0
PlayReady Header v4.0.0.0 foi introduzido com PlayReady versão 1.0 em 2008 e permite uma única chave AESCTR para suportar conteúdo criptografado AES, ou uma chave COCKTAIL para suportar 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 contendo um cabeçalho PlayReady 4.0.0.0
Infelizmente, não é possível apresentar uma tradução fluente, pois o texto fornecido está em formato codificado/base64 e não em linguagem compreensível. Por favor, forneça o texto decodificado ou legível para que o mesmo possa ser eficazmente traduzido.
3.6.2. Formato
O cabeçalho 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 tags.
| Nome da etiqueta | Obrigatório | Descrição |
|---|---|---|
| WRMHEADER | Sim | Elemento mais externo do objeto header. Ele pode conter um elemento DATA e um atributo version. A versão para o 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 tags e atributos obrigatórios presentes no cabeçalho. Semântica para Cliente: Se a versão for maior do que aquela 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 tags obrigatórias que o cliente não entende. Se a versão for menor ou igual àquela 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 entenda. |
| DADOS | Sim | Elemento de 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". |
| ALGIA | Sim | Especifica o algoritmo de criptografia. Deve ser definido com o seguinte valor: AESCTR: Corresponde ao algoritmo AES no modo contador. COCKTAIL: Corresponde ao algoritmo Cocktail. |
| Criança | Sim | Contém um valor GUID de ID de chave codificado em base64. Observe que esse valor GUID (DWORD, WORD, WORD, matriz de 8 bytes) deve ser little endian byte order. |
| SOMA DE VERIFICAÇÃO | 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 tratavam este campo como necessário, por isso 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. Apenas URLs absolutos são permitidos. |
| LUI_URL | Não | Contém o URL para uma página Web de aquisição de licença não silenciosa. Apenas URLs absolutos são permitidos. |
| DS_ID | Não | ID de serviço para o serviço de domínio. |
| ATRIBUTOS PERSONALIZADOS | 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 marcas 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 PlayReady PC não devem adicionar nenhuma tag personalizada fora do elemento CUSTOMATTRIBUTES , pois isso pode entrar em conflito com marcas futuras que a Microsoft define.
- A ordem dos elementos filho dentro de um elemento de contêiner não importa.
- Observe que o cabeçalho PlayReady não contém uma tag de nível
?XMLsuperior que é necessária em XML bem formado. - Recomenda-se que o tamanho deste campo não exceda 1 KB.
- CHECKSUM é necessário para o PlayReady Server SDK até a versão 1.2. Desde a versão 1.5, o PlayReady Server SDK trata a CHECKSUM como opcional. PlayReady Porting Kit 1.2 de forma padrão requer a soma de verificação. O PlayReady Porting Kit 2.0 trata a CHECKSUM como opcional.
4. Loja de Licenças Incorporadas (ELS)
É uma boa prática adicionar um Embedded License Store 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 incorpore ainda mais uma licença vinculada ao domínio no objeto PlayReady simplesmente preenchendo o Embedded License Store existente e economiza o esforço de ter que recabelar o arquivo inteiro com um novo objeto PlayReady de um tamanho maior do que o inicial.
Observação
Não inclua um Embedded License Store vazio em um objeto PlayReady, destinado a ser inserido como uma string base-64 em um manifesto do cliente Smooth Streaming.
Observação
O tamanho recomendado é 10KB.
5. Algoritmo de soma de verificação de chave
O algoritmo de verificação de soma no cabeçalho PlayReady destina-se a proteger contra chaves discrepantes. Nos primórdios do DRM, as músicas eram criptografadas com chaves rotuladas incorretamente. Isso resultou em ruído branco sendo reproduzido quando as músicas foram descriptografadas. E se as músicas fossem tocadas em alto volume, o equipamento de reprodução acabava por se destruir. Com a soma de verificação, a chave de conteúdo pode ser confirmada como a chave utilizada para encriptar o ficheiro. O algoritmo funciona da seguinte forma:
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", o ID da chave de 16 bytes é criptografado 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. ATRIBUTOS PERSONALIZADOS
Um provedor de serviços pode adicionar XML proprietário dentro do elemento CUSTOMATTRIBUTES do cabeçalho PlayReady. Quaisquer tags usadas dentro do elemento CUSTOMATTRIBUTES têm a garantia de não entrar em conflito com futuras tags 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 white label representa serviços front-end AAA, BBB, CCC. Esse serviço pode encriptar a sua biblioteca de conteúdos apenas uma vez (uma vez que se trata de uma operação dispendiosa), mas quando fornece conteúdo a um utilizador final, pode definir os CUSTOMATTRIBUTES como o nome do serviço front-end específico que o utilizador final subscreve. Quando o usuário final solicita uma licença para esse conteúdo, isso permite que o serviço white label determine qual serviço front-end o usuário final assina, para que ele possa emitir uma licença diferente.
O tamanho deste campo não deve exceder 1 kilobyte (KB).