Partilhar via


Como empacotar conteúdo baseado em MP4 para PlayReady

Criptografia de conteúdo

O empacotador precisa criptografar o conteúdo. Qualquer formato de criptografia que use chaves AES-128 usadas no modo CTR ou no modo CBC é permitido pelas Regras de Conformidade.

Recomendam-se formatos baseados em MP4. CMAF é o formato baseado em MP4 preferido para clientes PlayReady, Windows 10 e Xbox One.

A Microsoft suporta os dois esquemas de encriptação comuns, que têm ampla aceitação na indústria — os esquemas de proteção AES-CBC "cbcs" e AES-CTR "cenc". Ver ISO/IEC FDIS 23001-7:2016 "Tecnologia da Informação – Tecnologias de sistemas MPEG – Parte 7: Criptografia comum em ficheiros de formato de ficheiro multimédia ISO base"

Para obter mais informações, consulte Criptografia e entrega de conteúdo

Inserir um cabeçalho PlayReady no conteúdo

O empacotador precisa inserir o cabeçalho PlayReady que gerou no conteúdo. Normalmente é inserido no cabeçalho dos arquivos de conteúdo ou no manifesto de ativos de streaming.

Este cabeçalho inclui valores padrão para informações que são necessárias para um cliente PlayReady solicitar uma licença para esta parte de conteúdo específico. Por exemplo, um cliente PlayReady precisa saber quais IDs de chave (KIDs) são usados no ativo para que possa solicitar os valores de chave. Ele também precisa saber o endereço de um servidor de licenças que entregará essa licença. Opcionalmente, ele precisa saber qual página da Web renderizar para o usuário no caso de uma solicitação de licença ser recusada pelo servidor de licenças (o usuário pode ser direcionado para uma página de pagamento).

Aqui está um exemplo de um cabeçalho PlayReady

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID ALGID="AESCTR" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <LUI_URL>http://www.contoso.com/pay/</LUI_URL>
  </DATA>
</WRMHEADER>

Quando um cliente PlayReady precisar reproduzir conteúdo protegido, ele solicitará uma licença para o conteúdo se ainda não tiver nenhuma. Para iniciar a solicitação de licença, o desenvolvedor do aplicativo pode ter provisionado o aplicativo com valores codificados ou dinâmicos para a matriz KID, LA_URL e o comportamento no caso de uma recusa de solicitação de licença. A aplicação substituiu os valores padrão do KID ou LA_URL. Se o desenvolvedor não tiver, espera-se que o cliente faça a solicitação de licença com base nos valores padrão encontrados no próprio cabeçalho do conteúdo.

Para arquivos ISO MP4, a Microsoft recomenda seguir a especificação de formato ISO e inserir o cabeçalho PlayReady em uma caixa 'pssh'.

Exemplo de um arquivo MP4 contendo um objeto PlayReady

A figura a seguir mostra um arquivo MP4 segmentado com um objeto PlayReady que contém um cabeçalho PlayReady:

Cabeçalho PlayReady em MP4

Aqui está a visualização HEX deste arquivo:

Despejo hexadecimal de objeto PlayReady

A figura a seguir mostra um arquivo MP4 segmentado com um objeto PlayReady que contém um cabeçalho PlayReady e outro objeto PlayReady que contém um repositório de licenças PlayReady Embedded:

Cabeçalho PlayReady e ELS em MP4

Para ativos de streaming adaptáveis, a Microsoft recomenda inserir o cabeçalho PlayReady no manifesto do ativo.

Exemplo de um manifesto de MPEG-DASH contendo um cabeçalho PlayReady

<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" xmlns:cenc="urn:mpeg:cenc:2013" xmlns:mspr="urn:microsoft:playready" mediaPresentationDuration="PT10M56.907S" minBufferTime="PT4S">
  <Period>
    <AdaptationSet id="1" group="1" profiles="ccff" bitstreamSwitching="true" segmentAlignment="true" contentType="video" mimeType="video/mp4" codecs="avc1.640028" maxWidth="1920" maxHeight="1080" startWithSAP="1">

        <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="10000000-1000-1000-1000-100000000001"/>
        <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value="2.0" cenc:default_KID="10000000-1000-1000-1000-100000000001">
            <mspr:pro>PABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMwAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcAA6AC8ALwBlAHgAcABlAHIAaQBtAGUAbgB0AGEAbAAxAC4AYQB6AHUAcgBlAHcAZQBiAHMAaQB0AGUAcwAuAG4AZQB0AC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPwBjAGYAZwA9ACgAYwBrADoAVwAzADEAYgBmAFYAdAA5AFcAMwAxAGIAZgBWAHQAOQBXADMAMQBiAGYAUQA9AD0ALABjAGsAdAA6AEEARQBTADEAMgA4AEIAaQB0AEMAQgBDACkAPAAvAEwAQQBfAFUAUgBMAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAEIAQwAiACAAVgBBAEwAVQBFAD0AIgBBAEEAQQBBAEUAQQBBAFEAQQBCAEEAUQBBAEIAQQBBAEEAQQBBAEEAQQBRAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</mspr:pro>
        </ContentProtection>

        <SegmentTemplate timescale="10000000" media="video/bbb_sunflower_1080p_60fps_normal_VIDEO$Number$.mp4"  initialization="video/bbb_sunflower_1080p_60fps_normal_VIDEO0.mp4">
          <SegmentTimeline>
            <S d="83166700" />
            <S d="79166700" />
            <S d="80333300" />
            <S d="73000000" />
          </SegmentTimeline>
        </SegmentTemplate>
      <Representation id="video" bandwidth="10646158" width="1920" height="1080"/>
    </AdaptationSet>
  </Period>
</MPD>

Ver também

Formatos suportados

Conteúdo de teste PlayReady