Condividi tramite


Come creare un pacchetto di contenuto basato su MP4 per PlayReady

Crittografia del contenuto

Il packager deve crittografare il contenuto. Qualsiasi formato di crittografia che usa chiavi AES-128 usate in modalità CTR o CBC è consentito dalle regole di conformità.

Sono consigliati formati basati su MP4. CMAF è il formato basato su MP4 preferito per i client PlayReady, Windows 10 e Xbox One.

Microsoft supporta i due schemi di crittografia comuni che hanno un'ampia accettazione del settore: i "cbcs" AES-CBC e "cenc" AES-CTR schemi di protezione. Vedi ISO/IEC FDIS 23001-7:2016 "Tecnologia dell'informazione – Tecnologie dei sistemi MPEG – Parte 7: Crittografia comune nei file del formato base ISO"

Per altre informazioni, vedere Crittografia del contenuto e recapito

Inserimento di un'intestazione PlayReady nel contenuto

Il packager deve inserire l'intestazione PlayReady generata nel contenuto. Viene in genere inserito nell'intestazione dei file di contenuto o nel manifesto degli asset di streaming.

Questa intestazione include i valori predefiniti per le informazioni necessarie a un client PlayReady per richiedere una licenza per questo particolare pezzo di contenuto. Ad esempio, un client PlayReady deve conoscere gli ID chiave (KID) usati nell'asset in modo che possa richiedere i valori della chiave. Deve anche conoscere l'indirizzo di un server licenze che fornirà questa licenza. Facoltativamente, deve sapere quale pagina Web eseguire il rendering all'utente nel caso in cui una richiesta di licenza venga rifiutata dal server licenze (l'utente può essere indirizzato a una pagina di pagamento).

Ecco un esempio di intestazione 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 un client PlayReady deve riprodurre contenuto protetto, richiederà una licenza per il contenuto se non è ancora disponibile. Per avviare la richiesta di licenza, lo sviluppatore dell'app potrebbe aver effettuato il provisioning dell'app con valori hardcoded o dinamici per la matrice KID, LA_URL e il comportamento in caso di rifiuto di una richiesta di licenza. L'app ha sovrascritto i valori predefiniti di KID o LA_URL. Se lo sviluppatore non l'ha fatto, ci si aspetta che il cliente esegua la richiesta di licenza basandosi sui valori predefiniti trovati nell'intestazione del contenuto stesso.

Per i file ISO MP4, Microsoft consiglia di seguire la specifica del formato ISO e di inserire l'intestazione PlayReady in una casella "pssh".

Esempio di file MP4 contenente un oggetto PlayReady

La figura seguente mostra un file MP4 segmentato con un oggetto PlayReady che contiene un'intestazione PlayReady:

Intestazione PlayReady in MP4

Ecco la visualizzazione HEX di questo file:

Dump esadecimale dell'oggetto PlayReady

La figura seguente mostra un file MP4 segmentato con un oggetto PlayReady che contiene un'intestazione PlayReady e un altro oggetto PlayReady che contiene un archivio licenze incorporato PlayReady:

Intestazione PlayReady ed ELS in MP4

Per gli asset di streaming adattivi, Microsoft consiglia di inserire l'intestazione PlayReady nel manifesto dell'asset.

Esempio di manifesto MPEG-DASH contenente un'intestazione 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>

Vedere anche

Formati supportati

Contenuto del test PlayReady