Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Chiffrement du contenu
Le packager doit chiffrer le contenu. Tout format de chiffrement qui utilise des clés AES-128 utilisées en mode CTR ou en mode CBC est autorisé par les règles de conformité.
Les formats MP4 sont recommandés. CMAF est le format MP4 préféré pour les clients PlayReady, Windows 10 et Xbox One.
Microsoft prend en charge les deux schémas de chiffrement courants qui ont une large acceptation dans l'industrie : les schémas de protection « cbcs » AES-CBC et « cenc » AES-CTR. Voir ISO/IEC FDIS 23001-7:2016 « Technologies de l’information – Technologies des systèmes MPEG – Partie 7 : Chiffrement commun dans les fichiers de format de fichier multimédia de base ISO »
Pour plus d’informations, consultez Chiffrement et remise de contenu
Insertion d’un en-tête PlayReady dans le contenu
Le packager doit insérer l’en-tête PlayReady qu’il a généré dans le contenu. Il est généralement inséré dans l’en-tête des fichiers de contenu ou dans le manifeste des ressources de diffusion en continu.
Cet en-tête inclut des valeurs par défaut pour les informations nécessaires par un client PlayReady pour demander une licence pour ce contenu particulier. Par exemple, un client PlayReady doit savoir quels ID de clé (KID) sont utilisés dans la ressource afin qu’il puisse demander les valeurs de clé. Il doit également connaître l’adresse d’un serveur de licences qui fournira cette licence. Il doit éventuellement savoir quelle page web rendre à l’utilisateur au cas où une demande de licence est refusée par le serveur de licences (l’utilisateur peut être dirigé vers une page de paiement).
Voici un exemple d’en-tête 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>
Lorsqu’un client PlayReady doit lire du contenu protégé, il demande une licence pour le contenu s’il n’en a pas encore. Pour lancer la demande de licence, le développeur de l’application peut avoir approvisionné l’application avec des valeurs codées en dur ou dynamiques pour le tableau KID, LA_URL et le comportement en cas de refus de demande de licence. L'application a remplacé les valeurs par défaut KID ou LA_URL. Si le développeur ne l’a pas fait, le client est censé effectuer la demande de licence en fonction des valeurs par défaut trouvées dans l’en-tête de contenu lui-même.
Pour les fichiers ISO MP4, Microsoft recommande de suivre la spécification de format ISO et d’insérer l’en-tête PlayReady dans une zone « pssh ».
Exemple de fichier MP4 contenant un objet PlayReady
La figure suivante montre un fichier MP4 segmenté avec un objet PlayReady qui contient un en-tête PlayReady :

Voici la vue HEX de ce fichier :

La figure suivante montre un fichier MP4 segmenté avec un objet PlayReady qui contient un en-tête PlayReady et un autre objet PlayReady qui contient un magasin de licences PlayReady Embedded :

Pour les ressources de diffusion en continu adaptative, Microsoft recommande d’insérer l’en-tête PlayReady dans le manifeste de la ressource.
Exemple de manifeste MPEG-DASH contenant un en-tête 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>