為DRM配置Brightcove Player

在本主題中,您將學習Brightcove Player如何實現數字版權管理(DRM)。該文檔首先顯示瞭如何實現DRM插件,然後是該插件的詳細信息及其實現方式。

簡介

Brightcove正在採用以下技術,以將受DRM保護的內容提供給盡可能廣泛的瀏覽器和設備:

  • 具有Native / EME支持的CENC DRM的MPEG-DASH
  • HLS 與「公平遊戲」

要將DRM與Brightcove Player一起使用,您必須:

  • 產生啟用DRM的內容
  • 啟用Brightcove Player以使用DRM插件
  • 在某些情況下,將DRM插件配置為使用許可證服務器

術語

查看本文檔中使用的這些關鍵術語。

期限 定義
DRM 從維基百科:數字版權管理(DRM)是一類版權保護技術,硬件和軟件製造商,發行商,版權持有者以及個人為了控製售後數字內容和設備的使用而使用。
長條破折號 從維基百科:HTTP動態自適應流(DASH),也稱為MPEG-DASH,是一種自適應比特率流技術,可通過Internet從常規HTTP Web服務器提供高質量的媒體內容流。類似於Apple的HTTP Live Streaming(HLS)解決方案,MPEG-DASH的工作原理是將內容分成一系列小的基於HTTP的文件段,每個段包含一段短時間間隔的內容播放時間,該內容播放時間可能長達數小時,例如電影或體育賽事的直播。
中國電子學會 根據ISO標準:“ CENC”通用加密方案指定了一種或多種數字版權和密鑰管理系統(DRM系統)可以使用的標準加密和密鑰映射方法,從而可以使用不同的DRM系統解密同一文件。
加密媒體擴展(EME) 從維基百科:EME是W3C規範草案,用於在Web瀏覽器和數字版權管理(DRM)代理軟件之間提供通信通道。這樣就可以使用HTML5視頻播放DRM包裝的內容,而無需第三方媒體插件(例如Microsoft Silverlight)。

使用播放器模組實作

要在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多時段需要Shaka播放器。

如果要使用Shaka Player進行DASH播放,如版本4一樣,則可以將以下腳本與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技術:

  • 公平競爭:蘋果的DRM系統
  • PlayReady:微軟的DRM系統
  • Widevine:Google的DRM系統

下表詳細介紹了Brightcove Player中使用的瀏覽器(最新版本),格式和播放技術之間的關係:

瀏覽器 格式 DRM播放技術 使用的翻譯類型
交付DRM內容
Chrome 桌面 帶 Widevine 的 HLS 或 DASH 新興市場經濟體 HLS 或 MPEG-DASH
Chrome移動版1個 帶 Widevine 的 HLS 或 DASH 新興市場經濟體 HLS 或 MPEG-DASH
IE瀏覽器2 帶有 PlayReady 的 HLS 或 DASH 新興市場經濟體 HLS 或 MPEG-DASH
Edge 帶 Widevine 的 HLS 或 DASH 新興市場經濟體 HLS 或 MPEG-DASH
Safari HLS 與「公平遊戲」 本國的 HLS
Firefox 帶 Widevine 的 HLS 或 DASH 新興市場經濟體 HLS 或 MPEG-DASH

1個不支持在iOS上使用Chrome移動版播放DRM。

產生DRM內容

創建支持DRM的內容必須執行兩個步驟:

  1. 與您的客戶經理聯繫以使您的帳戶啟用DRM。然後,您可以使用正確的許可密鑰和攝取配置文件配置帳戶,以啟用受DRM保護的內容的創建。
  2. 產生受DRM保護的內容。您可以選擇上傳新內容或將現有內容重新編碼為DRM。通過選擇攝取資料產生所需的加密技術。

您將需要產生受DRM保護的內容,該內容使用帶有分段和加密視頻的MPEG-DASH清單或HLS FairPlay內容。

用代碼實現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證書路徑。

請按照以下步驟將DRM插件與受FairPlay保護的內容一起使用:

  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 getContentIdgetLicense 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) { ... }
        }
      }
    });

例如,如果您需要使用applicationIdPublisherId為了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您可以通過source選項覆蓋它:

    // 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選項,從主機名,固定許可證和證書URI以及需要POST以及關鍵消息正文的許可證URI中檢索內容ID:

    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模塊化內容,您需要使用播放器的源處理程序將播放器配置為使用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>

以下是在播放器加載時進行調試的示例:

啟動時在控制台中進行調試

以下是視頻開始播放後的調試示例:

播放後在控制台中進行調試

達世幣

Brightcove Player支持DASH行業論壇(DASH-IF)資產,將Brightcove數據傳遞到Native / EME。看到http://dashif.org有關DASH-IF的更多信息。使用DASH時,以下DASH-IF鏈接也很有幫助:

播放限制

要將 Brightcove Player 配置為使用播放限制,請參閱這裡 .

已知問題

  • 默認(自動顯示)字幕設置 媒體模塊的文字追踪與DRM和清單內字幕結合使用時,不支持此部分。例如,資訊清單內註解可與 Brightcove 產品「動態傳遞」和「SSAI」搭配使用。這個問題的解決方法是將<track>標籤與進階 Brightcove 播放程式實作搭配使用。這在以編程方式向視頻添加字幕文件。請注意,您必須將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),WebView當前不支持EME。因此,Fairplay DRM僅適用於Safari。

變更記錄檔

DRM 插件發行說明 .

有關歷史發行說明,請參閱更新日誌在這裡 .