- Ressource basée sur MP4. CMAF préféré.
- Manifeste DASH.
- Mêmes clés le long de la ressource : les clés ne changent pas au fil du temps.
- Même clé unique pour toutes les pistes et représentations (débits binaires) ou clés différentes pour différentes pistes et représentations (débits binaires). Par exemple, une clé différente peut être utilisée pour toutes les pistes vidéo supérieures à 1080p afin de restreindre l’accès à la résolution 4K pour certains clients.
Pris en charge
Prise en charge dans la version 1507 ou ultérieure avec la <mspr:pro>
balise du profil en direct avec des manifestes statiques (contenu à la demande).
Prise en charge dans la version 1703 ou ultérieure avec la <mspr:pro>
balise du profil en direct avec des manifestes dynamiques (contenu en direct).
Le manifeste DASH contient un objet PlayReady incluant un en-tête PlayReady à l’aide de la <mspr:pro>
balise dans le <Period>
nœud. Si différentes clés sont utilisées pour différentes pistes ou débits de transmission, le manifeste DASH peut avoir plusieurs objets PlayReady dans les plusieurs <AdaptationSet>
ou <Representation>
nœuds à la place.
Remarque
Il est possible d’insérer les objets PlayReady à l’intérieur des segments init des différents <AdaptationSet>
nœuds. Si les objets PlayReady sont trouvés à la fois dans les segments init et dans le manifeste, ceux du manifeste sont prioritaires.
Les manifestes DASH avec une balise standard <cenc:pssh>
pour les ressources à la demande et en direct sont pris en charge dans la version RS5 ou ultérieure. Dans ce cas, tout le contenu d’une boîte pssh blindée en base 64 est inclus dans le manifeste. Ce n’est pas seulement un objet PlayReady.
Pour une compatibilité accrue, Microsoft vous recommande de générer des manifestes DASH qui incluent les objets PlayReady dupliqués dans les balises et <cenc:pssh>
les <mspr:pro>
balises.
<?xml version="1.0" encoding="utf-8"?>
<MPD ...>
<Period>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
<cenc:pssh>
<!--base64-encoded PlayReady ‘pssh’ complete box-->
</cenc:pssh>
<mspr:pro>
<!--base64-encoded PlayReady object -->
</mspr:pro>
</ContentProtection>
<AdaptationSet ...>
<Representation bandwidth="315108" codecs="avc1.64002A" frameRate="25" height="720" id="video/avc1" scanType="progressive" width="1280">
Exemple
Manifeste DASH avec une <mspr:pro>
balise, pour une ressource chiffrée 'cenc'
<?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="PT1H58M29.077S" minBufferTime="PT3S">
<Period>
<AdaptationSet id="1" group="1" profiles="ccff" bitstreamSwitching="false" 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="80AA1CD0-A71D-4F86-A939-05FAF9B0CDC5"/>
<ContentProtection schemeIdUri="urn:uuid:9A04F079-9840-4286-AB92-E65BE0885F95" value="2.0" cenc:default_KID="80AA1CD0-A71D-4F86-A939-05FAF9B0CDC5">
<mspr:pro>TgMAAAEAAQBEAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AMABCAHkAcQBnAEIAMgBuAGgAawArAHAATwBRAFgANgArAGIARABOAHgAUQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBJAEkAdgBrAGEATgBOAGIAMwBtAGMAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwB0AHIAYQBpAG4AcAByAC4AawBlAHkAZABlAGwAaQB2AGUAcgB5AC4AYwBlAG4AdAByAGEAbAB1AHMALgBtAGUAZABpAGEALgBhAHoAdQByAGUALgBuAGUAdAAvAFAAbABhAHkAUgBlAGEAZAB5AC8APAAvAEwAQQBfAFUAUgBMAD4APABDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APABJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ADgALgAwAC4AMQA4ADAANQAuADMAMwA8AC8ASQBJAFMAXwBEAFIATQBfAFYARQBSAFMASQBPAE4APgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A</mspr:pro>
</ContentProtection>
<SegmentTemplate timescale="10000000" media="QualityLevels($Bandwidth$)/Fragments(video=$Time$,format=mpd-time-csf)" initialization="QualityLevels($Bandwidth$)/Fragments(video=i,format=mpd-time-csf)">
<SegmentTimeline>
<S d="20000000" r="3553"/>
<S d="10000000"/>
</SegmentTimeline>
</SegmentTemplate>
<Representation id="1_V_video_1" bandwidth="2984405" width="1920" height="1080"/>
<Representation id="1_V_video_2" bandwidth="2603504" width="1920" height="1080"/>
Manifeste DASH avec une <mspr:pro>
<cenc:pssh>
balise
<?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="PT52.208S" minBufferTime="PT3S">
<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="cenc" cenc:default_KID="10000000-1000-1000-1000-100000000001">
<cenc:pssh>AAADvnBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAA56eAwAAAQABAJQDPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBBAEEAQQBBAEUAQQBBAFEAQQBCAEEAUQBBAEIAQQBBAEEAQQBBAEEAQQBRAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+ADUAVAB6AEkAWQBRADIAaAByAE8AWQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcAA6AC8ALwBwAGwAYQB5AHIAZQBhAGQAeQAuAGQAaQByAGUAYwB0AHQAYQBwAHMALgBuAGUAdAAvAHAAcgAvAHMAdgBjAC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPwBQAGwAYQB5AFIAaQBnAGgAdAA9ADEAJgBhAG0AcAA7AFUAcwBlAFMAaQBtAHAAbABlAE4AbwBuAFAAZQByAHMAaQBzAHQAZQBuAHQATABpAGMAZQBuAHMAZQA9ADEAPAAvAEwAQQBfAFUAUgBMAD4APABDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APABJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ADcALgAxAC4AMQA1ADYANQAuADQAPAAvAEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4APAAvAEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</cenc:pssh>
</ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value="2.0" cenc:default_KID="10000000-1000-1000-1000-100000000001">
<mspr:pro>ngMAAAEAAQCUAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AQQBBAEEAQQBFAEEAQQBRAEEAQgBBAFEAQQBCAEEAQQBBAEEAQQBBAEEAUQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgA1AFQAegBJAFkAUQAyAGgAcgBPAFkAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALgBkAGkAcgBlAGMAdAB0AGEAcABzAC4AbgBlAHQALwBwAHIALwBzAHYAYwAvAHIAaQBnAGgAdABzAG0AYQBuAGEAZwBlAHIALgBhAHMAbQB4AD8AUABsAGEAeQBSAGkAZwBoAHQAPQAxACYAYQBtAHAAOwBVAHMAZQBTAGkAbQBwAGwAZQBOAG8AbgBQAGUAcgBzAGkAcwB0AGUAbgB0AEwAaQBjAGUAbgBzAGUAPQAxADwALwBMAEEAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwASQBJAFMAXwBEAFIATQBfAFYARQBSAFMASQBPAE4APgA3AC4AMQAuADEANQA2ADUALgA0ADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</mspr:pro>
</ContentProtection>
<SegmentTemplate timescale="10000000" media="$Bandwidth$/Fragments(video=$Time$,format=mpd-time-csf).mp4" initialization="$Bandwidth$/Fragments(video=i,format=mpd-time-csf)_no_pro.mp4">
<SegmentTimeline>
<S d="19999967"/><S d="19999969"/><S d="19999967"/><S d="19999968"/><S d="19999970"/><S d="19999967" r="1"/><S d="19999968" r="1"/><S d="19999969"/><S d="19999967"/><S d="19999968" r="2"/><S d="19999969"/><S d="19999968"/><S d="19999967"/><S d="19999969" r="1"/><S d="19999967" r="1"/><S d="19999970"/><S d="19999968" r="1"/><S d="19999967" r="1"/><S d="1249999"/>
</SegmentTimeline>
</SegmentTemplate>
<Representation id="1_V_video_1" bandwidth="6000000" width="1920" height="1080"/>
Manifeste DASH avec une <mspr:pro>
balise, pour une ressource chiffrée « cbcs »
<?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>uAIAAAEAAQCuAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADMALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AZQB4AHAAZQByAGkAbQBlAG4AdABhAGwAMQAuAGEAegB1AHIAZQB3AGUAYgBzAGkAdABlAHMALgBuAGUAdAAvAHIAaQBnAGgAdABzAG0AYQBuAGEAZwBlAHIALgBhAHMAbQB4AD8AYwBmAGcAPQAoAGMAawA6AFcAMwAxAGIAZgBWAHQAOQBXADMAMQBiAGYAVgB0ADkAVwAzADEAYgBmAFEAPQA9ACwAYwBrAHQAOgBBAEUAUwAxADIAOABCAGkAdABDAEIAQwApADwALwBMAEEAXwBVAFIATAA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEkARABTAD4APABLAEkARAAgAEEATABHAEkARAA9ACIAQQBFAFMAQwBCAEMAIgAgAFYAQQBMAFUARQA9ACIAQQBBAEEAQQBFAEEAQQBRAEEAQgBBAFEAQQBCAEEAQQBBAEEAQQBBAEEAUQA9AD0AIgA+ADwALwBLAEkARAA+ADwALwBLAEkARABTAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A</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" />
Fichiers MP4
[init segment] separate file for a dash stream. Includes only the moov box
[moov]
[pssh] pssh box for PlayReady. Includes a PRO including a PRH with KID and LA_URL (optional)
[pssh] pssh box for other DRM
[any segment]
[moof] movie fragment header
[traf] track fragment
[senc] sample encryption box. Includes Sample Initialization Vectors
[mdat] movie fragment data
Vecteurs de test
Voir le contenu de test sur le serveur de test
- Ressource basée sur MP4.
- Manifeste DASH.
- Les clés changent de temps en temps sur la durée de la ressource, par période.
- Même clé unique pour toutes les pistes et représentations (débits binaires) ou clés différentes pour différentes pistes et représentations (débits binaires).
Pris en charge
Dash à plusieurs périodes limitées est pris en charge dans la version 1803 et ultérieure.
Le manifeste DASH contient plusieurs <Period>
nœuds, qui sont limités (par exemple, ont toutes les mêmes caractéristiques que le nombre de pistes, etc.). Dans chacun de ces <Period>
nœuds, il existe des objets PlayReady insérés au niveau ou <Representation>
<AdaptationSet>
au <Period>
niveau, car des clés de chiffrement différentes sont utilisées.
Exemple
Manifeste DASH
<?xml version="1.0" encoding="utf-8"?>
<MPD ...>
<Period>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value="2.0" cenc:default_KID="10000000-1000-1000-1000-100000000001">
<mspr:pro>...</mspr:pro>
</ContentProtection>
<AdaptationSet ...>
<Representation bandwidth="315108" codecs="avc1.64002A" frameRate="25" height="720" id="video/avc1" scanType="progressive" width="1280">
<SegmentList duration="4000" timescale="1000">
<Initialization sourceURL="video/avc1/init.mp4"/>
<SegmentURL media="video/avc1/seg-1.mp4"/>
...
</Period>
<Period>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value="2.0" cenc:default_KID="10000000-1000-1000-1000-100000000001">
<mspr:pro>...</mspr:pro>
</ContentProtection>
<AdaptationSet ...>
Fichiers MP4
[init segment] separate file for a dash stream. Includes only the moov box
[moov]
[pssh] pssh box for PlayReady. Includes a PRO including a PRH with KID and LA_URL (optional)
[pssh] pssh box for other DRM
[any segment]
[moof] movie fragment header
[traf] track fragment
[senc] sample encryption box. Includes Sample Initialization Vectors
[mdat] movie fragment data
Vecteurs de test
Voir le contenu de test sur le serveur de test
- Ressource basée sur MP4.
- Manifeste DASH.
- Les clés changent de temps en temps ou fréquemment pendant la durée de la ressource, livrées à l’aide de licences Incorporées PlayReady insérées dans le flux.
- Même clé unique pour toutes les pistes et représentations (débits binaires) ou clés différentes pour différentes pistes et représentations (débits binaires).
Pris en charge
DASH avec rotation des clés à l’aide de licences incorporées est pris en charge dans la version 1803 ou ultérieure.
Le manifeste ou le segment init inclut l’en-tête PlayReady spécial <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
.
Le segment init contient éventuellement le ou les kid(s) par défaut utilisés dans la zone Box Track Encryption box tenc
(moov/trak/mdia/minf/stbl/stsd/sinf/schi/tenc
).
Chaque fois que la clé de contenu fait pivoter, le segment MP4 contient le ou les nouveaux KID utilisés par le segment dans la zone Exemple de zone de description sgpd
du groupe (moof/traf/sgpd/seig
). Il contient également dans l’en-tête moof/pssh
de fragment une licence Feuille PlayReady incorporée dans le contenu. Ces licences PlayReady Leaf sont liées aux licences racines PlayReady de la ressource.
L’application doit inclure une logique pour demander de manière proactive les licences racines.
Exemple
Manifeste DASH
<?xml version="1.0" encoding="utf-8"?>
<SmoothStreamingMedia MajorVersion="2" MinorVersion="2" TimeScale="10000000" IsLive="TRUE" Duration="7200000000" LookAheadFragmentCount="2" DVRWindowLength="7200000000">
<Protection>
<ProtectionHeader SystemID="9a04f079-9840-4286-ab92-e65be0885f95">
8AEAAAEAAQDmATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADEALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APABJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ADcALgAxAC4AMQA1ADcAMgAuADEAOAA8AC8ASQBJAFMAXwBEAFIATQBfAFYARQBSAFMASQBPAE4APgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwARABFAEMAUgBZAFAAVABPAFIAUwBFAFQAVQBQAD4ATwBOAEQARQBNAEEATgBEADwALwBEAEUAQwBSAFkAUABUAE8AUgBTAEUAVABVAFAAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</ProtectionHeader>
</Protection>
<StreamIndex ...
Fichiers MP4
[any segment where the key(s) rotate(s)]
[moof] movie fragment header
[traf] track fragment
[sgpd] Sample Group Description box
[seig] List of the KID(s) for this fragment and beyond
[mdat] movie fragment data
Exemple de fichier de segment MP4 lors de la rotation de la clé
[moof]
[traf]
[sgpd] 00 00 00 2C 73 67 70 64 01 00 00 00 73 65 69 67 ...,sgpd....seig
00 00 00 14 00 00 00 01 00 00 01 08 57 48 35 6D ............WH5m
82 C0 40 54 81 BC FD 89 45 2E FF ED ..@T....E...
[mdat]
- Ressource basée sur MP4. CMAF préféré.
- Playlist principale HLS (m3u8) et playlists individuelles (m3u8) pour les différentes pistes et vitesses de transmission.
- Mêmes clés le long de la ressource : les clés ne changent pas au fil du temps.
- Même clé unique pour toutes les pistes et toutes les vitesses de transmission, ou différentes clés pour différentes pistes et vitesses de transmission.
Pris en charge
Mode de chiffrement « cbcs », avec des clés fournies par PlayReady : pris en charge sur Xbox One, One S, One X depuis la mise à jour de janvier 2018
- Chaque playlist individuelle doit inclure un PRO qui contient un PRH qui contient le KID de la playlist, à l’aide de la
#EXT-X-KEY:METHOD=SAMPLE-AES
balise.
- La playlist principale doit inclure un PRO qui contient un PRH qui contient tous les KID utilisés dans toutes les playlists, à l’aide de la
#EXT-X-SESSION-KEY:METHOD=SAMPLE-AES
balise. Bien que cette balise ne soit pas requise par la norme, elle est requise pour Windows 10 et Xbox One/One S/One X à lire.
Mode de chiffrement « cenc », avec des clés fournies par PlayReady : prise en charge sur Windows 10 et Xbox One, One S, One X dans la version 1803 ou ultérieure.
- Chaque playlist individuelle doit inclure un PRO qui contient un PRH qui contient le KID de la playlist, à l’aide de la
#EXT-X-KEY:METHOD=SAMPLE-AES-CTR
balise.
- La playlist principale doit inclure un PRO qui contient un PRH qui contient tous les KID utilisés dans toutes les playlists, à l’aide de la
#EXT-X-SESSION-KEY:METHOD=SAMPLE-AES-CTR
balise. Bien que cette balise ne soit pas requise par la norme, elle est requise pour Windows 10 et Xbox One/One S/One X à lire.
Remarque : la balise #EXT-X-PLAYREADYHEADER
HLS est prise en charge dans la version 1803 et ultérieure à des fins héritées. Microsoft recommande toujours d’utiliser la balise standard #EXT-X-KEY
dans les playlists HLS.
Exemple
Playlist principale
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,KEYFORMAT="com.microsoft.playready",KEYFORMATVERSIONS="1",URI="data:text/plain;charset=UTF-16;base64,xAEAAAEAAQC6ATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AdgBHAFYAagBOAEsAZwBZAE0ARQBxAHAATwBMAGgAMQBWAGQAUgBUADAAQQA9AD0APAAvAEsASQBEAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA="
Sélection individuelle
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-KEY:METHOD=SAMPLE-AES,KEYFORMAT="com.microsoft.playready",KEYFORMATVERSIONS="1",URI="data:text/plain;charset=UTF-16;base64,xAEAAAEAAQC6ATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AdgBHAFYAagBOAEsAZwBZAE0ARQBxAHAATwBMAGgAMQBWAGQAUgBUADAAQQA9AD0APAAvAEsASQBEAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA="
Étant donné que la balise non standard #EXT-X-PLAYREADYHEADER
a été utilisée dans les playlists HLS pour transporter l’en-tête PlayReady pendant un certain temps, Windows 10 et Xbox prennent en charge cette balise dans les playlists HLS dans la version 1803 ou ultérieure.
Certains développeurs ont utilisé la #EXT-X-PLAYREADYHEADER
balise dans les playlists HLS depuis 2010 pour développer des systèmes PlayReady basés sur MPEG2-TS avant que LE HLS basé sur des fichiers MP4 ne soit devenu répandu. Ce format n’est pas pris en charge dans Windows 10 ou Xbox dans n’importe quelle version. Toutefois, il peut être possible de développer une application de lecteur qui effectue l’analyse de playlist et de conteneur et peut lire ces ressources dans un Windows ou application Xbox.
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-PLAYREADYHEADER:XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4ANABSAHAAbABiACsAVABiAE4ARQBTADgAdABHAGsATgBGAFcAVABFAEgAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBLAEwAagAzAFEAegBRAFAALwBOAEEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADcAMQAzAC4AMQAzADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="aac_UND_2_128",DEFAULT=YES,URI="QualityLevels(128003)/Manifest(aac_UND_2_128,format=m3u8-aapl)"
#EXT-X-STREAM-INF:BANDWIDTH=1138489,RESOLUTION=640x288,CODECS="avc1.640015,mp4a.40.2",AUDIO="audio"
QualityLevels(970010)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1138489,RESOLUTION=640x288,CODECS="avc1.640015",URI="QualityLevels(970010)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=2376263,RESOLUTION=960x428,CODECS="avc1.64001e,mp4a.40.2",AUDIO="audio"
QualityLevels(2181139)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=2376263,RESOLUTION=960x428,CODECS="avc1.64001e",URI="QualityLevels(2181139)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=3513624,RESOLUTION=1280x572,CODECS="avc1.64001f,mp4a.40.2",AUDIO="audio"
QualityLevels(128003)/Manifest(aac_UND_2_128,format=m3u8-aapl)
Vecteurs de test
Voir le contenu de test sur le serveur de test
- Ressource basée sur MP4. CMAF a préféré.
- Playlist principale HLS (m3u8) et listes de lecture individuelles (m3u8) pour les différentes pistes et débits.
- Les clés changent de temps en temps sur la durée de l’élément multimédia, par période.
- Même clé unique pour toutes les pistes et débits de bits, ou des clés différentes pour différentes pistes et débits de bits.
Pris en charge
À la demande : Les ressources HLS avec des clés qui changent de temps en temps sont prises en charge pour le contenu à la demande en tant que clés statiques HLS. La playlist principale et les listes de lecture individuelles doivent contenir #EXT-X-SESSION-KEY
et #EXT-X-KEY
étiquettes.
Les playlists indivual contiennent une #EXT-X-KEY
balise chaque fois que les clés de chiffrement changent.
Vivre: Les ressources HLS avec des clés qui changent ne sont pas prises en charge pour le contenu en direct où les clés de chiffrement ne sont pas toutes présentes dans les playlists au démarrage de la lecture. Il est possible de créer une application qui la prend en charge. L’application a la logique de sniffler les playlists pendant qu’elles sont actualisées et de demander les licences pour les clés de chiffrement nécessaires après la rotation.
Exemple
Liste de lecture principale
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,KEYFORMAT="com.microsoft.playready",KEYFORMATVERSIONS="1",URI="data:text/plain;charset=UTF-16;base64,xAEAAAEAAQC6ATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AdgBHAFYAagBOAEsAZwBZAE0ARQBxAHAATwBMAGgAMQBWAGQAUgBUADAAQQA9AD0APAAvAEsASQBEAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA="
Sélection individuelle
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-KEY:METHOD=SAMPLE-AES,KEYFORMAT="com.microsoft.playready",KEYFORMATVERSIONS="1",URI="data:text/plain;charset=UTF-16;base64,xAEAAAEAAQC6ATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AdgBHAFYAagBOAEsAZwBZAE0ARQBxAHAATwBMAGgAMQBWAGQAUgBUADAAQQA9AD0APAAvAEsASQBEAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA="
#EXT-X-KEY:METHOD=SAMPLE-AES,KEYFORMAT="com.microsoft.playready",KEYFORMATVERSIONS="1",URI="data:text/plain;charset=UTF-16;base64,xAEAAAEAAQC6ATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AdgBHAFYAagBOAEsAZwBZAE0ARQBxAHAATwBMAGgAMQBWAGQAUgBUADAAQQA9AD0APAAvAEsASQBEAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA="
#EXT-X-KEY:METHOD=SAMPLE-AES,KEYFORMAT="com.microsoft.playready",KEYFORMATVERSIONS="1",URI="data:text/plain;charset=UTF-16;base64,xAEAAAEAAQC6ATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AdgBHAFYAagBOAEsAZwBZAE0ARQBxAHAATwBMAGgAMQBWAGQAUgBUADAAQQA9AD0APAAvAEsASQBEAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA="
- Ressource basée sur MP4. CMAF a préféré.
- Playlist principale HLS (m3u8) et listes de lecture individuelles (m3u8) pour les différentes pistes et débits.
- Les clés changent de temps en temps ou fréquemment sur la durée de la ressource, livrées à l’aide de licences Incorporées PlayReady insérées dans le flux.
- Même clé unique pour toutes les pistes et débits de bits, ou des clés différentes pour différentes pistes et débits de bits.
Pris en charge
Les ressources HLS avec des clés pivotantes utilisant des licences incorporées sont prises en charge pour le contenu à la demande et en direct dans la version 1803 et ultérieure.
La playlist principale et les listes de lecture individuelles contiennent et étiquettes#EXT-X-SESSION-KEY
, qui incluent l’en-tête PlayReady spécial<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
.#EXT-X-KEY
Les segments MP4 contiennent dans l’en-tête moof/uuid/pssh
de fragment une licence PlayReady Leaf incorporée dans le contenu, chaque fois que la clé de contenu pivote. Ces licences PlayReady Leaf sont liées aux licences racine PlayReady de la ressource.
L’application doit inclure une logique pour demander de manière proactive les licences racines.
Exemple
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-KEY:METHOD=SAMPLE-AES,KEYFORMAT="com.microsoft.playready",KEYFORMATVERSIONS="1",URI="data:text/plain;charset=UTF-16;base64,8AEAAAEAAQDmATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADEALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APABJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ADcALgAxAC4AMQA1ADcAMgAuADEAOAA8AC8ASQBJAFMAXwBEAFIATQBfAFYARQBSAFMASQBPAE4APgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwARABFAEMAUgBZAFAAVABPAFIAUwBFAFQAVQBQAD4ATwBOAEQARQBNAEEATgBEADwALwBEAEUAQwBSAFkAUABUAE8AUgBTAEUAVABVAFAAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA=="
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="aac_UND_2_128",DEFAULT=YES,URI="QualityLevels(128003)/Manifest(aac_UND_2_128,format=m3u8-aapl)"
#EXT-X-STREAM-INF:BANDWIDTH=1138489,RESOLUTION=640x288,CODECS="avc1.640015,mp4a.40.2",AUDIO="audio"
QualityLevels(970010)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1138489,RESOLUTION=640x288,CODECS="avc1.640015",URI="QualityLevels(970010)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=2376263,RESOLUTION=960x428,CODECS="avc1.64001e,mp4a.40.2",AUDIO="audio"
QualityLevels(2181139)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=2376263,RESOLUTION=960x428,CODECS="avc1.64001e",URI="QualityLevels(2181139)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=3513624,RESOLUTION=1280x572,CODECS="avc1.64001f,mp4a.40.2",AUDIO="audio"
QualityLevels(128003)/Manifest(aac_UND_2_128,format=m3u8-aapl)
En-tête PlayReady dans la playlist principale et les playlists individuelles :
<WRMHEADER version="4.2.0.0" xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader">
<DATA>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
- Ressource basée sur MP4. Format PIFF.
- Manifeste smooth Streaming.
- Mêmes clés le long de la ressource : les clés ne changent pas au fil du temps.
- Même clé unique pour toutes les pistes ()et débits de bits (
<StreamIndex>
<QualityLevel>
) ou des clés différentes pour les différentes pistes (<StreamIndex>
) et les différentes vitesses de transmission (<QualityLevel>
).
Pris en charge
Smooth Streaming avec lecture PlayReady est pris en charge dans la version 1803 et ultérieure. Dans les versions antérieures, il est possible de créer une application qui les lit, en analysant le manifeste et les segments par programmation. Les Kits de développement logiciel (SDK) Smooth Streaming ou haSplayer peuvent être utilisés pour implémenter cette analyse et cette logique.
Un objet PlayReady contenant tous les KID utilisés pour l’ensemble de la ressource est inséré dans le manifeste dans le nœud de niveau supérieur (<SmoothStreamingMedia>
) à l’aide de cette syntaxe : <Protection><ProtectionHeader SystemID="9a04f079-9840-4286-ab92-e65be0885f95">...</ProtectionHeader><Protection>
Lorsque des clés différentes sont utilisées pour différentes pistes () ou des débits de bits différents (<StreamIndex>
<QualityLevel>
), l’objet PlayReady est toujours inséré dans le nœud de niveau supérieur du manifeste (SmoothStreamingMedia
); l’objet PlayReady contient une version 4.2.0.0.0 minimum, qui répertorie plusieurs KID.
Remarque
Les ressources smooth Streaming n’incluent pas de segment init comme les ressources DASH.
Exemple
Manifeste Smooth Streaming
<?xml version="1.0" encoding="UTF-8"?>
<SmoothStreamingMedia MajorVersion="2" MinorVersion="1" Duration="1209510000">
<StreamIndex Chunks="61" DisplayWidth="1280" Type="video" MaxWidth="1280" Url="QualityLevels({bitrate})/Fragments(video={start time})" MaxHeight="720" QualityLevels="8" Name="video" DisplayHeight="720">
<QualityLevel Index="1" Bitrate="331000" FourCC="H264" MaxWidth="284" MaxHeight="160" />
<QualityLevel Index="2" Bitrate="230000" FourCC="H264" MaxWidth="224" MaxHeight="128" />
<c d="20020000" />
<c d="20020000" />
<c d="20020000" />
</StreamIndex>
<StreamIndex Chunks="61" Index="0" Type="audio" Url="QualityLevels({bitrate})/Fragments(audio={start time})" QualityLevels="1" Name="audio">
<QualityLevel AudioTag="255" BitsPerSample="16" Bitrate="128000" FourCC="AACL" CodecPrivateData="1210" Channels="2" PacketSize="4" SamplingRate="44100" />
<c d="20201360" />
<c d="19969161" />
<c d="19969161" />
</StreamIndex>
<Protection>
<ProtectionHeader SystemID="9a04f079-9840-4286-ab92-e65be0885f95">XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4ANABSAHAAbABiACsAVABiAE4ARQBTADgAdABHAGsATgBGAFcAVABFAEgAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBLAEwAagAzAFEAegBRAFAALwBOAEEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADgAMAA1AC4AMwAzADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</ProtectionHeader>
</Protection>
</SmoothStreamingMedia>
Fichiers de ressources
[representation] MP4 file for each track or bitrate
[moof] movie fragment header
[traf] track fragment
[uuid]
[senc] sample encryption box. Includes Sample Initialization Vectors
[mdat] movie fragment data
Vecteurs de test
Voir le contenu de test sur le serveur de test
- Ressource basée sur MP4. Format PIFF.
- Manifeste smooth Streaming.
- Les clés changent de temps en temps ou fréquemment sur la durée de la ressource, livrées à l’aide de licences PlayReady Leaf incorporées dans le flux, liées aux licences racine PlayReady.
- Même clé unique pour toutes les pistes ()et débits de bits (
<StreamIndex>
<QualityLevel>
) ou des clés différentes pour les différentes pistes (<StreamIndex>
) et les différentes vitesses de transmission (<QualityLevel>
).
Pris en charge
Smooth Streaming avec lecture PlayReady avec licences incorporées est pris en charge dans la version 1803 et ultérieure.
Le manifeste inclut l’en-tête PlayReady spécial <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
, à l’aide de cette syntaxe : <Protection><ProtectionHeader SystemID="9a04f079-9840-4286-ab92-e65be0885f95">...</ProtectionHeader><Protection>
.
Les fichiers MP4 incluent des licences incorporées incluses dans les pssh
zones. L’application doit implémenter la logique pour acquérir de manière proactive les licences racine PlayReady nécessaires pour les licences Feuille incorporées.
Exemple
Voici le manifeste Smooth Streaming extrait du flux de test http://playready.directtaps.net/media/live/channel01.isml/Manifest
<?xml version="1.0" encoding="utf-8"?>
<SmoothStreamingMedia MajorVersion="2" MinorVersion="2" TimeScale="10000000" IsLive="TRUE" Duration="7200000000" LookAheadFragmentCount="2" DVRWindowLength="7200000000">
<Protection>
<ProtectionHeader SystemID="9a04f079-9840-4286-ab92-e65be0885f95">
8AEAAAEAAQDmATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADEALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APABJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ADcALgAxAC4AMQA1ADcAMgAuADEAOAA8AC8ASQBJAFMAXwBEAFIATQBfAFYARQBSAFMASQBPAE4APgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwARABFAEMAUgBZAFAAVABPAFIAUwBFAFQAVQBQAD4ATwBOAEQARQBNAEEATgBEADwALwBEAEUAQwBSAFkAUABUAE8AUgBTAEUAVABVAFAAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</ProtectionHeader>
</Protection>
<StreamIndex ...
Le manifeste inclut l’en-tête PlayReady :
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.1.0.0">
<DATA>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
Fichier PIFF
[any fragment where the key(s) rotate(s)]
[moof] movie fragment header
[traf] track fragment
[sgpd] Sample Group Description box
[seig] List of the KID(s) for this fragment and beyond
[mdat] movie fragment data
Exemple d’en-tête de fragment MP4 lorsque la clé pivote
[moof]
[traf]
[sgpd] 00 00 00 2C 73 67 70 64 01 00 00 00 73 65 69 67 ...,sgpd....seig
00 00 00 14 00 00 00 01 00 00 01 08 57 48 35 6D ............WH5m
82 C0 40 54 81 BC FD 89 45 2E FF ED ..@T....E...
[mdat]