- Ativo baseado em MP4. CMAF preferencial.
- Manifesto DASH.
- Mesmas chaves ao longo do ativo – chaves não sendo alteradas ao longo do tempo.
- Mesma chave única para todas as faixas e representações (taxas de bits) ou chaves diferentes para diferentes faixas e representações (taxas de bits). Por exemplo, uma chave diferente pode ser usada para todas as faixas de vídeo acima de 1080p para restringir o acesso à resolução 4K para determinados clientes.
Suportado
Com suporte na versão 1507 ou superior com a marca <mspr:pro>
para o Perfil Ao Vivo com manifestos estáticos (conteúdo sob demanda).
Com suporte na versão 1703 ou superior com a marca <mspr:pro>
para o Perfil em Tempo Real com manifestos dinâmicos (conteúdo ao vivo).
O manifesto DASH contém um objeto PlayReady, que inclui um cabeçalho PlayReady usando a <mspr:pro>
marca no nó <Period>
. Se chaves diferentes forem usadas para faixas diferentes ou taxas de bits diferentes, o manifesto DASH poderá ter vários Objetos PlayReady nos vários nós <AdaptationSet>
ou <Representation>
.
Observação
É possível inserir os Objetos PlayReady dentro dos segmentos de inicialização nos diferentes nós <AdaptationSet>
. Se os Objetos PlayReady forem encontrados nos segmentos de inicialização e no manifesto, os que estão no manifesto têm precedência.
Manifestos DASH com uma marca padrão <cenc:pssh>
para ativos sob demanda e ao vivo são suportados na versão RS5 ou superior. Nesse caso, todo o conteúdo de uma caixa pssh blindada na base 64 está incluído no manifesto. Não é apenas um objeto PlayReady.
Para aumentar a compatibilidade, a Microsoft recomenda que você gere manifestos DASH que incluam os Objetos PlayReady duplicados nas marcas <mspr:pro>
e <cenc:pssh>
.
<?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">
Amostra
Manifesto DASH com uma marca <mspr:pro>
, para um ativo criptografado por '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"/>
Manifesto DASH com uma <mspr:pro>
e uma marca <cenc:pssh>
<?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"/>
Manifesto DASH com uma marca <mspr:pro>
, para um ativo criptografado por '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" />
Arquivos 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
Vetores de teste
Veja Conteúdo de Teste no Servidor de Teste
- Ativo baseado em MP4.
- Manifesto DASH.
- Chaves que mudam periodicamente durante a vigência do ativo, em períodos específicos.
- Mesma chave única para todas as faixas e representações (taxas de bits) ou chaves diferentes para diferentes faixas e representações (taxas de bits).
Suportado
O DASH de vários períodos restritos tem suporte na versão 1803 e superior.
O manifesto DASH contém vários nós <Period>
, que são restritos (por exemplo, têm todas as mesmas características, como o número de faixas, entre outros). Em cada um desses <Period>
nós, há objetos PlayReady inseridos nos níveis <Period>
, <AdaptationSet>
ou no nível <Representation>
, à medida que chaves de criptografia diferentes são usadas.
Amostra
Manifesto 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 ...>
Arquivos 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
Vetores de teste
Veja Conteúdo de Teste no Servidor de Teste
- Ativo baseado em MP4.
- Manifesto DASH.
- Chaves que mudam de tempos em tempos ou com frequência durante a duração do recurso, entregues por meio de licenças PlayReady Embedded inseridas na transmissão.
- Mesma chave única para todas as faixas e representações (taxas de bits) ou chaves diferentes para diferentes faixas e representações (taxas de bits).
Suportado
DASH com Rotação de Chaves usando Licenças Inseridas tem suporte na versão 1803 ou superior.
O manifesto ou o segmento de inicialização inclui o cabeçalho especial do PlayReady <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
.
Opcionalmente, o segmento de inicialização contém o(s) KID(s) padrão usado(s) caixa de Criptografia de Rastreamento tenc
(moov/trak/mdia/minf/stbl/stsd/sinf/schi/tenc
).
Sempre que a chave de conteúdo é rotacionada, o segmento MP4 contém o(s) novo(s) KID(s) usado(s) pelo segmento na caixa de Descrição do Grupo de Exemplo sgpd
(moof/traf/sgpd/seig
). E também contém no cabeçalho do fragmento moof/pssh
uma Licença Leaf do PlayReady embutida no conteúdo. Essas licenças do PlayReady Leaf estão vinculadas às Licenças Raiz do PlayReady relacionadas ao ativo.
O aplicativo deve incluir lógica para solicitar proativamente as Licenças Raiz.
Amostra
Manifesto 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 ...
Arquivos 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
Exemplo de um arquivo de segmento MP4 quando a chave gira
[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]
- Ativo baseado em MP4. CMAF preferencial.
- Playlist principal do HLS (m3u8) e playlists individuais (m3u8) para as diferentes faixas e taxas de bits.
- Mesmas chaves ao longo do ativo – chaves não sendo alteradas ao longo do tempo.
- Mesma chave única para todas as faixas e taxas de bits ou chaves diferentes para faixas e taxas de bits diferentes.
Suportado
Modo de criptografia 'cbcs', com chaves entregues pelo PlayReady: com suporte no Xbox One, One S, One X desde a atualização de janeiro de 2018
- Cada playlist individual deve incluir um PRO que contenha um PRH que contenha o KID da playlist, usando a marca
#EXT-X-KEY:METHOD=SAMPLE-AES
.
- A playlist mestra deve incluir um PRO que contenha um PRH que contenha todos os KIDs usados em todas as playlists, usando a marca
#EXT-X-SESSION-KEY:METHOD=SAMPLE-AES
. Embora essa marca não seja exigida pelo padrão, ela é necessária para que o Windows 10 e o Xbox One/One S/One X funcionem corretamente.
Modo de criptografia 'cenc', com chaves entregues pelo PlayReady: com suporte no Windows 10 e Xbox One, One S, One X na versão 1803 ou superior.
- Cada playlist individual deve incluir um PRO que contenha um PRH que contenha o KID da playlist, usando a marca
#EXT-X-KEY:METHOD=SAMPLE-AES-CTR
.
- A playlist mestra deve incluir um PRO que contenha um PRH que contenha todos os KIDs usados em todas as playlists, usando a marca
#EXT-X-SESSION-KEY:METHOD=SAMPLE-AES-CTR
. Embora essa marca não seja exigida pelo padrão, ela é necessária para reprodução no Windows 10 e Xbox One/One S/One X.
Observação: o tag HLS #EXT-X-PLAYREADYHEADER
tem suporte na versão 1803 e posterior para fins de legado. A Microsoft ainda recomenda usar a marca padrão #EXT-X-KEY
em playlists do HLS.
Amostra
Playlist principal
#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="
Playlist individual
#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="
Como a marca não padrão #EXT-X-PLAYREADYHEADER
foi usada em playlists HLS para carregar o Cabeçalho PlayReady por algum tempo, o Windows 10 e o Xbox dão suporte a essa tag em playlists HLS na versão 1803 ou superior.
Alguns desenvolvedores têm usado a marca #EXT-X-PLAYREADYHEADER
em playlists do HLS desde 2010 para desenvolver sistemas PlayReady baseados em MPEG2-TS antes que o HLS baseado em arquivo MP4 se tornasse predominante. Não há suporte para esse formato no Windows 10 ou xbox em nenhuma versão. No entanto, pode ser possível desenvolver um aplicativo player que faz a playlist e a análise de contêiner e pode reproduzir esses ativos em um aplicativo Windows ou 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)
Vetores de teste
Veja Conteúdo de Teste no Servidor de Teste
- Ativo baseado em MP4. CMAF preferencial.
- Playlist principal do HLS (m3u8) e playlists individuais (m3u8) para as diferentes faixas e taxas de bits.
- Chaves que mudam periodicamente durante a vigência do ativo, em períodos específicos.
- Mesma chave única para todas as faixas e taxas de bits ou chaves diferentes para faixas e taxas de bits diferentes.
Suportado
Sob demanda: Há suporte para recursos HLS com chaves que mudam periodicamente para conteúdo sob demanda, como chaves HLS estáticas. A playlist mestra e as playlists individuais devem conter #EXT-X-SESSION-KEY
e #EXT-X-KEY
marcas.
As playlists indivuais contêm uma marca #EXT-X-KEY
sempre que as chaves de criptografia são alteradas.
Ao Vivo: Não há suporte para recursos HLS com alteração de chaves para conteúdo ao vivo em que as chaves de criptografia não estão todas presentes nas playlists no início da reprodução. No entanto, é possível criar um aplicativo que dê suporte a ele. O aplicativo tem lógica para detectar as playlists enquanto elas são atualizadas e solicitar as licenças para as chaves de criptografia necessárias após a rotação.
Amostra
Playlist principal
#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="
Playlist individual
#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="
- Ativo baseado em MP4. CMAF preferencial.
- Playlist principal do HLS (m3u8) e playlists individuais (m3u8) para as diferentes faixas e taxas de bits.
- Chaves que mudam de tempos em tempos ou com frequência durante a duração do recurso, entregues por meio de licenças PlayReady Embedded inseridas na transmissão.
- Mesma chave única para todas as faixas e taxas de bits ou chaves diferentes para faixas e taxas de bits diferentes.
Suportado
Há suporte para ativos HLS com chaves rotativas usando Licenças Incorporadas para conteúdo por demanda e ao vivo na versão 1803 e superior.
A playlist principal e as playlists individuais contêm #EXT-X-SESSION-KEY
e #EXT-X-KEY
tags, que incluem o especial PlayReady Header <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
.
Os segmentos MP4 contêm no cabeçalho do fragmento moof/uuid/pssh
uma Licença Folha PlayReady integrada ao conteúdo, sempre que a chave de conteúdo é rotacionada. Essas licenças do PlayReady Leaf estão vinculadas às Licenças Raiz do PlayReady relacionadas ao ativo.
O aplicativo deve incluir lógica para solicitar proativamente as Licenças Raiz.
Amostra
#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)
Cabeçalho PlayReady na playlist mestra e nas playlists individuais:
<WRMHEADER version="4.2.0.0" xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader">
<DATA>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
- Ativo baseado em MP4. Formato PIFF.
- Manifesto Smooth Streaming.
- Mesmas chaves ao longo do ativo – chaves não sendo alteradas ao longo do tempo.
- Mesma chave única para todas as faixas (
<StreamIndex>
)e taxas de bits (<QualityLevel>
) ou chaves diferentes para as diferentes faixas (<StreamIndex>
) e as diferentes taxas de bits (<QualityLevel>
).
Suportado
Há suporte para Smooth Streaming com reprodução PlayReady na versão 1803 e superior. Em versões anteriores, é possível criar um aplicativo que os reproduz, analisando o manifesto e os segmentos programaticamente. SDKs como o SDK do Smooth Streaming ou o HASplayer podem ser usados para implementar essa análise e lógica.
Um objeto PlayReady que contém todos os KIDs usados para todo o ativo é inserido no manifesto no nó de nível superior (<SmoothStreamingMedia>
) usando esta sintaxe: <Protection><ProtectionHeader SystemID="9a04f079-9840-4286-ab92-e65be0885f95">...</ProtectionHeader><Protection>
Quando chaves diferentes são usadas para faixas diferentes (<StreamIndex>
) ou taxas de transmissão diferentes (<QualityLevel>
), o Objeto PlayReady ainda é inserido no nó de nível superior do manifesto (SmoothStreamingMedia
); o Objeto PlayReady contém um Cabeçalho PlayReady versão mínima 4.2.0.0, listando vários KIDs.
Observação
Ativos de Smooth Streaming não incluem um segmento de inicialização como os ativos DASH.
Amostra
Manifesto 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>
Arquivos de ativos
[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
Vetores de teste
Veja Conteúdo de Teste no Servidor de Teste
- Ativo baseado em MP4. Formato PIFF.
- Manifesto Smooth Streaming.
- As chaves são alteradas de tempos em tempos ou frequentemente durante a duração do ativo, entregues usando licenças do PlayReady Leaf inseridas no fluxo, associadas às Licenças Raiz do PlayReady.
- Mesma chave única para todas as faixas (
<StreamIndex>
)e taxas de bits (<QualityLevel>
) ou chaves diferentes para as diferentes faixas (<StreamIndex>
) e as diferentes taxas de bits (<QualityLevel>
).
Suportado
O suporte à Smooth Streaming com reprodução PlayReady e licenças embutidas está disponível a partir da versão 1803 e superior.
O manifesto inclui o cabeçalho especial PlayReady <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
, usando esta sintaxe: <Protection><ProtectionHeader SystemID="9a04f079-9840-4286-ab92-e65be0885f95">...</ProtectionHeader><Protection>
.
Os arquivos MP4 contêm Licenças Inseridas nas caixas pssh
. O aplicativo deve implementar a lógica para adquirir de forma pró-ativa as Licenças Raiz do PlayReady necessárias para as Licenças Folha Incorporadas.
Amostra
Aqui está o manifesto smooth streaming extraído do fluxo de teste 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 ...
O manifesto inclui o cabeçalho PlayReady:
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.1.0.0">
<DATA>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
Arquivo 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
Exemplo de um cabeçalho de fragmento MP4 quando a chave gira
[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]