Partilhar via


Proteção de conteúdo DASH usando o Microsoft PlayReady

Implementação da proteção de conteúdo para perfis ao vivo e sob demanda de streaming dinâmico adaptável sobre HTTP (ISO/IEC 23009-1) usando criptografia comum (ISO/IEC 23001-7) e Microsoft PlayReady.

Versão Atual

A versão atual é a versão 1.3 publicada em 15 de fevereiro de 2018

Consulte o Histórico de alterações para obter mais informações.

Resumo

Os perfis On-Demand e Live DASH do formato de ficheiro de média base ISO ISO/IEC 23009-1 podem ser usados com a especificação ISO/IEC 23001-7, "Common Encryption in ISO base media file format files". O Microsoft PlayReady suporta ISO/IEC 23001-7 e ISO/IEC 23009-1. Esta especificação detalha como criar um arquivo ISO/IEC 23009-1 Media Presentation Description sinalizando o uso do Microsoft PlayReady para representações de mídia ISO/IEC 14496-12 para cenários de streaming adaptável ao vivo e sob demanda.

Advertência jurídica

© 2018 Microsoft Corporation. Todos os direitos reservados. Este documento é fornecido "as-is". As informações contidas neste documento, incluindo URL e outras referências a sites da Internet, podem ser alteradas sem aviso prévio. Você assume o risco de usá-lo.

Este documento não lhe fornece direitos legais sobre nenhuma propriedade intelectual em qualquer produto Microsoft. Poderá copiar e utilizar o presente documento para efeitos de referência pessoal a título interno. Você não pode remover nenhum aviso deste documento.

Conteúdos

Seção Título
1 Introdução
1.1 Âmbito de aplicação
1.2 Convenções
1.3 Terminologia, abreviaturas e acrónimos
1.4 Referências
1.5 Histórico de alterações
2 Esquema de Proteção de Conteúdo PlayReady DASH
2.1 Elementos do descritor DASH ContentProtection
2.2 Recomendações e requisitos de implementação
3 Exemplo de descrição da apresentação de mídia
3.1 Corrigir o PRO no segmento de inicialização ou no conteúdo de media
3.2 Incluindo um objeto PlayReady no MPD

Tabelas

Tabela Título
Tabela 1 Caixa de criptografia de faixa
Tabela 2 Exemplo de representação KID

1. Introdução

O padrão Dynamic Adaptive Streaming over HTTP [DASH] do MPEG especifica formatos para a entrega de conteúdo de mídia de servidores HTTP para clientes HTTP. No DASH, a apresentação do conteúdo de mídia é descrita por um arquivo MPD (Media Presentation Description). O MPD fornece identificadores de recursos para segmentos, juntamente com o contexto para esses recursos em uma apresentação de mídia.

No DASH, uma apresentação de mídia consiste em uma sequência temporal de períodos ([DASH], seção 5.3.2). Dentro de um Período, o conteúdo de mídia é organizado em um conjunto de versões codificadas intercambiáveis chamadas Conjuntos de Adaptação ([DASH], seção 5.3.3). Cada conjunto de adaptação consiste em representações ([DASH], seção 5.3.5) - versões codificadas dos componentes de conteúdo de mídia.

Um elemento Descritor ContentProtection pode ser associado a um Conjunto de Adaptação ou a uma Representação, para indicar o esquema de criptografia, e um ou mais elementos do Descritor ContentProtection podem ser adicionados para habilitar a aquisição de licença DRM ([DASH], seção 5.8.4.1).

1.1 Âmbito de aplicação

Como usar o Microsoft PlayReady como o esquema de proteção de conteúdo em um arquivo de descrição de apresentação de mídia ISO/IEC 23009-1 DASH.

1.2 Convenções

As palavras-chave "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" e "OPTIONAL" neste documento devem ser interpretadas como descritas em [RFC2119]. Ou seja:

  • "MUST", "REQUIRED" e "SHALL" significam que a definição é um requisito absoluto da especificação.

  • "NÃO PODE" e "NÃO DEVE" significam que a definição é uma proibição absoluta da especificação.

  • "DEVERIA" e "RECOMENDADO" significam que pode haver razões válidas para ignorar um determinado item, mas todas as implicações devem ser compreendidas e cuidadosamente ponderadas antes de escolher um curso diferente.

  • "NÃO DEVERIA" e "NÃO RECOMENDADO" significam que pode haver razões válidas quando o comportamento específico é aceitável, mas as implicações completas devem ser entendidas e o caso cuidadosamente ponderado antes de implementar qualquer comportamento descrito com este rótulo.

  • Os termos "PODE" e "OPCIONAL" indicam que o item é verdadeiramente opcional.

Voltar ao topo

1.3 Terminologia, abreviaturas e acrónimos

1.3.1 Terminologia

Período Descrição
Conjunto de Adaptação No DASH, um conjunto de versões codificadas intercambiáveis de um ou vários componentes de conteúdo de mídia.
Proteção de conteúdo (CP) O processo de proteção de um Recurso Protegido subsequente à sua entrega a um dispositivo Cliente.
Licença incorporada Uma licença armazenada no objeto PlayReady (PRO).
Loja de Licenças Incorporadas (ELS) Um registro no objeto PlayReady (PRO) para armazenar licenças incorporadas.
GUID (Identificador Único Global) Um número de referência exclusivo, representado como uma cadeia hexadecimal de 32 caracteres separada por hífen e geralmente armazenado como um inteiro de 128 bits.
Segmento de inicialização Um Segmento DASH contendo metadados necessários para apresentar os fluxos de mídia encapsulados em Segmentos de Mídia; no caso de ISO Media, um cabeçalho de arquivo.
Identificador de chave (KID) Um UUID que identifica exclusivamente uma chave de proteção de conteúdo, licenças ou outras informações confidenciais; no caso do PlayReady, armazenado como um GUID.
Rotação de chaves Alterações periódicas na chave de criptografia associada à mídia. Normalmente, isto significa
Licença Leaf Uma licença cuja chave de conteúdo é criptografada usando uma chave de conteúdo em uma Licença Raiz.
Licença Uma estrutura de dados PlayReady que inclui políticas e uma chave de conteúdo encriptada.
URL de aquisição de licença (LAURL) O URL do serviço Web PlayReady de aquisição de licenças.
Cadeia de Licenças Uma cadeia de licenças consiste em uma licença raiz e uma licença folha. Uma Licença Leaf pode ter várias Licenças Root e uma Licença Root pode ter várias Licenças Leaf. Existe uma cadeia de licenças para cada par.
Perfil ao vivo O perfil ao vivo do formato de arquivo de mídia ISO Base (veja a seção 8.4 de [DASH]). O Live Profile é otimizado para codificação ao vivo, onde cada segmento de filme pode ser solicitado imediatamente após ser codificado usando um URL gerado por modelo.
Apresentação para a imprensa Coleta de metadados e dados de mídia que podem ser baixados e renderizados como uma apresentação de mídia, conforme definido na ISO/IEC 23009-1.
Descrição da apresentação de mídia (MPD) Descrição formal do documento XML de uma apresentação de mídia definida na ISO/IEC 23009-1.
Segmento de Mídia Um Segmento DASH que está em conformidade com um formato de mídia e permite a reprodução, talvez combinado com outros Segmentos de Mídia e/ou um Segmento de Inicialização.
Caixa de filmes ('moov') No ISO Base Media File Format, a caixa cujas subcaixas definem os metadados para uma apresentação de mídia [ISOBFF].
Caixa de fragmentos de filme ('moof') No formato ISO Base Media File, a caixa de Fragmento de Filme prolonga a apresentação de mídia no tempo [ISOBFF] e está contida num segmento de mídia DASH.
Perfil sob demanda O formato de ficheiro de mídia ISO Base perfil On Demand (ver secção 8.3 de [DASH]). O perfil sob demanda fornece suporte básico para conteúdo sob demanda. Cada Representação é fornecida como um único Segmento, os Subsegmentos são alinhados nas Representações de um conjunto de Adaptação e os Subsegmentos começam com um Ponto de Acesso de Fluxo que corresponde a um segmento de vídeo.
Período Intervalo de uma apresentação de mídia.
Objeto PlayReady (PRO) Um objeto binário contendo um número variável de registros, incluindo, opcionalmente, registros PRH e ELS. Estes registos contêm informações relacionadas com licenças e aquisição de licenças (consulte [PRO]).
Caixa de cabeçalho específica do sistema de proteção ('pssh') No Formato de Arquivo de Mídia Base ISO, a caixa Cabeçalho Específico do Sistema de Proteção contém metadados necessários para que um sistema de Proteção de Conteúdo específico adquira uma licença e descriptografe o conteúdo de mídia [ISOBFF].
Representação Uma das opções alternativas do componente de conteúdo de mídia durante um período definido, por exemplo, um arquivo de mídia ISO. É descrito por um elemento de representação MPD ([DASH], secção 5.3.5).
Cabeçalho PlayReady (PRH) Um registro no objeto PlayReady (PRO) contendo metadados necessários para descriptografar o conteúdo de mídia, incluindo um ou vários IDs de chave e URLs de aquisição de licença (consulte [PRH]).
Licença Root Uma Licença cuja chave de conteúdo é usada para criptografar uma chave de conteúdo em uma Licença Leaf
Segmento Em DASH, um elemento em um MPD que faz referência a um recurso de mídia com um identificador HTTP-URL e um intervalo de bytes opcional.
Índice de Segmento Mapeamento de índice de intervalo de tempo para intervalo de bytes dentro de um segmento de mídia separado do MPD, definido como uma caixa 'sidx' de mídia ISO.
Ponto de Acesso de Transmissão (SAP) A posição dentro de uma Representação que permite a reprodução de um Segmento Multimédia utilizando apenas os dados da Representação dessa posição em diante.
Subsegmento No DASH, esta é uma unidade dentro de um Segmento de Mídia indexado por um Índice de Segmento. Um segmento de filme é referido como um Subsegmento no Perfil DASH On Demand, mas como um Segmento no Perfil DASH Live.
Caixa de Acompanhamento de Encriptação No formato de ficheiro de multimédia de base ISO, a caixa Track Encryption ('tenc') descreve os parâmetros de encriptação predefinidos para uma faixa [CENC], [ISOBFF].
Identificador Único Universal (UUID) Um identificador matematicamente único representado como um número ou cadeia de caracteres, conforme especificado em [X.667]
Vídeo sob demanda (VOD) Sistema que permite ao utilizador final selecionar e ver conteúdos de vídeo a pedido. Tanto o DASH Live Profile quanto o DASH On Demand Profile podem ser usados para apresentação VOD.

1.3.2 Abreviaturas e acrónimos

Abreviatura Significado
CP Proteção de Conteúdo
TRAÇO Streaming adaptável dinâmico sobre HTTP
ELES Loja de Licenças Integradas
Identificador Globalmente Único (GUID) Identificador global único
Criança Identificador de chave
LAURL URL de aquisição de licença
MPD Descrição da apresentação de mídia
PRH Cabeçalho PlayReady
PRO Objeto PlayReady
S.A. Ponto de Acesso de Fluxo
Identificador Único Universal (UUID) Identificador Universalmente Único
Video On Demand (VOD) Vídeo sob demanda

1.4 Referências

1.4.1 Referências Normativas

Código Referência Normativa
[CENC] ISO/IEC FDIS 23001-7:2016 "Tecnologia da informação – Tecnologias de sistemas MPEG – Parte 7: Criptografia comum em arquivos de formato de arquivo de mídia de base ISO",https://www.iso.org/standard/68042.html
[TRAÇO] ISO/IEC 23009-1:2014, Segunda Edição, "Information technology — Dynamic adaptive streaming over HTTP (DASH) — Part 1: Media presentation description and segment formats" (Tecnologia da informação — Transmissão adaptativa dinâmica sobre HTTP (DASH) — Parte 1: Descrição da apresentação multimédia e formatos de segmento",http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip
[EME] "Extensões de mídia criptografada", Recomendação do W3C de 18 de setembro de 2017https://www.w3.org/TR/encrypted-media/
[PRH] "Microsoft PlayReady Header, consulte Especificação do Header PlayReady
[PRO] "Objeto Microsoft PlayReady, consulte Especificação de Cabeçalho PlayReady
[RFC2119] "Key Palavras-chave para uso em RFCs para Indicar Níveis de Requisito, S. Bradner, março de 1997, http://www.ietf.org/rfc/rfc2119.txt"
[RFC3629] "UTF-8, um formato de transformação da ISO 10646", F. Yergeau, novembro de 2003, http://tools.ietf.org/html/rfc3629
[RFC4122] "A Universally Unique IDentifier (UUID) URN Namespace", P. Leach, M. Mealling, R. Salz, julho de 2005,http://www.ietf.org/rfc/rfc4122.txt
[X.667] "Tecnologia da informação – Interconexão de Sistemas Abertos – Procedimentos para a operação das Autoridades de Registo OSI: Geração e registo de Identificadores Universalmente Únicos (UUIDs) e o seu uso como componentes identificadores de objetos ASN.1" Recomendação Série X ITU-Thttp://www.itu.int/rec/T-REC-X.667-201210-I/en

1.4.2 Referências informativas

Código Referência informativa
[CPSID] Fórum da Indústria DASH, "Identificadores específicos do Sistema de Proteção",http://dashif.org/identifiers/content_protection/
[DASHIF] DASH Industry Forum, "Guidelines for Implementation: DASH-IF Interoperability Points", 07 de setembro de 2017, Versão 4.1,https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf
[ISOBFF] ISO/IEC 14496-12, Quarta Edição (Versão corrigida 2012-09-15), "Information technology – Coding of audio-visual objects – Part 12: ISO Base Media File Format",http://standards.iso.org/ittf/PubliclyAvailableStandards/c061988_ISO_IEC_14496-12_2012.zip

Voltar ao topo

1.5 Histórico de alterações

Versão Data Detalhes
Versão 1.3 Fevereiro 15, 2018 Esclareça o suporte para vetores de inicialização de 16 bytes (IVs de 16 bytes).
Versão 1.2 Outubro 8, 2014 1) Alterações para a 2ª edição do CENC
2) Alterações relacionadas aos elementos do descritor DASH MPD ContentProtection
3) Alterações na terminologia para adição e clarificação de termos
4) Alterações nas referências normativas e informativas para remeter para a versão mais recente
5) Esclareça a representação e a ordem de bytes (endianness) do KID nos boxes do ISOBFF, PRO e licenças PlayReady.
Versão 1.1 18 de fevereiro de 2013 Clarificação da representação do PlayReady SystemID.
O PlayReady SystemID é 9a04f079-9840-4286-ab92-e65be0885f95.
Representação big endian = {0x9A, 0x04, 0xF0, 0x79, 0x98, 0x40, 0x42, 0x86, 0xAB, 0x92, 0xE6, 0x5B, 0xE0, 0x88, 0x5F, 0x95}.
Representação endiana pequena = {0x79, 0xF0, 0x04, 0x9A, 0x40, 0x98, 0x86, 0x42, 0xAB, 0x92, 0xE6, 0x5B, 0xE0, 0x88, 0x5F, 0x95}.
Versão 1.0 17 de julho de 2012 Versão inicial



2. Esquema de Proteção de Conteúdo PlayReady DASH

O Microsoft PlayReady suporta as novas normas ISO/IEC 23009-1 [DASH] e ISO/IEC 23001-7 [CENC]. Esta especificação detalha como criar um arquivo DASH Media Presentation Description sinalizando o uso do Microsoft PlayReady para representações de mídia ISO Base Media File Format, para cenários de streaming adaptável On Demand ([DASH], seção 8.3) e Live ([DASH], seção 8.4).

Os quatro cenários que são o foco desta especificação são VOD ou apresentações ao vivo de mídia:

  1. criptografado com uma única chave

  2. em que algum conteúdo é encriptado enquanto outro está sem encriptação

  3. com rotação de chaves sem licenças Leaf incorporadas

  4. com rotação de chaves com licenças Embedded Leaf

2.1 Elementos do descritor DASH ContentProtection

O DASH define dois tipos de elementos descritores de ContentProtection para mídia ISO (seções [DASH] 5.3.7.2-Tabela 9, 5.8.5.2 e 5.8.4.1):

  1. Com @schemeIdUri=”urn:mpeg:dash:mp4protection:2011” @value=”<scheme>”
  2. Com @schemeIdUri=”urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx” @value=”DRMNAME version”

O primeiro tipo de descritor indica o código de quatro caracteres ("4CC") do esquema de encriptação contido na Caixa de Informação do Sistema de Proteção («schi») em cada faixa encriptada de Multimédia ISO. Este tipo de descritor DEVE estar sempre presente para que os jogadores sejam informados de que o conteúdo é encriptado e possam determinar se podem desencriptar o esquema de encriptação antes de tentarem descarregá-lo e jogá-lo.

O segundo tipo de descritor indica a cadeia de caracteres UUID para um sistema DRM específico que pode fornecer uma chave de licença e descriptografia para o Conjunto de Adaptação associado. As especificações de aplicação, como as do DASH Industry Forum, DVB e DECE, restringem todas as representações em um conjunto de adaptação para compartilhar a(s) mesma(s) chave(s) e licença para permitir a comutação adaptativa contínua, o que é realizado restringindo os descritores ContentProtection do nível de representação do MPD. A cadeia de caracteres UUID é igual ao campo SystemID especificado pela Caixa de Informações Específicas do Sistema de Proteção de Mídia ISO ('pssh') que PODE estar presente na Caixa de Filme ('moov') de um arquivo ou Segmento de Inicialização DASH.

Observação A caixa 'pssh' inclui um SystemID, um UUID [X.667] que identifica exclusivamente o sistema de proteção de conteúdo. O PlayReady SystemID é 9a04f079-9840-4286-ab92-e65be0885f95.

Os valores de SystemID para sistemas DRM são registrados em: https://dashif.org/identifiers/content_protection/

Cada elemento AdaptationSet PODE listar vários Descritores DRM para indicar que as licenças estão disponíveis para vários sistemas DRM. Cada sistema DRM pode especificar elementos e atributos em seu próprio namespace e torná-los opcionais ou obrigatórios em Descritores usando seu SystemID.

A segunda edição do Common Encryption ([CENC] seção 11) especifica um elemento cenc:pssh opcional que pode ser usado por todos os descritores DRM ContentProtection para melhorar a interoperabilidade. Ele também especifica um atributo cenc:default_KID recomendado para inclusão no descritor mp4protection para identificar a licença necessária em um só lugar para todos os sistemas. O elemento cenc:pssh contém uma estrutura de caixa 'pssh' completa, por isso é processado de forma idêntica pela API EME (Encrypted Media Extension) em navegadores da Web [EME].

Os sistemas DRM podem fornecer informações de aquisição de licenças em:

  1. Um elemento cenc:pssh em um descritor ContentProtection no MPD
  2. Uma caixa 'pssh' na caixa 'moov' de um arquivo ou segmento de inicialização
  3. Ambos os itens acima (nesse caso, o elemento cenc:pssh tem precedência)

Dependendo do fluxo de trabalho, pode ser mais eficiente incorporar informações de aquisição de licença em uma caixa 'pssh' em cada arquivo em um Conjunto de Adaptação durante a codificação ou embalagem; ou pode ser mais eficiente incorporar um elemento cenc:pssh em um MPD no momento em que uma apresentação de streaming é oferecida. Para transmissão ao vivo, é melhor usar cenc:pssh no MPD para permitir a aquisição antecipada de licenças, em vez de acionar muitas solicitações de licença simultâneas no momento em que o primeiro Segmento de Inicialização e a caixa 'pssh' são entregues simultaneamente a possivelmente milhões de espectadores. As informações sobre a obtenção de licenças no MPD permitem que diferentes serviços de streaming usem diferentes servidores de licenças, alterando-os ao longo do tempo, sem criar e gerenciar ficheiros de mídia separados.

No caso do PlayReady, um objeto PlayReady (PRO) [PRO] pode estar contido em um elemento cenc:pssh, um elemento mspr:pro ou uma caixa 'pssh' para permitir a aquisição de licença. O elemento mspr:pro é definido pelo Microsoft PlayReady e inclui apenas as informações PRO [PRO], não a estrutura de caixa incluída em 'pssh' e cenc:pssh. A inclusão de mspr:pro e cenc:pssh possibilitará que tanto jogadores antigos, incluindo um jogador baseado em Silverlight, como novos jogadores, incluindo páginas da Web que utilizam script, consigam reproduzir apresentações DASH protegidas em navegadores HTML5.

Observação Ao longo desta especificação 'mspr' é 'urn:microsoft:playready', definido por xmlns:mspr="urn:microsoft:playready".

Voltar ao topo

2.1.1 Corrigir PRO no Segmento de Inicialização ou no Conteúdo de Mídia

Se houver um Segmento de Inicialização que contenha o PRO correto, ou se o conteúdo de mídia incluir uma caixa 'pssh' PlayReady com o PRO correto, então o elemento Descritor de Proteção de Conteúdo PlayReady com o identificador específico do Sistema de Proteção de Conteúdo [CPSID] DEVE ser utilizado dentro de um elemento AdaptationSet em um MPD para indicar a disponibilidade de uma licença PlayReady.

<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”/>

PlayReady suporta o padrão Common Encryption [CENC] . Quando os metadados de aquisição de licença são armazenados no Segmento de Inicialização ou no conteúdo de mídia 'pssh', o elemento Descritor PlayReady ContentProtection DEVE estar presente.

O seguinte elemento Descritor de Proteção de Conteúdo DEVE estar presente em cada Conjunto de Adaptação protegido, e uma única instância indica o esquema de criptografia para todos os DRMs que suportam o esquema 'cenc'.

<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc"/>

2.1.2 Incluindo um objeto PlayReady no MPD

Há várias situações em que o objeto PlayReady [PRO] pode precisar ser incluído no elemento Descritor PlayReady ContentProtection. Por exemplo:

  • Uma apresentação onde a caixa 'pssh' PlayReady está ausente

  • Uma apresentação onde o PRO encontrado na caixa 'pssh' do PlayReady precisa ser substituído

Para identificar o PlayReady como o Content Protection Scheme e incluir o PRO no elemento ContentProtection Descriptor, recomenda-se usar ambas as sintaxes cenc:pssh de acordo com [CENC] e mspr:pro para compatibilidade retroativa da seguinte maneira:

<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
  	<cenc:pssh>
          <!-- *base64-encoded PlayReady ‘pssh’ complete box* -->
  	</cenc:pssh>
  	<mspr:pro>
          <!-- *base64-encoded PlayReady Object* -->
    </mspr:pro>
</ContentProtection>

A seguinte regra DEVE ser seguida ao incluir uma caixa 'pssh' PlayReady e um PRO no elemento PlayReady ContentProtection Descriptor:

  • Se cenc:pssh ou mspr:pro estiver incluído no elemento PlayReady ContentProtection Descriptor:

    • Se um PRO estiver incluído numa caixa de cabeçalho específico de sistema de proteção ('pssh') no conteúdo media, então um valor de string codificado em base64 para KID (um valor de tag KID de [PRO]) em um PRO incluído em cenc:pssh ou mspr:pro DEVE ser equivalente ao valor de string codificado em base64 para KID nesse PRO que está incluído na caixa 'pssh'.

    • Se houver um Segmento de Inicialização para a Representação que contenha um 'pssh' PlayReady, então um valor de string KID codificado em base 64 num PRO que está incluído tanto em cenc:pssh como em mspr:pro para essa Representação deve ser igual ao valor de string KID codificado em base 64 nesse PRO que está incluído na caixa 'pssh' do Segmento de Inicialização. Observe que um Segmento de Inicialização pode ser uma cópia do cabeçalho do arquivo de um arquivo de conteúdo de mídia armazenado contido em um corpo de resposta HTTP, mas também pode ser gerado dinamicamente e nunca armazenado como um arquivo.

  • Se o conteúdo de mídia contiver uma caixa 'pssh' PlayReady com um PRO contendo um LAURL, e esse LAURL diferir do LAURL no PRO incluído no elemento ContentProtection Descriptor, o elemento ContentProtection Descriptor LAURL TERÁ precedência.

Voltar ao topo

2.1.3 Incluindo campos de caixa de encriptação de faixas no MPD

A Criptografia Comum indica a chave utilizada para criptografar cada amostra de mídia, ou quando uma chave não é usada, com identificador(es) de chave (KID) em cada segmento de vídeo. Algumas informações, como o default_KID na caixa de encriptação de pistas ('tenc') são úteis para sinalizar no MPD para determinar a licença necessária.

Pode haver Períodos de Apresentação de Mídia que não são criptografados, seguidos por Períodos que são criptografados. Os ficheiros e fluxos multimédia podem incluir secções encriptadas e não encriptadas. Além disso, o Identificador de Chave (KID) pode mudar de Período para Período ou de secção para secção. As principais alterações nas seções de uma faixa são sinalizadas usando o grupo de amostra ISO Media e as caixas de descrição do grupo de amostra em cada segmento do filme. Consulte [CENC] para obter mais informações sobre grupos de amostras e acesso a vetores de inicialização e intervalos de criptografia de subamostra usando caixas 'saio' e 'saiz' apontando para informações auxiliares de amostra.

As configurações padrão para informações de criptografia comum são codificadas na caixa de criptografia de trilha de cada faixa ('tenc') (consulte [ISOBFF] e [CENC]) armazenadas em uma caixa de rastreamento ('trak') em um cabeçalho de arquivo ISO e segmento de inicialização. O Identificador de Chave (KID) padrão na Caixa de Criptografia de Faixa (campo default_KID) também deve ser comunicado no elemento Descritor de Proteção de Conteúdo associado ao Conjunto de Adaptação de Apresentação de Media. O cenc:default_KID pode ser usado para identificar uma licença que pode descriptografar os segmentos de mídia referenciados pelo elemento AdaptationSet pai.

Para incluir o identificador de chave padrão (KID) no elemento Common Encryption ContentProtection Decriptor, use o seguinte atributo cenc:default_KID especificado em [CENC]:

<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="da9b5994-600c-2ad0-f96d-f12725780978"/>

O campo default_KID em 'tenc' é uma grande matriz endian de 16 bytes e é definido acima para ser armazenado no atributo cenc:default_KID no elemento Common Encryption ContentProtection Descriptor como uma cadeia de caracteres UUID.

Quando um elemento Descritor de ContentProtection se refere a várias faixas e estas usam diferentes identificadores padrão de chave em diferentes caixas 'tenc', o atributo cenc:default_KID DEVE armazenar uma lista de valores default_KID separados por espaço.

O atributo cenc:default_KID PODE também estar contido no elemento PlayReady ContentProtection Descriptor.

O quadro 1 indica os campos especificados na caixa de encriptação ISO Media Track («tenc») (ver secção 9.2, [CENC]). Os elementos abaixo da Tabela 1 foram definidos no namespace "mspr" para a primeira edição da Common Encryption (mspr:IsEncrypted, mspr:IV_size e mspr:kid), mas foram preteridos e funcionalmente substituídos por cenc:default_KID especificados na segunda edição do Common Encryption [CENC]. Os campos IV_size e IsEncrypted na Track Encryption Box ('tenc') são usados durante a desencriptação, mas não são necessários nos elementos do descritor MPD ContentProtection.

Observação O valor KID em mspr:kid é uma interpretação GUID little endian codificada em base64 da matriz de bytes default_KID 'tenc' definida para armazenar um UUID big endian. Todos os campos da caixa de criptografia de faixa podem ser copiados para o MPD, mas apenas o default_KID precisa ser exposto para a aquisição de licença.

Tabela 1 – Rastrear campos da caixa de criptografia

elemento Predefinição Descrição
default_IsEncrypted 1 Sinalizador que indica o status de criptografia das amostras no grupo de amostras. Os valores permitidos são 0 (não criptografado) e 1 (criptografado).
default_IV_size 8 O tamanho em bytes do campo Vetor de Inicialização (IV).
- PlayReady versão 1, 2, 3 suporte 0 e 8.
- PlayReady versão 4 e superior suporta 0, 8 e 16.
Se default_IsEncrypted =1, default_IV_size NÃO DEVE ser definido como 0.

Como nem todos os jogadores habilitados para PlayReady suportam vetores de inicialização de 16 bytes, é RECOMENDADO que apenas uma default_IV_size de 8 seja usada para conteúdo criptografado, se o serviço precisar chegar aos jogadores da versão 1/2/3 do PlayReady.
default_KID Nenhum Identificador de chave de 16 bytes (128 bits) que identifica exclusivamente a chave necessária para desencriptar as amostras associadas. O identificador de chave é tratado como UUID de acordo com [CENC]
Observe que, ao contrário do KID no PlayReady Header [PRH], o default_KID 'tenc' é armazenado como uma matriz de 16 bytes contendo um byte endian grande ordenado, inteiro de 128 bits equivalente a representações UUID binárias (seção 6.2) e número (seção 6.3) especificadas em [X.667].

Observação: O formato do default_KID na caixa de criptografia de faixa é diferente do formato do valor KID incorporado em PRO em cenc:pssh, mspr:pro e mspr:kid. Ver secção 2.2.5, [CENC] e [PRO] para mais pormenores.

Para identificar PlayReady como o esquema de proteção de conteúdo e incluir campos de caixa de criptografia de faixas no MPD, use a seguinte sintaxe:

<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
  <mspr:IsEncrypted>1</mspr:IsEncrypted>
  <mspr:IV_size>8</mspr:IV_size>
  <mspr:kid>2ptZlGAMKtD5bfEnJXgJeA==</mspr:kid>
</ContentProtection>

As seguintes regras DEVEM ser seguidas ao incluir o atributo cenc:default_KID nos campos Common Encryption ContentProtection Descriptor element e Track Encryption Box no elemento PlayReady ContentProtection Descriptor:

  • A cadeia de caracteres KID no atributo cenc:default_KID no elemento Common Encryption ContentProtection Descriptor DEVE ser equivalente ao UUID default_KID na caixa Track Encryption para essa faixa.

  • O valor mspr:IsEncrypted, mspr:IV_size e/ou mspr:kid no elemento Descritor PlayReady ContentProtection DEVE ser equivalente aos encontrados nos campos default_IsEncrypted, default_IV_size ou default_KID na Caixa de Criptografia da Faixa para essa faixa.

  • Se mspr:pro e cenc:pssh estiver incluído no elemento PlayReady ContentProtection Descriptor (veja a seção 2.1.2) com os campos Track Encryption Box:

    • O KID incorporado em PRO nos elementos mspr:pro e cenc:pssh deve corresponder ao default_KID na Caixa de Encriptação de Faixa dessa faixa.

    • O KID no atributo cenc:default_KID do elemento Common Encryption ContentProtection Descriptor e o valor mspr:kid do elemento PlayReady ContentProtection Descriptor devem ser equivalentes ao default_KID na Track Encryption Box dessa faixa.

Observação Tenha em mente que default_KID na Caixa de Encriptação de Trilha é interpretado como um UUID binário ou numérico armazenado como uma matriz de bytes big endian de 16 bytes, como uma cadeia UUID com hífen em cenc:default_KID e como uma cadeia base64 codificada a partir da representação GUID em ordem de bytes little endian em PRO e mspr:kid; mas todas devem ser representações alternativas do mesmo UUID. Ver secção 2.2.5.

Voltar ao topo

2.2 Recomendações e requisitos de implementação

O objeto PlayReady (PRO) PODE ser incluído na caixa de cabeçalho específico do sistema de proteção de mídia codificada ('pssh') [ISOBFF], no segmento de inicialização ou codificado no próprio MPD.

Uma caixa 'pssh' pode ser inserida na caixa Movie ('moov') ou na caixa Movie Fragment ('moof'). Por exemplo, uma caixa 'pssh' pode ser inserida na caixa 'moov' para permitir o uso de segmentos de inicialização ([DASH], seção 5.3.9.5.2). Uma caixa 'pssh' pode ser inserida em cada caixa 'moof' para transmitir licenças Leaf indexadas pelo KID para rotação de chaves.

O Grupo de Amostras e as Informações Auxiliares de Amostra DEVEM ser armazenados em qualquer segmento de vídeo que faça referência a eles. Uma caixa de descrição de grupo de amostra («sgdp») DEVE estar presente em cada caixa «moof» quando estiver presente uma caixa de amostra para grupo («sbgp»). A Caixa de Deslocamento de Informações Auxiliares de Amostra ('saio') e a Caixa de Tamanho de Informação Auxiliar de Amostra ('saiz') devem estar presentes em cada segmento de filme de cada faixa que contém uma Caixa de Criptografia de Faixa ('tenc'), com ponteiros válidos para Informações Auxiliares de Amostra.

2.2.1 Generalidades

O elemento Descritor PlayReady ContentProtection pode estar associado a Conjuntos de Adaptação ou suas Representações, mas para comutação de taxa de bits adaptável contínua e conformidade com as especificações do aplicativo DASH, o elemento Descritor PlayReady ContentProtection DEVE estar contido em um elemento Conjunto de Adaptação em vez de elementos de Representação. Isso garante que uma única licença e configuração de desencriptador podem ser usadas para todos os segmentos em um conjunto de adaptação.

É RECOMENDADO incluir o descritor de Proteção de Conteúdo PlayReady e é OBRIGATÓRIO incluir o descritor de Proteção de Conteúdo DASH MP4 com um valor de "cenc" no MPD.

Isso permite que DRMs que são compatíveis com "cenc" e têm informações de aquisição de licença numa aplicação, ou no MPD, ou num 'pssh' no segmento de inicialização identifiquem que o conteúdo é Encriptado Comum, identifiquem a licença necessária (usando default_KID), adquiram a licença e decifrem a mídia.

É RECOMENDADO incluir o @value atributo com nome e versão "MSPR 2.0", além do UUID no Descritor PlayReady ContentProtection para reconhecimento humano. Por exemplo:

<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="da9b5994-600c-2ad0-f96d-f12725780978"/>

<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”/>

2.2.2 Precedência da Localização PRO

Quando um aplicativo cliente encontra um PRO no MPD, ele DEVE ter precedência sobre um PRO contido no Segmento de Inicialização (consulte os requisitos adicionais do Segmento de Inicialização PRO em 2.2.3).

Quando um aplicativo cliente deteta um PRO no MPD, o Cabeçalho de Gestão de Direitos contido nesse PRO deve ter precedência sobre o Cabeçalho de Gestão de Direitos dentro de um PRO presente numa caixa 'pssh' na caixa 'moov' do conteúdo de mídia.

Quando um aplicativo cliente encontra um PRO no Segmento de Inicialização, ele DEVE ter precedência sobre um PRO contido em uma caixa 'pssh' no cabeçalho da caixa 'moov' do conteúdo de mídia (consulte os requisitos adicionais do Segmento de Inicialização PRO em 2.2.3).

2.2.3 Onde incluir o PRO

O PRO deverá estar presente no MPD ou no Segmento de Inicialização. PODE estar presente em ambos. No MPD, ele DEVE estar presente em um elemento mspr:pro e um elemento cenc:pssh no Descritor de Proteção de Conteúdo PlayReady (mspr:pro para jogadores legados).

Um PRO no segmento de inicialização ou o MPD pode incluir um cabeçalho de gestão de direitos.

Seja usando um Segmento de Inicialização ou não, é RECOMENDÁVEL que o MPD inclua o PRO correto, para que as informações do Cabeçalho de Gestão de Direitos possam ser adquiridas sem baixar o Segmento de Inicialização.

2.2.4 O que incluir no MPD PRO

O PRO pode incluir o Cabeçalho de Gestão de Direitos e/ou uma Loja de Licenças Incorporadas (ELS).

É RECOMENDADO que o MPD PRO inclua o cabeçalho Rights Management.

NÃO É RECOMENDADO incluir um ELS, a menos que seja necessário como parte de um domínio DRM ou um esquema de cadeia de licenças.

2.2.5 Ordem de bytes KID

Os identificadores de chave (KIDs) no PlayReady são armazenados em uma matriz de bytes formatada como um GUID (DWORD, WORD, WORD, matriz de 8 bytes) em pequena ordem de bytes endian, que é então codificada em base64 para armazenamento como uma cadeia de caracteres no PRO. Tanto os servidores de licença PlayReady como os clientes PlayReady num ecossistema PlayReady esperam que o KID na PRO e na licença PlayReady seja uma representação em ordem de bytes little-endian de [GUID].

O KID equivalente pode ser representado como uma cadeia de caracteres UUID ([X.667] seção 6.4) ou matriz de bytes contendo um UUID em ordem de bytes big endian, binário (seção 6.2) ou número (seção 6.3), conforme especificado em [X.667]. Common Encryption [CENC] e DASH usam essas representações no atributo cenc:default_KID (6.4 string), Track Encryption Box ('tenc') e 'seig' Sample Group Description Box ('sgpd') (6.2 binary ou 6.3 number byte array).

Como resultado, a menos que haja uma alteração, o cliente deve converter a ordem dos bytes da matriz KIDs para que esta corresponda à licença PlayReady.

Para converter os KIDs no atributo cenc:default_KID e nas caixas [ISOBFF] para o KID do PlayReady, use o seguinte código de exemplo:

// Create a PlayReady GUID from the KID value in ISOBFF box.
// Since the PlayReady Server always runs on an Intel processor,
// this will be a little endian representation.
// e.g. KID in Track Encryption Box is:
//      {f81d4fae-7dec-11d0-a765-00a0c91e6bf6}

byte[] tencKidBytes = new byte[] {
    0xf8, 0x1d, 0x4f, 0xae,
    0x7d, 0xec,
    0x11, 0xd0,
    0xa7, 0x65,
    0x00, 0xa0, 0xc9, 0x1e, 0x6b, 0xf6
};

Byte[] prKidBytes = new byte[16];

// Swap the endianness of the GUID value:
// - Reverse bytes 0 to 3,
// - swap bytes 4 and 5,
// - swap bytes 6 and 7, and
// - copy bytes 8-15 as-is without swapping

ConvertEndianness(tencKidBytes, prKidBytes);
Guid prKid = new Guid(prKidBytes);
void ConvertEndianness(byte[] original, byte[] guidBytes)
{
    System.Array.Copy(original, guidBytes, 16);
    Swap(ref guidBytes, 0, 3);
    Swap(ref guidBytes, 1, 2);
    Swap(ref guidBytes, 4, 5);
    Swap(ref guidBytes, 6, 7);
}

void Swap(ref byte[] bytes, int pos1, int pos2)
{
    byte temp = bytes[pos1];
    bytes[pos1] = bytes[pos2];
    bytes[pos2] = temp;
}

Tabela 2Exemplo de representação KID

Parâmetro KID Tipo Representação
KID UUID BE Número hexadecimal f81d4fae7dec11d0a76500a0c91e6bf6
Seção 6.3 de [X.667]
cenc:atributo KID padrão UUID de caracteres hexadecimais com hífenes "F81D4FAE-7DEC-11D0-A765-00A0C91E6BF6"
Seção 6.4 de [X.667]
KID em caixas ISOBFF Matriz de bytes UUID BE A representação hexadecimal é { 0xf8, 0x1d, 0x4f, 0xae, 0x7d, 0xec, 0x11, 0xd0, 0xa7, 0x65, 0x00, 0xa0, 0xc9, 0x1e, 0x6b, 0xf6 }
Seção 6.2 de [X.667]
KID em PRO Sequência Base64 da matriz de bytes GUID LE "rk8d+Ox90BGnZQCgyR5r9g=="
(A representação hexadecimal dos dados antes da codificação Base64 é { 0xae, 0x4f, 0x1d, 0xf8, 0xec, 0x7d, 0xd0, 0x11, 0xa7, 0x65, 0x00, 0xa0, 0xc9, 0x1e, 0x6b, 0xf6 })
mspr:criança Base64 String de default_KID Byte Array na caixa 'tenc' "+B1Prn3sEdCnZQCgyR5r9g=="
(A representação hexadecimal dos dados antes da codificação Base64 é { 0xf8, 0x1d, 0x4f, 0xae, 0x7d, 0xec, 0x11, 0xd0, 0xa7, 0x65, 0x00, 0xa0, 0xc9, 0x1e, 0x6b, 0xf6 })
KID na licença PlayReady Matriz de bytes GUID LE A representação hexadecimal é { 0xae, 0x4f, 0x1d, 0xf8, 0xec, 0x7d, 0xd0, 0x11, 0xa7, 0x65, 0x00, 0xa0, 0xc9, 0x1e, 0x6b, 0xf6 }

Voltar ao topo



3. Exemplo de descrição da apresentação mediática

3.1 Corrigir o PRO no segmento de inicialização ou no conteúdo de mídia

Ver secção 2.1.1 acima.

<?xml version="1.0" encoding="utf-8"?>

<MPD
  xmlns="urn:mpeg:DASH:schema:MPD:2011"
  xmlns:cenc="urn:mpeg:cenc:2013"
  minBufferTime="PT2.00S"
  profiles="urn:mpeg:dash:profile:isoff-live:2011"
  type="static">
  <Period>
    <AdaptationSet mimeType="audio/mp4">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="0b630844-cb17-496a-9700-3702e1d23ee2"/>
      <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
      </ContentProtection>
      <Representation bandwidth="134878" id="audio">
        <SegmentList duration="4000" timescale="1000">
          <Initialization sourceURL="audio/init.mp4"/>
          <SegmentURL media="audio/seg-0000.m4f"/>
          <SegmentURL media="audio/seg-0001.m4f"/>
          <SegmentURL media="audio/seg-0002.m4f"/>
        </SegmentList>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

3.2 Incluindo um objeto PlayReady (PRO) no MPD

Ver secção 2.1.2 acima.

<?xml version="1.0" encoding="utf-8"?>

<MPD
  xmlns="urn:mpeg:DASH:schema:MPD:2011"
  xmlns:cenc="urn:mpeg:cenc:2013"
  xmlns:mspr="urn:microsoft:playready"
  minBufferTime="PT4.00S"
  profiles="urn:mpeg:dash:profile:isoff-live:2011"
  type="static">
  <Period>
    <AdaptationSet mimeType="audio/mp4">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="0b630844-cb17-496a-9700-3702e1d23ee2"/>
      <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
<cenc:pssh>AAAAAJoE8HmYQEKGq5LmW+CIX5UAAALq6gIAAAEAAQDgAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AUgBBAGgAagBDAHgAZgBMAGEAawBtAFgAQQBEAGMAQwA0AGQASQArADQAZwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBxAGgASwBXAEgASgBhAEwAMAAxAEkAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALgBkAHkAbgBkAG4AcwAuAG8AcgBnAC8AYwBvAG4AdABvAHMAbwBzAHMAcAByAC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPAAvAEwAQQBfAFUAUgBMAD4APABEAFMAXwBJAEQAPgBpAEsARwBsAFcARwA0AEQAWABVAHEANAB3AGIAVwBnAFIATgBMAFIASgBnAD0APQA8AC8ARABTAF8ASQBEAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</cenc:pssh>
<mspr:pro>6gIAAAEAAQDgAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AUgBBAGgAagBDAHgAZgBMAGEAawBtAFgAQQBEAGMAQwA0AGQASQArADQAZwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBxAGgASwBXAEgASgBhAEwAMAAxAEkAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALgBkAHkAbgBkAG4AcwAuAG8AcgBnAC8AYwBvAG4AdABvAHMAbwBzAHMAcAByAC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPAAvAEwAQQBfAFUAUgBMAD4APABEAFMAXwBJAEQAPgBpAEsARwBsAFcARwA0AEQAWABVAHEANAB3AGIAVwBnAFIATgBMAFIASgBnAD0APQA8AC8ARABTAF8ASQBEAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</mspr:pro>
      </ContentProtection>
      <Representation bandwidth="134878" id="audio">
        <SegmentList duration="4000" timescale="1000">
          <Initialization sourceURL="audio/init.mp4"/>
          <SegmentURL media="audio/seg-0000.m4f"/>
          <SegmentURL media="audio/seg-0001.m4f"/>
          <SegmentURL media="audio/seg-0002.m4f"/>
        </SegmentList>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>