브라이트코브 플레이어를 위한 DASH DRM 매니페스트 만들기
개요
MPEG-DASH 매니페스트 (.MPD 파일)는 CENC (일반 암호화)를 사용하여 암호화 된 MPEG-DASH 변환이 포함 된 비디오를 설명하며 Playready, Widevine 및 Marlin CDM (콘텐츠 해독 모듈)과 호환됩니다. Brightcove의 웹 플레이어는 사용되는 브라우저에 따라 Playready 및 Widevine 만 지원합니다.
브라우저 지원
재생은 지원되는 데스크톱 Macintosh 및 Windows 브라우저에서만 작동합니다.
브라우저 유형 | 재생 기술 | DRM 유형 |
---|---|---|
Chrome 34 이상 | 샤카 플레이어를 사용한 기본 MSE/EME 재생 | Widevine |
윈도우 10의 MS 엣지 | 샤카 플레이어를 사용한 기본 MSE/EME 재생 | Playready |
Safari, IE 및 Firefox를 포함한 기타 모든 브라우저 | Silverlight 플러그인 | Playready |
외부 DRM 콘텐츠
Brightcove Video Cloud 외부에서 생성 된 DRM 콘텐츠에 대한 요구 사항
Brightcove Player를 사용하여 DRM 보호가 적용된 비디오 콘텐츠를 재생하려면 비디오를 다음 지침에 따라 인코딩해야합니다.
- MPEG-DASH 라이브 프로필이어야합니다 ( "hbbtv"가 아닌 "주문형"이 아님).
- 모든 변환은 동일한 키 프레임 간격 및 프레임 속도를 가져야합니다 (Silverlight 플러그인과의 호환성을 위해).
- 공통 암호화 (CENC)를 사용하여 암호화되어야하며 Playready 및 Widevine 지원이 활성화되어 있어야합니다.
- Playready 및 Widevine 라이선스 서버 URL을 제공해야합니다. Playready 라이선스 서버 URL은 매니페스트 파일 (.mpd)에 포함되어야합니다. Widevine 라이선스 서버 URL은 매니페스트 또는 자바 스크립트의 매개 변수로 제공 될 수 있습니다.
- Playready 초기화 벡터는 8 바이트 여야합니다.
샘플 매니페스트
다음은 Video Cloud에서 생성 된 MPEG-DASH 매니페스트 (.MPD 파일)의 예입니다.
<?xml version="1.0" ?>
<MPD mediaPresentationDuration="PT1M28S" minBufferTime="PT2.00S" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:mspr="urn:microsoft:playready" xmlns:mas="urn:marlin:mas:1-0:services:schemas:mpd">
<Period>
<AdaptationSet mimeType="audio/mp4" segmentAlignment="true" startWithSAP="1">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="5d97af80-2442-4fe9-b1aafc24ecb6fa28" xmlns:cenc="urn:mpeg:cenc:2013"/>
<ContentProtection schemeIdUri="urn:uuid:5E629AF5-38DA-4063-8977-97FFBD9902D4">
<mas:MarlinContentIds>
<mas:MarlinContentId>urn:marlin:kid:5d97af8024424fe9b1aafc24ecb6fa28</mas:MarlinContentId>
</mas:MarlinContentIds>
</ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:79f0049a-4098-8642-ab92-e65be0885f95">
<mspr:pro>jAIAAAEAAQCCAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AZwBLACsAWABYAFUASQBrADYAVQArAHgAcQB2AHcAawA3AEwAYgA2AEsAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBVAGQAawBLAGIASQBBAHgAbgBOAGcAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAHIAbABpAGMALgBiAHIAaQBnAGgAdABjAG8AdgBlAC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC8AMwA3ADIAMwA0ADkANgAyADcANwAwADAAMQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</mspr:pro>
</ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" bc:licenseAcquisitionUrl="https://wvlic.brightcove.com/proxy/4324249227001" xmlns:bc="urn:brightcove:2015"/>
<SegmentTemplate duration="2000" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/seg-$Number$.m4f" startNumber="0" timescale="1000"/>
<Representation bandwidth="43241" id="4324360320001/audio/und" codecs="mp4a.40.5" audioSamplingRate="22050">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
</Representation>
</AdaptationSet>
<AdaptationSet mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" scanType="progressive">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="5d97af80-2442-4fe9-b1aafc24ecb6fa28" xmlns:cenc="urn:mpeg:cenc:2013"/>
<ContentProtection schemeIdUri="urn:uuid:5E629AF5-38DA-4063-8977-97FFBD9902D4">
<mas:MarlinContentIds>
<mas:MarlinContentId>urn:marlin:kid:5d97af8024424fe9b1aafc24ecb6fa28</mas:MarlinContentId>
</mas:MarlinContentIds>
</ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:79f0049a-4098-8642-ab92-e65be0885f95">
<mspr:pro>jAIAAAEAAQCCAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AZwBLACsAWABYAFUASQBrADYAVQArAHgAcQB2AHcAawA3AEwAYgA2AEsAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBVAGQAawBLAGIASQBBAHgAbgBOAGcAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAHIAbABpAGMALgBiAHIAaQBnAGgAdABjAG8AdgBlAC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC8AMwA3ADIAMwA0ADkANgAyADcANwAwADAAMQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</mspr:pro>
</ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" bc:licenseAcquisitionUrl="https://wvlic.brightcove.com/proxy/4324249227001" xmlns:bc="urn:brightcove:2015"/>
<SegmentTemplate duration="2000" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/seg-$Number$.m4f" startNumber="0" timescale="1000"/>
<Representation bandwidth="237182" id="4324360320001/video/1" codecs="avc1.42c015" frameRate="30" width="400" height="300"/>
<Representation bandwidth="601518" id="4324360321001/video/1" codecs="avc1.42c015" frameRate="30" width="400" height="300"/>
<Representation bandwidth="981387" id="4324360323001/video/1" codecs="avc1.42c016" frameRate="30" width="480" height="360"/>
<Representation bandwidth="1507704" id="4324360324001/video/1" codecs="avc1.42c01e" frameRate="30" width="640" height="480"/>
<Representation bandwidth="2102387" id="4324360325001/video/1" codecs="avc1.42c01e" frameRate="30" width="640" height="480"/>
<Representation bandwidth="2991373" id="4324360326001/video/1" codecs="avc1.42c01e" frameRate="30" width="640" height="480"/>
</AdaptationSet>
</Period>
</MPD>
라이선스 정보
Brightcove Player와 호환되는 자체 DASH-DRM 스트림을 생성하려면 인코딩 시스템이 DRM 라이선스에 대한 정보를 포함하는 위에 제공된 것과 유사한 매니페스트 (MPD)를 생성해야합니다. MPD는 현재 Brightcove Player에서 사용하지 않는 Marlin 섹션을 생략 할 수 있습니다.
PlayReady 라이선스 키 지정
Brightcove Player를 사용하려면 PlayReady 라이선스 정보가 base-64 인코딩 문자열로 MPD에 포함되어야합니다. 이 예제의 값은<mspr:pro>
위의 태그. 인코딩 된 키 정보는 아래에 디코딩되어 표시됩니다. PlayReady 헤더 형식에 대한 정보는 다음에서 찾을 수 있습니다. http://www.microsoft.com/playready/documents/ .
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0"><DATA><PROTECTINFO><KEYLEN>16</KEYLEN><ALGID>AESCTR</ALGID></PROTECTINFO><KID>gK+XXUIk6U+xqvwk7Lb6KA==</KID><CHECKSUM>UdkKbIAxnNg=</CHECKSUM><LA_URL>https://prlic.brightcove.com/license/3723496277001</LA_URL></DATA></WRMHEADER>
Widevine 라이선스 URL 지정
Widevine 라이선스 서버 URL은 다음 줄의 MPD에 제공됩니다.
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" bc:licenseAcquisitionUrl="https://wvlic.brightcove.com/proxy/4324249227001" xmlns:bc="urn:brightcove:2015"/>
또는 Widevine 라이선스 서버 URL을 포함 된 페이지의 JavaScript에서 플레이어에 매개 변수로 제공 할 수 있습니다. 다음은 소스 URL로 라이선스 서버를 지정하여 Brightcove Player를 호출하는 방법의 예입니다.
myPlayer.src({
"src": sourceUrl,
"type": "application/dash+xml",
"keySystemOptions": [{
"name": "com.widevine.alpha",
"options": {"licenseUrl": licenseServerUrl}
}]
});
프리로딩
비디오 데이터의 사전로드를 제어하기 위해 선택할 수있는 많은 설정이 있습니다. 참조플레이어 구성 가이드, 예압부분자세한 내용은. 기본 동작은 Brightcove Player가 몇 초 분량의 비디오 데이터와 함께 비디오 메타 데이터 (예 : 제목 및 기간)를 미리로드하는 것입니다. 사전로드 동작을 변경하려면 플레이어 구성에서 다음 옵션을 지정할 수 있습니다.
"preload": "none"
다음은 해당 설정을 사용한 플레이어 구성의 예입니다.
{
"account_id": "3723496277001",
"autoadvance": 0,
"embed_id": "default",
"player": {
"template": {
"name": "single-video-template",
"version": "1.14.26"
}
},
"player_id": "82f443bc-82f5-4074-bf9c-de2920c89b24",
"player_name": "DRM Demo",
"preload": "none",
"scripts": [
"https://players.brightcove.net/videojs-dash/videojs-dash.min.js"
],
"stylesheets": [
"https://players.brightcove.net/videojs-dash/videojs-dash.css"
],
"video_cloud": {
"policy_key": "BCpkADawqM2ENcgyE-9...EFGSP8b5dC",
"video": null
}
}