DRM용 브라이트코브 플레이어 구성

이 항목에서는 Brightcove Player가 DRM (디지털 권한 관리)을 구현하는 방법에 대해 알아 봅니다. 이 문서는 먼저 DRM 플러그인을 구현하는 방법을 보여준 다음 플러그인에 대한 세부 정보와 구현 방법을 보여줍니다.

서문

Brightcove는 다음과 같은 기술을 수용하여 DRM으로 보호 된 콘텐츠를 가능한 가장 다양한 브라우저 및 장치에 제공합니다.

  • 네이티브 / EME 지원 CENC DRM이있는 MPEG-DASH
  • 페어플레이가 포함된 HLS

Brightcove Player와 함께 DRM을 사용하려면 다음을 수행해야합니다.

  • DRM 지원 콘텐츠 제작
  • Brightcove Player가 DRM 플러그인을 사용하도록 설정
  • 경우에 따라 라이선스 서버를 사용하도록 DRM 플러그인을 구성합니다.

분류: 용어

이 문서에 사용 된 주요 용어를 검토하십시오.

용어 정의
DRM 위키백과에서: 디지털 권한 관리 (DRM)는 하드웨어 및 소프트웨어 제조업체, 게시자, 저작권 보유자 및 판매 후 디지털 콘텐츠 및 장치의 사용을 제어 할 의도로 개인이 사용하는 일종의 복제 방지 기술입니다.
MPEG-DASH 위키백과에서: MPEG-DASH라고도하는 DASH (Dynamic Adaptive Streaming over HTTP)는 기존 HTTP 웹 서버에서 제공되는 인터넷을 통해 미디어 콘텐츠의 고품질 스트리밍을 가능하게하는 적응 형 비트 전송률 스트리밍 기술입니다. Apple의 HLS (HTTP Live Streaming) 솔루션과 유사하게 MPEG-DASH는 콘텐츠를 일련의 작은 HTTP 기반 파일 세그먼트로 나누는 방식으로 작동합니다. 영화 나 스포츠 경기 생중계 등.
CENC ISO 표준에서 : 'CENC'공통 암호화 체계는 하나 이상의 디지털 권한 및 키 관리 시스템 (DRM 시스템)에서 사용할 수있는 표준 암호화 및 키 매핑 방법을 지정하여 서로 다른 DRM 시스템을 사용하여 동일한 파일의 암호를 해독 할 수 있도록합니다.
EME (암호화 된 미디어 확장) 위키백과에서: EME는 웹 브라우저와 DRM (디지털 권한 관리) 에이전트 소프트웨어 간의 통신 채널을 제공하기위한 W3C 초안 사양입니다. 이를 통해 HTML5 비디오를 사용하여 Microsoft Silverlight와 같은 타사 미디어 플러그인없이 DRM으로 래핑 된 콘텐츠를 재생할 수 있습니다.

플레이어 모듈을 사용하여 구현

Studio에서 DRM 플러그인을 구현하고 계정 설정에 따라 DRM을 활성화하려면 다음 단계를 따르십시오.

  1. 열기선수모듈을 클릭하고 새 플레이어를 만들거나 DRM 기능을 추가 할 플레이어를 찾습니다.
  2. 플레이어에 대한 링크를 클릭하여 플레이어의 속성을 엽니다.
  3. 왼쪽 탐색 메뉴에서재생을 클릭합니다.
  4. 다음으로 DRM 활성화확인란.
    Studio의 DRM 확인란
  5. 플레이어를 게시하려면게시 및 포함 변경 내용 > 게시를클릭합니다.
  6. 열린 대화상자를 닫으려면닫기를클릭합니다.

DRM 플러그인 아키텍처

DRM 플러그인 ( videojs-drm )는 두 개의 플러그인을 둘러싼 래퍼입니다.

  • videojs-silverlight
  • videojs-contrib-eme

그만큼 videojs-drm플러그인 버전 5는 플레이어의 내장 DASH 재생 기능을 사용합니다. 이것은 내장 버전의 다음 버전 인 VHS를 사용합니다. videojs-contrib-hls플러그인.

플레이어 6.26.0부터 플레이어는 DASH 다중 기간을 지원합니다. 이전 버전의 플레이어의 경우 DASH 다중 기간에 Shaka 플레이어가 필요합니다.

버전 4에서와 같이 DASH 재생에 Shaka Player를 사용하려면 다음 스크립트를 함께 포함 할 수 있습니다. videojs-drm버전 5 스크립트 :

    https://players.brightcove.net/videojs-shaka/1/videojs-shaka.js
 

그만큼 videojs-silverlight플러그인을 사용하면 특정 Internet Explorer 브라우저에서 DASH 콘텐츠를 재생할 수 있습니다.

그만큼 videojs-contrib-eme플러그인은 FairPlay HLS 콘텐츠의 재생을 허용합니다.

사용 된 재생 기술

Brightcove Player는 다양한 브라우저에서 다양한 DRM 재생 기술을 활용합니다. 다음은 Brightcove Player와 함께 사용되는 DRM 기술에 대한 세부 정보입니다.

  • 페어 플레이 : Apple의 DRM 시스템
  • PlayReady : Microsoft의 DRM 시스템
  • Widevine : Google의 DRM 시스템

다음 표는 Brightcove Player에서 사용되는 브라우저 (최신 버전), 형식 및 재생 기술 간의 관계를 자세히 설명합니다.

브라우저 형식 DRM 재생 기술 사용 된 변환 유형
DRM 콘텐츠 제공
크롬 데스크톱 Widevine을 사용한 HLS 또는 DASH EME HLS 또는 MPEG-DASH
크롬 모바일 1 Widevine을 사용한 HLS 또는 DASH EME HLS 또는 MPEG-DASH
인터넷 익스플로러 2 PlayReady가 포함된 HLS 또는 DASH EME HLS 또는 MPEG-DASH
Edge Widevine을 사용한 HLS 또는 DASH EME HLS 또는 MPEG-DASH
Safari 페어플레이가 포함된 HLS 토종의 HLS
Firefox Widevine을 사용한 HLS 또는 DASH EME HLS 또는 MPEG-DASH

1 iOS에서 Chrome Mobile을 사용한 DRM 재생은 지원되지 않습니다.

DRM 콘텐츠 제작

DRM 지원 콘텐츠를 생성하려면 다음 두 단계를 수행해야합니다.

  1. 계정 관리자에게 문의하여 계정 DRM을 활성화하십시오. 그런 다음 적절한 라이선스 키와 수집 프로필을 사용하여 계정을 구성하여 DRM으로 보호 된 콘텐츠를 만들 수 있습니다.
  2. DRM 보호 콘텐츠를 생성합니다. 새 콘텐츠를 업로드하거나 기존 콘텐츠를 DRM으로 다시 인코딩하도록 선택할 수 있습니다. 이것은수집 프로필원하는 암호화 기술을 생성합니다.

분할 및 암호화 된 비디오가있는 MPEG-DASH 매니페스트 또는 HLS FairPlay 콘텐츠를 사용하는 DRM 보호 콘텐츠를 생성해야합니다.

코드에서 FairPlay 재생 구현

페이지 내 임베드 코드를 사용하여 FairPlay 재생을 구현하려면 다음 단계에 따라 DRM 플러그인을 사용해야합니다.

  1. HTML 페이지의 헤더에 플러그인의 스타일 시트를 포함하십시오.
        <link href="https://players.brightcove.net/videojs-drm/5/videojs-drm.css" rel="stylesheet">
        
        
  2. 플러그인의 자바 스크립트를 포함:
        <script src="https://players.brightcove.net/videojs-drm/5/videojs-drm.min.js"></script>
  3. 계정이 설정된 경우동적 전달 , 간단히 EME 플러그인을 호출하여 초기화하십시오.

        <script type="text/javascript">
          videojs.getPlayer('myPlayerID').ready(function() {
            var myPlayer = this;
            myPlayer.eme();
        });
        </script>

     

    계정이 설정되지 않은 경우동적 전달 , 그런 다음 FairPlay 자격 증명 정보로 EME 플러그인을 호출하고 구성해야합니다.

        videojs.getPlayer('myPlayerID').ready(function() {
          var myPlayer = this;
          myPlayer.eme({
            "applicationId": "YOUR_APPLICATION_ID",
            "publisherId": "YOUR_PUBISHER_ID"
          });
        });
        </script>

    Brightcove Player는 FairPlay 자격 증명 정보를 Video Cloud FairPlay 인증서 경로로 보냅니다.

FairPlay 보호 콘텐츠와 함께 DRM 플러그인을 사용하려면 다음 단계를 따르십시오.

  1. HTML 페이지의 헤더에 플러그인의 스타일 시트를 포함하십시오.
        <link href="https://players.brightcove.net/videojs-drm/5/videojs-drm.css" rel="stylesheet">
  2. 플러그인의 자바 스크립트를 포함:
        <script src="https://players.brightcove.net/videojs-drm/5/videojs-drm.min.js"></script>
  3. 페이지의 JavaScript 블록에서 다음을 제공하여 FairPlay 자격 증명 정보로 EME 플러그인을 호출하고 구성합니다. getCertificate , getContentId getLicense EME 플러그인에 대한 기능. 이러한 기능은 사용자의 FairPlay 라이선스 서버 구현에 따라 다르며 실행 전에 EME 플러그인으로 직접 전달 될 수 있습니다. src설정 됨 :
        <script type="text/javascript">
          videojs.getPlayer('myPlayerID').ready(function() {
            var myPlayer = this;
            myPlayer.eme({
              keySystems: {
                'com.apple.fps.1_0': {
                getCertificate: function (emeOptions, callback) {
                // request certificate
                // if err, callback(err)
                // if success, callback(null, certificate) where certificate
                // is a Uint8Array
              },
              getContentId: function (emeOptions, initData) {
                // return content ID as a string
                },
                getLicense: function (emeOptions, contentId, keyMessage, callback) {
                  // request key
                  // if err, callback(err)
                  // if success, callback(null, key) as an arraybuffer
                }
              }
            }
          });
        </script>

FairPlay 정보는 각각의 일부로 전달할 수도 있습니다. src목적. 그만큼 emeOptions모든 기능에 대한 매개 변수로 제공됩니다. 현재 소스의 소스 옵션과 병합 된 (덮어 쓰는) 플러그인 옵션에 대한 참조입니다. 옵션에 쉽게 액세스 할 수 있도록하여 직접 유지 관리 할 필요가 없습니다.

    player.src({
      type: 'application/vnd.apple.mpegurl',
      src: 'http://www.example.com/path/to/master.m3u8',
      keySystems: {
        "com.apple.fps.1_0": {
          getCertificate: function(emeOptions, callback) { ... },
          getContentId: function(emeOptions, initData) { ... },
          getLicense: function(emeOptions, contentId, keyMessage, callback) { ... }
        }
      }
    });

예를 들어, applicationId publisherId에 대한 getCertificate요청하면 다음과 같이 플러그인 옵션을 전달할 수 있습니다.

    {
      keySystems: {
        "com.apple.fps.1_0": {
          getCertificate: function(emeOptions, callback) {
          var applicationId = emeOptions.applicationId; // 'application-id'
          var publisherId = emeOptions.publisherId; // 'publisher-id'
          // ...
        }
          // ...
        }
      },
      applicationId: 'application-id'
      publisherId: 'publisher-id'
    }

또는 특정 소스가 필요한 경우 publisherId소스 옵션을 통해 덮어 쓸 수 있습니다.

    // plugin options
    {
      keySystems: {
        "com.apple.fps.1_0": {
        getCertificate: function(emeOptions, callback) {
        var applicationId = emeOptions.applicationId; // 'application-id'
        var publisherId = emeOptions.publisherId; // 'source-specific-publisher-id'
        // ...
      },
        // ...
      }
    },
    applicationId: 'application-id'
    publisherId: 'publisher-id'
    }
    // source options
    player.src({
      src: '<URL>',
      type: 'application/vnd.apple.mpegurl',
      publisherId: 'source-specific-publisher-id'
    });

다음은 다음과 같이 옵션을 전달하는 구현의 예입니다. src옵션, 호스트 이름에서 콘텐츠 ID 검색, 고정 라이선스 및 인증서 URI, 키 메시지 본문이 포함 된 POST가 필요한 라이선스 URI :

    var uint8ArrayToString = function(array) {
    return String.fromCharCode.apply(null, new Uint16Array(array.buffer));
    };
    var getHostnameFromUri = function(uri) {
      var link = document.createElement('a');
      link.href = uri;
      return link.hostname;
    };
    var getCertificate = function(emeOptions, callback) {
      videojs.xhr({
        uri: emeOptions.certificateUri,
        responseType: 'arraybuffer'
        }, function(err, response, responseBody) {
        if (err) {
          callback(err);
          return;
        }
        callback(null, new Uint8Array(responseBody));
      });
    };
    var getContentId = function(emeOptions, initData) {
      return getHostnameFromUri(uint8ArrayToString(initData));
    };
    var getLicense = function(emeOptions, contentId, keyMessage, callback) {
      videojs.xhr({
        uri: emeOptions.licenseUri,
        method: 'POST',
        responseType: 'arraybuffer',
        body: keyMessage,
        headers: {
          'Content-type': 'application/octet-stream'
        }
        }, function(err, response, responseBody) {
        if (err) {
          callback(err);
          return;
        }
        callback(null, responseBody);
      });
    };
    player.src({
      type: 'application/vnd.apple.mpegurl',
      src: 'http://www.example.com/path/to/master.m3u8',
      keySystems: {
        "com.apple.fps.1_0": {
        getCertificate: getCertificate,
        getContentId: getContentId,
        getLicense: getLicense
      }
      },
      certificateUri: 'http://example.com/fairplay/certificate/endpoint',
      licenseUri: 'http://example.com/fairplay/license/endpoint'
    });

코드에서 Widevine 재생 구현

인 페이지 임베드 코드를 사용하여 Widevine 재생을 구현하려면 다음 단계에 따라 DRM 플러그인을 사용해야합니다.

  1. HTML 페이지의 헤더에 플러그인의 스타일 시트를 포함하십시오.
        <link href="https://players.brightcove.net/videojs-drm/5/videojs-drm.css" rel="stylesheet">
  2. 플러그인의 자바 스크립트를 포함:
        <script src="https://players.brightcove.net/videojs-drm/5/videojs-drm.min.js"></script>
  3. 다음으로 EME 플러그인을 호출하여 초기화합니다.
        <script type="text/javascript">
          videojs.getPlayer('myPlayerID').ready(function() {
            var myPlayer = this;
            myPlayer.eme();
          });
        </script>

Widevine Modular 콘텐츠의 경우 플레이어의 소스 핸들러를 사용하여 Widevine 라이선스 서버를 사용하도록 플레이어를 구성해야합니다.

웹 페이지에서 플레이어의 인스턴스를 업데이트하려면 플레이어의 소스 핸들러를 사용할 수 있습니다. 다음은 사용 예입니다. keySystemsOptions 배열player.src() 함수:

    player.src({
      src: 'http://example.com/my/manifest.mpd',
      type: 'application/dash+xml',
      keySystemOptions: [
      {
        name: 'com.widevine.alpha',
        options: {
        licenseUrl: 'http://m.widevine.com/proxy'
      }
      }]
    });

당신은 또한 사용할 수 있습니다updateSourceData 다음과 같이 기능 :

    videojs.Html5DashJS.updateSourceData = function(source) {
    source.keySystemOptions = [{
    name: 'com.widevine.alpha',
    options: {
    serverURL:'https://example.com/anotherlicense'
    }
    }];
    return source;
    };

자세한 내용은 videojs-contrib-dash GitHub에 대한 정보.

다른 DRM 공급자 지원

플러그인은 고객이 다른 DRM 공급자에 대한 지원을 구현할 수있는 경로를 구현했습니다. Fairplay에는 라이선스 정보를 얻기 위해 필요한 사용자 지정 논리가 필요하기 때문에 Fairplay에 주로 유용합니다. 추가vendor.name ...에keySystems 주어진 소스에서이 로직을 사용하려고 시도하고 필요한 인증서 및 라이센스 정보를 포함합니다. Azure의 예는 다음과 같습니다.

    player.ready(function(){
      player.eme();
      player.src({
      src: 'http://example.com/src-url.m3u8'
      type: '',
      keySystems: {
        'com.apple.fps.1_0': {
        vendor: {
        name: 'azure'
      },
      certificateUri: 'https://example.com/your-certificate-uri.cer',
      licenseUri: 'https://example.com/your-license-uri'
      }
      }
      });
    });

다음은 castLabs의 예입니다.

    var player = videojs.getPlayer('myPlayerID');
    player.ready(function(){
      player.eme();
      player.src({
        src: 'http://example.com/src-url.m3u8'
        type: '',
        keySystems: {
          'com.apple.fps.1_0': {
          vendor: {
          name: 'castlabs',
          options: {
          authToken: 'your-auth-token',
          customData: 'your-custom-data'
        }
        }
        certificateUri: 'https://example.com/your-certificate-uri.cer',
        licenseUri: 'https://example.com/your-license-uri'
        }
        }
      });
    });

이 예제는 Widevine 및 PlayReady 소스를로드합니다.

    player.src({
      type: 'application/dash+xml',
      src: '<some src>',
         keySystems: {
      'com.widevine.alpha': '<license url>',
      'com.microsoft.playready': '<license url>'
      }
    });

디버깅 활성화

DRM DASH 콘텐츠에 대한 디버깅을 활성화하려면 다음 shaka 스크립트를 Brightcove Player에 추가하십시오.

    <!-- Script for the drm plugin -->
    <script src="https://players.brightcove.net/videojs-drm/5/videojs-drm.min.js"></script>
    <!-- Script for the shaka plugin -->
    <script src="https://players.brightcove.net/videojs-shaka/1/videojs-shaka.js"></script>
    <!-- Script for shaka debug plugin  -->
    <script src="https://players.brightcove.net/videojs-shaka/1/videojs-shaka.debug.js"></script>

다음은 플레이어로드시 디버깅의 예입니다.

시작시 콘솔에서 디버깅

다음은 비디오 재생이 시작된 후 디버깅의 예입니다.

플레이 후 콘솔에서 디버깅

DASH-IF

Brightcove Player는 Brightcove 데이터를 통해 Native / EME로 전달하는 DASH-IF (DASH Industry Forum) 자산을 지원합니다. 보다 http://dashif.org DASH-IF에 대한 자세한 내용은. 다음 DASH-IF 링크도 DASH를 사용할 때 유용합니다.

재생 제한

재생 제한을 사용하도록 Brightcove Player를 구성하려면 여기를 참조하십시오.

알려진 문제

  • 그만큼기본값 (자동 표시)캡션 설정 미디어모듈텍스트 트랙섹션은 DRM 및 매니페스트 캡션과 함께 사용할 때 지원되지 않습니다. 예를 들어, 매니페스트 캡션은 Brightcove 제품 Dynamic Delivery 및 SSAI와 함께 사용됩니다. 이 문제의 해결 방법은 고급 브라이트코브 플레이어 구현과 함께<track>태그를 사용하는 것입니다. 자세한 내용은프로그래밍 방식으로 동영상에 캡션 추가문서. 참고로default속성<track>꼬리표.
  • DRM 자산 및 Chrome : DRM 플러그인과 함께 표준 (iframe) 플레이어 구현을 사용하는 경우allow="encrypted-media" Chrome에서 DRM 자산을 재생하려면이 필요합니다.
        <iframe src="https://players.brightcove.net/123456789/BydO6uuuu_default/index.html?videoId=5783262319001"
        allowfullscreen
        width="640" height="360"
        allow="encrypted-media"></iframe>
  • Silverlight / IE11 특별 이벤트 : 대부분의 경우 플레이어와 프로그래밍 방식으로 상호 작용하려면 다음 중 하나를 기다립니다. ready 또는loadedmetadata  전달 될 이벤트. 그러나 IE11에서 Silverlight 기술을 사용하고 DRM 콘텐츠를 재생할 때 플레이어와 프로그래밍 방식으로 상호 작용하려면canplay 행사.
  • iOS에서는 Safari 만 필요한 DRM 브라우저 API (EME)를 제공하고 WebViews는 현재 EME를 지원하지 않습니다. 따라서 Fairplay DRM은 Safari에서만 작동합니다.

변경 로그

DRM 플러그인 릴리스 노트를 참조하십시오.

이전 릴리스 정보는 여기에서 변경 로그를 참조하세요.