브라이트코브 플레이어를 위한 DASH DRM 매니페스트 만들기

이 항목에서는 Brightcove Player에 대한 DRM 보호를 사용하여 MPEG-DASH 매니페스트 (.MPD 파일)를 생성하는 방법에 대해 알아 봅니다.

개요

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 보호가 적용된 비디오 콘텐츠를 재생하려면 비디오를 다음 지침에 따라 인코딩해야합니다.

  1. MPEG-DASH 라이브 프로필이어야합니다 ( "hbbtv"가 아닌 "주문형"이 아님).
  2. 모든 변환은 동일한 키 프레임 간격 및 프레임 속도를 가져야합니다 (Silverlight 플러그인과의 호환성을 위해).
  3. 공통 암호화 (CENC)를 사용하여 암호화되어야하며 Playready 및 Widevine 지원이 활성화되어 있어야합니다.
  4. Playready 및 Widevine 라이선스 서버 URL을 제공해야합니다. Playready 라이선스 서버 URL은 매니페스트 파일 (.mpd)에 포함되어야합니다. Widevine 라이선스 서버 URL은 매니페스트 또는 자바 스크립트의 매개 변수로 제공 될 수 있습니다.
  5. 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
  }
}