Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
Ecco la visualizzazione HEX di questo file:
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:
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>