Compartir a través de


Cómo empaquetar contenido basado en MP4 para PlayReady

Cifrado de contenido

El empaquetador debe cifrar el contenido. Las reglas de cumplimiento permiten cualquier formato de cifrado que use claves AES-128 usadas en el modo CTR o en modo CBC.

Se recomiendan los formatos basados en MP4. CMAF es el formato basado en MP4 preferido para los clientes de PlayReady, Windows 10 y Xbox One.

Microsoft admite los dos esquemas de cifrado comunes que tienen una amplia aceptación del sector: los esquemas de protección AES-CBC y "cenc" AES-CTR. Vea ISO/IEC IDFS 23001-7:2016 "Tecnologías de la información – Tecnologías de sistemas MPEG – Parte 7: Cifrado común en archivos de formato de archivo multimedia base ISO"

Para obtener más información, consulte Cifrado y entrega de contenido.

Insertar un encabezado playReady en el contenido

El empaquetador debe insertar el encabezado playReady que ha generado en el contenido. Normalmente se inserta en el encabezado de los archivos de contenido o en el manifiesto de los recursos de streaming.

Este encabezado incluye valores predeterminados para la información que necesita un cliente de PlayReady para solicitar una licencia para esta parte de contenido concreta. Por ejemplo, un cliente de PlayReady debe saber qué identificadores de clave (KID) se usan en el recurso para que pueda solicitar los valores de clave. También debe conocer la dirección de un servidor de licencias que entregará esta licencia. Opcionalmente, debe saber qué página web representar al usuario en caso de que el servidor de licencias rechace una solicitud de licencia (el usuario puede dirigirse a una página de pago).

Este es un ejemplo de un encabezado 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>

Cuando un cliente de PlayReady necesite reproducir contenido protegido, solicitará una licencia para el contenido si aún no tiene ninguna. Para iniciar la solicitud de licencia, el desarrollador de aplicaciones puede haber aprovisionado la aplicación con valores dinámicos o codificados de forma rígida para la matriz KID, LA_URL y el comportamiento en caso de denegación de solicitud de licencia. La aplicación ha invalidado los valores predeterminados kid o LA_URL. Si el desarrollador no lo tiene, se espera que el cliente realice la solicitud de licencia en función de los valores predeterminados que se encuentran en el propio encabezado de contenido.

En el caso de los archivos ISO mp4, Microsoft recomienda seguir la especificación de formato ISO e insertar el encabezado PlayReady en un cuadro "pssh".

Ejemplo de un archivo MP4 que contiene un objeto PlayReady

En la ilustración siguiente se muestra un archivo MP4 segmentado con un objeto PlayReady que contiene un encabezado playReady:

PlayReady Header in MP4

Esta es la vista HEX de este archivo:

PlayReady Object Hex Dump

En la ilustración siguiente se muestra un archivo MP4 segmentado con un objeto PlayReady que contiene un encabezado playReady y otro objeto playReady que contiene un almacén de licencias insertado de PlayReady:

PlayReady Header and ELS in MP4

Para los recursos de streaming adaptables, Microsoft recomienda insertar el encabezado PlayReady en el manifiesto del recurso.

Ejemplo de un manifiesto MPEG-DASH que contiene un encabezado 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>

Consulte también

Formatos admitidos

Contenido del servidor de prueba de PlayReady