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, ovvero gli schemi di protezione AES-CBC e "cenc" AES-CTR. Vedere ISO/IEC FDIS 23001-7:2016 "Information technology – MPEG systems technologies – Part 7: Common encryption in ISO base media file format files"

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 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 ne ha ancora. 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 eseguito l'override di KID o LA_URL valori predefiniti. In caso contrario, il client deve eseguire la richiesta di licenza in base ai 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 un file MP4 contenente un oggetto PlayReady

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

PlayReady Header in MP4

Ecco la visualizzazione HEX di questo file:

PlayReady Object Hex Dump

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 PlayReady Embedded:

PlayReady Header and 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>

Vedi anche

Formati supportati

Contenuto del server di test PlayReady