- MP4 기반 자산입니다. CMAF를 선호합니다.
- DASH 매니페스트입니다.
- 자산을 따라 동일한 키 - 시간이 지남에 따라 변경되지 않는 키입니다.
- 모든 트랙 및 표현(비트레이트)에 대해 동일한 단일 키를 사용하거나, 다른 트랙 및 표현(비트레이트)에 대해 서로 다른 키를 사용할 수 있습니다. 예를 들어 1080p를 초과하는 모든 비디오 트랙에 다른 키를 사용하여 특정 클라이언트에 대한 4K 해상도에 대한 액세스를 제한할 수 있습니다.
지원됨
라이브 프로필(정적 매니페스트 및 주문형 콘텐츠)에 대한 <mspr:pro> 태그는 버전 1507 이상에서 지원됩니다.
동적 매니페스트(라이브 콘텐츠)가 있는 Live Profile에 대한 태그를 <mspr:pro> 사용하여 버전 1703 이상에서 지원됩니다.
DASH 매니페스트에는 <mspr:pro> 노드의 <Period> 태그를 사용하여 PlayReady 헤더를 포함하는 PlayReady 객체가 포함됩니다. 서로 다른 트랙 또는 비트 전송률에 다른 키를 사용하는 경우, DASH 매니페스트에는 여러 <AdaptationSet> 또는 <Representation> 노드에 여러 PlayReady 개체가 있을 수 있습니다.
비고
다른 <AdaptationSet> 노드의 init 세그먼트 내에 PlayReady 개체를 삽입할 수 있습니다. PlayReady 개체가 init 세그먼트와 매니페스트 모두에서 발견되면 매니페스트의 개체가 우선합니다.
주문형 및 라이브 자산에 대한 표준 <cenc:pssh> 태그가 있는 DASH 매니페스트는 버전 RS5 이상에서 지원됩니다. 이 경우 base 64에 아머드된 pssh 상자의 전체 콘텐츠가 매니페스트에 포함됩니다. PlayReady 개체뿐만 아니라 다른 것들도 있습니다.
호환성을 높이기 위해 Microsoft는 PlayReady 개체를 <mspr:pro> 및 <cenc:pssh> 태그에 중복 포함하는 DASH 매니페스트를 생성할 것을 권장합니다.
<?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">
예시
<mspr:pro> 태그를 포함한 DASH 매니페스트, '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"/>
DASH 매니페스트에 <mspr:pro> 태그와 <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"/>
'cbcs' 암호화된 자산을 위한 <mspr:pro> 태그가 포함된 DASH 매니페스트
<?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" />
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
테스트 벡터
PlayReady 테스트 콘텐츠 참조
- MP4 기반 자산입니다.
- DASH 매니페스트입니다.
- 자산의 기간 동안 키가 특정 시간 간격마다 수시로 변경됩니다.
- 모든 트랙 및 표현(비트레이트)에 대해 동일한 단일 키를 사용하거나, 다른 트랙 및 표현(비트레이트)에 대해 서로 다른 키를 사용할 수 있습니다.
지원됨
제한된 다중 기간 DASH는 버전 1803 이상에서 지원됩니다.
DASH 매니페스트에는 제한된 여러 <Period> 노드가 포함됩니다(예: 트랙 수와 같은 모든 동일한 특성 포함). 이러한 <Period> 각 노드에는 <Period>, <AdaptationSet>, 또는 <Representation> 수준에 PlayReady 개체가 삽입되며, 이는 서로 다른 암호화 키가 사용되기 때문입니다.
예시
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 ...>
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
테스트 벡터
PlayReady 테스트 콘텐츠 참조
- MP4 기반 자산입니다.
- DASH 매니페스트입니다.
- PlayReady Embedded 라이선스를 스트림에 삽입하여 전달하며, 자산 기간 동안 키가 주기적으로 또는 자주 변경됩니다.
- 모든 트랙 및 표현(비트레이트)에 대해 동일한 단일 키를 사용하거나, 다른 트랙 및 표현(비트레이트)에 대해 서로 다른 키를 사용할 수 있습니다.
지원됨
포함된 라이선스를 사용하는 키 회전이 있는 DASH는 버전 1803 이상에서 지원됩니다.
매니페스트 또는 init 세그먼트에는 특수 <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP> PlayReady 헤더가 포함됩니다.
init 세그먼트는 선택적으로 트랙 암호화 상자 tenc (moov/trak/mdia/minf/stbl/stsd/sinf/schi/tenc)에 사용되는 기본 KID를 포함합니다.
콘텐츠 키가 회전할 때마다 MP4 세그먼트에는 샘플 그룹 설명 상자 sgpd 상자 내에서 세그먼트가 사용하는 새로운 KID(moof/traf/sgpd/seig)가 포함됩니다. 또한 콘텐츠에 포함된 PlayReady 리프 라이선스를 조각 헤더 moof/pssh 에 포함합니다. 이러한 PlayReady 리프 라이선스는 자산의 PlayReady 루트 라이선스에 바인딩됩니다.
애플리케이션에는 루트 라이선스를 사전에 요청하는 논리가 포함되어야 합니다.
예시
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 ...
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
키가 회전할 때 MP4 세그먼트 파일의 예
[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]
- MP4 기반 자산입니다. CMAF를 선호합니다.
- 다양한 트랙 및 비트 전송률에 대한 HLS 마스터 재생 목록(m3u8) 및 개별 재생 목록(m3u8).
- 자산을 따라 동일한 키 - 시간이 지남에 따라 변경되지 않는 키입니다.
- 모든 트랙 및 비트 전송률에 대해 동일한 단일 키 또는 다른 트랙 및 비트 전송률에 대한 다른 키입니다.
지원됨
PlayReady에서 제공하는 키가 있는 'cbcs' 암호화 모드: 2018년 1월 업데이트 이후 Xbox One, One S, One X에서 지원됨
- 각 개별 재생 목록에는
#EXT-X-KEY:METHOD=SAMPLE-AES 태그를 사용하여 해당 재생 목록의 KID가 포함된 PRH를 포함하는 PRO가 있어야 합니다.
- 마스터 재생 목록에는 모든 재생 목록에서 사용된 모든 KID가 포함된 PRH를 포함하는 PRO가 있어야 하며,
#EXT-X-SESSION-KEY:METHOD=SAMPLE-AES 태그를 사용해야 합니다. 이 태그는 표준에 의해 요구되는 것은 아니지만, Windows 10과 Xbox One/One S/One X에서 플레이를 위해 필요합니다.
PlayReady에서 제공하는 키를 사용하는 'cenc' 암호화 모드: Windows 10 및 Xbox One, One S, 버전 1803 이상의 X에서 지원됩니다.
- 각 개별 재생 목록에는
#EXT-X-KEY:METHOD=SAMPLE-AES-CTR 태그를 사용하여 해당 재생 목록의 KID가 포함된 PRH를 포함하는 PRO가 있어야 합니다.
- 마스터 재생 목록에는 모든 재생 목록에서 사용된 모든 KID가 포함된 PRH를 포함하는 PRO가 있어야 하며,
#EXT-X-SESSION-KEY:METHOD=SAMPLE-AES-CTR 태그를 사용해야 합니다. 이 태그는 표준에 의해 요구되는 것은 아니지만, Windows 10과 Xbox One/One S/One X에서 플레이를 위해 필요합니다.
참고: HLS 태그 #EXT-X-PLAYREADYHEADER 는 레거시 목적으로 버전 1803 이상에서 지원됩니다. Microsoft는 여전히 HLS 재생 목록에 표준 #EXT-X-KEY 태그를 사용하는 것이 좋습니다.
예시
마스터 재생 목록
#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="
개별 재생 목록
#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-PLAYREADYHEADER 태그는 일정 시간 동안 PlayReady 헤더를 수행하기 위해 HLS 재생 목록에 사용되었으므로 Windows 10 및 Xbox는 버전 1803 이상의 HLS 재생 목록에서 이 태그를 지원합니다.
일부 개발자는 MP4 파일 기반 HLS가 널리 보급되기 전에 2010년부터 HLS 재생 목록에 태그를 사용하여 #EXT-X-PLAYREADYHEADER MPEG2-TS 기반 PlayReady 시스템을 개발했습니다. 이 형식은 Windows 10 또는 Xbox 버전에서는 지원되지 않습니다. 그러나 재생 목록 및 컨테이너 구문 분석을 수행하고 Windows 또는 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)
테스트 벡터
PlayReady 테스트 콘텐츠 참조
- MP4 기반 자산입니다. CMAF를 선호합니다.
- 다양한 트랙 및 비트 전송률에 대한 HLS 마스터 재생 목록(m3u8) 및 개별 재생 목록(m3u8).
- 자산의 기간 동안 키가 특정 시간 간격마다 수시로 변경됩니다.
- 모든 트랙 및 비트 전송률에 대해 동일한 단일 키 또는 다른 트랙 및 비트 전송률에 대한 다른 키입니다.
지원됨
주문형: 키가 수시로 변경되는 HLS 자산은 주문형 콘텐츠에 대해 HLS 정적 키로 지원됩니다. 마스터 재생 목록 및 개별 재생 목록에는 #EXT-X-SESSION-KEY 및 #EXT-X-KEY 태그가 포함되어야 합니다.
암호화 키가 변경될 때마다 indivual 재생 목록에는 하나의 #EXT-X-KEY 태그가 포함됩니다.
실시간: 재생이 시작될 때 암호화 키가 모두 재생 목록에 포함되어 있지 않은 상황에서는, 실시간 콘텐츠에 대해 키가 변경되는 HLS 자산은 지원되지 않습니다. 하지만 이를 지원하는 애플리케이션을 빌드할 수 있습니다. 애플리케이션에는 재생 목록을 새로 고치는 동안 검색하고 회전 후 필요한 암호화 키에 대한 라이선스를 요청하는 논리가 있습니다.
예시
마스터 재생 목록
#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="
개별 재생 목록
#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="
- MP4 기반 자산입니다. CMAF를 선호합니다.
- 다양한 트랙 및 비트 전송률에 대한 HLS 마스터 재생 목록(m3u8) 및 개별 재생 목록(m3u8).
- PlayReady Embedded 라이선스를 스트림에 삽입하여 전달하며, 자산 기간 동안 키가 주기적으로 또는 자주 변경됩니다.
- 모든 트랙 및 비트 전송률에 대해 동일한 단일 키 또는 다른 트랙 및 비트 전송률에 대한 다른 키입니다.
지원됨
임베디드 라이선스를 사용하는 회전 키가 있는 HLS 자산은 버전 1803 이상에서 주문형 및 라이브 콘텐츠에 대해 지원됩니다.
마스터 재생 목록과 개별 재생 목록에는 특수 #EXT-X-SESSION-KEY PlayReady 헤더가 포함된 태그와 #EXT-X-KEY 및 <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP> 태그가 포함되어 있습니다.
MP4 세그먼트는 콘텐츠 키가 회전할 때마다 콘텐츠에 임베디드된 PlayReady 리프 라이선스를 조각 헤더 moof/uuid/pssh에 포함합니다. 이러한 PlayReady 리프 라이선스는 자산의 PlayReady 루트 라이선스에 바인딩됩니다.
애플리케이션에는 루트 라이선스를 사전에 요청하는 논리가 포함되어야 합니다.
예시
#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)
마스터 재생 목록 및 개별 재생 목록의 PlayReady 헤더:
<WRMHEADER version="4.2.0.0" xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader">
<DATA>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
- MP4 기반 자산입니다. PIFF 형식입니다.
- 부드러운 스트리밍 매니페스트입니다.
- 자산을 따라 동일한 키 - 시간이 지남에 따라 변경되지 않는 키입니다.
- 모든 트랙
<StreamIndex>과 비트 전송률에 동일한 단일 키를 사용하거나, 다른 트랙<QualityLevel>과 다른 비트 전송률<StreamIndex><QualityLevel>에 대해 서로 다른 키를 사용할 수 있습니다.
지원됨
PlayReady 재생을 사용한 부드러운 스트리밍은 버전 1803 이상에서 지원됩니다. 이전 버전에서는 매니페스트와 세그먼트를 프로그래밍 방식으로 구문 분석하여 이를 재생하는 애플리케이션을 빌드할 수 있습니다.
부드러운 스트리밍 SDK 또는 HASplayer와 같은 SDK를 사용하여 이 구문 분석 및 논리를 구현할 수 있습니다.
전체 자산에 사용되는 모든 KID를 포함하는 PlayReady 개체는 다음 구문을 사용하여 최상위 노드(<SmoothStreamingMedia>)의 매니페스트에 삽입됩니다. <Protection><ProtectionHeader SystemID="9a04f079-9840-4286-ab92-e65be0885f95">...</ProtectionHeader><Protection>
다른 트랙() 또는 다른 비트 전송률(<StreamIndex><QualityLevel>)에 다른 키를 사용하는 경우 PlayReady 개체는 매니페스트의 최상위 노드(SmoothStreamingMedia)에 계속 삽입됩니다. PlayReady 개체에는 여러 KID를 나열하는 PlayReady 헤더 버전 4.2.0.0이 포함되어 있습니다.
비고
스무드 스트리밍 자산에는 DASH 자산처럼 init 세그먼트가 포함되어 있지 않습니다.
예시
스무스 스트리밍 매니페스트
<?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>
자산 파일
[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
테스트 벡터
PlayReady 테스트 콘텐츠 참조
- MP4 기반 자산입니다. PIFF 형식입니다.
- 부드러운 스트리밍 매니페스트입니다.
- 자산이 사용되는 기간 동안 스트림에 포함된 PlayReady 리프 라이선스를 사용하여 전달된 키는 때때로 또는 자주 변경되며, PlayReady 루트 라이선스에 연결되어 있습니다.
- 모든 트랙
<StreamIndex>과 비트 전송률에 동일한 단일 키를 사용하거나, 다른 트랙<QualityLevel>과 다른 비트 전송률<StreamIndex><QualityLevel>에 대해 서로 다른 키를 사용할 수 있습니다.
지원됨
포함된 라이선스를 사용한 PlayReady 재생을 사용한 부드러운 스트리밍은 버전 1803 이상에서 지원됩니다.
매니페스트에는 다음 구문을 <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>사용하는 특수 <Protection><ProtectionHeader SystemID="9a04f079-9840-4286-ab92-e65be0885f95">...</ProtectionHeader><Protection> PlayReady 헤더가 포함됩니다.
MP4 파일에는 pssh 상자에 포함된 내장 라이선스가 포함됩니다. 애플리케이션은 임베디드 리프 라이선스에 필요한 PlayReady 루트 라이선스를 사전에 획득하는 논리를 구현해야 합니다.
예시
다음은 테스트 스트림에서 추출된 부드러운 스트리밍 매니페스트입니다. 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 ...
매니페스트에는 PlayReady 헤더가 포함됩니다.
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.1.0.0">
<DATA>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
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
키가 회전할 때 MP4 조각 헤더의 예
[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]