Configuración de Brightcove Player para DRM

En este tema, aprenderá cómo Brightcove Player implementa la administración de derechos digitales (DRM). El documento primero muestra cómo implementar el complemento DRM, luego le siguen los detalles del complemento y cómo se implementa.

Introducción

Brightcove está adoptando las siguientes tecnologías para ofrecer contenido protegido por DRM a la mayor variedad posible de navegadores y dispositivos:

  • MPEG-DASH con DRM CENC nativos / compatibles con EME
  • HLS con FairPlay

Para utilizar DRM con Brightcove Player debe:

  • Producir contenido habilitado para DRM
  • Habilite Brightcove Player para usar el complemento DRM
  • En algunos casos, configure el complemento DRM para usar su servidor de licencias

Terminología

Revise estos términos clave utilizados en este documento.

Plazo Definición
DRM De Wikipedia: La gestión de derechos digitales (DRM) es una clase de tecnologías de protección de copia que utilizan los fabricantes de hardware y software, editores, titulares de derechos de autor e individuos con la intención de controlar el uso de contenido y dispositivos digitales después de la venta.
MPEG-DASH De Wikipedia: La transmisión dinámica adaptativa a través de HTTP (DASH), también conocida como MPEG-DASH, es una técnica de transmisión de velocidad de bits adaptativa que permite la transmisión de contenido multimedia de alta calidad a través de Internet desde servidores web HTTP convencionales. Similar a la solución HTTP Live Streaming (HLS) de Apple, MPEG-DASH funciona dividiendo el contenido en una secuencia de pequeños segmentos de archivos basados en HTTP, cada segmento contiene un intervalo corto de tiempo de reproducción de un contenido que potencialmente tiene muchas horas de duración. como una película o la transmisión en vivo de un evento deportivo.
CENC Del estándar ISO: El esquema de cifrado común 'CENC' especifica métodos estándar de cifrado y asignación de claves que pueden ser utilizados por uno o más sistemas de gestión de claves y derechos digitales (sistemas DRM) para permitir el descifrado del mismo archivo utilizando diferentes sistemas DRM.
Extensiones de medios cifrados (EME) De Wikipedia: EME es un borrador de especificación del W3C para proporcionar un canal de comunicación entre los navegadores web y el software del agente de administración de derechos digitales (DRM). Esto permite el uso de video HTML5 para reproducir contenido envuelto en DRM sin la necesidad de complementos de medios de terceros, como Microsoft Silverlight.

Implementación mediante el módulo Pla

Para implementar el complemento DRM en Studio y habilitar DRM según la configuración de su cuenta, siga estos pasos:

  1. Abre el JUGADORES módulo y cree un nuevo reproductor o localice el reproductor al que desea agregar la funcionalidad DRM.
  2. Haz clic en el enlace del reproductor para abrir las propiedades del reproductor.
  3. Hacer clic Reproducción en el menú de navegación de la izquierda.
  4. A continuación, compruebe el Habilitar DRM caja.
    Casilla de verificación DRM en Studio
  5. Para publicar el reproductor, haga clic en Publicar e insertar > Publicar cambios.
  6. Para cerrar el cuadro de diálogo abierto, haga clic en Cerrar.

Arquitectura del complemento DRM

El complemento DRM (videojs-drm ) es un contenedor alrededor de dos complementos:

  • videojs-silverlight
  • videojs-contrib-eme

La videojs-drm La versión 5 del complemento utiliza las capacidades de reproducción DASH integradas del reproductor. Esto utiliza VHS, que es la versión siguiente y renombrada del incorporado videojs-contrib-hls enchufar.

A partir del jugador 6.26.0, el reproductor admite DASH multiperiodo. Para versiones anteriores del reproductor, se requiere el reproductor Shaka para DASH de múltiples períodos.

Si desea utilizar Shaka Player para la reproducción de DASH, como lo hizo en la versión 4, puede incluir el siguiente script junto con videojs-drm secuencia de comandos de la versión 5:

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

La videojs-silverlight El complemento permite la reproducción de contenido DASH en ciertos navegadores Internet Explorer.

La videojs-contrib-eme El complemento permite la reproducción de contenido FairPlay HLS.

Tecnologías de reproducción utilizadas

Brightcove Player utiliza diferentes tecnologías de reproducción DRM con diferentes navegadores. A continuación se detallan las tecnologías DRM utilizadas con Brightcove Player:

  • Juego limpio: El sistema DRM de Apple
  • PlayReady: El sistema DRM de Microsoft
  • Widevine: El sistema DRM de Google

La siguiente tabla detalla la relación entre el navegador (última versión), el formato y la tecnología de reproducción utilizada en Brightcove Player:

Navegador Formato Tecnología de reproducción DRM Tipo de reproducción utilizado
para entregar contenido DRM
Escritorio Chrome HLS o DASH con Widevine EME HLS o MPEG-DASH
Chrome Mobile1 HLS o DASH con Widevine EME HLS o MPEG-DASH
explorador de Internet2 HLS o DASH con PlayReady EME HLS o MPEG-DASH
Borde HLS o DASH con Widevine EME HLS o MPEG-DASH
Safari HLS con FairPlay Nativo HLS
Firefox HLS o DASH con Widevine EME HLS o MPEG-DASH

1No se admite la reproducción DRM con Chrome Mobile en iOS.

Producir contenido DRM

Hay dos pasos que debe realizar para crear contenido habilitado para DRM:

  1. Comuníquese con su administrador de cuentas para que sus cuentas estén habilitadas para DRM. Luego, puede configurar su cuenta con las claves de licencia adecuadas y los perfiles de ingesta para permitir la creación de contenido protegido por DRM.
  2. Produzca contenido protegido por DRM. Puede optar por cargar contenido nuevo o volver a codificar el contenido existente como DRM. Esto se hace seleccionando el Perfil de ingesta que produce la tecnología de cifrado deseada.

Deberá producir contenido protegido por DRM que utilice manifiestos MPEG-DASH con videos segmentados y encriptados, o contenido HLS FairPlay.

Implementación de la reproducción FairPlay en código

Si desea implementar la reproducción de FairPlay usando el código de inserción en la página, debe seguir estos pasos para usar el complemento DRM:

  1. En el encabezado de la página HTML, incluye la hoja de estilo del plugin:
        <link href="https://players.brightcove.net/videojs-drm/5/videojs-drm.css" rel="stylesheet">
        
        
  2. Incluye el JavaScript del plugin:
        <script src="https://players.brightcove.net/videojs-drm/5/videojs-drm.min.js"></script>
  3. Si su cuenta está configurada para Entrega dinámica , simplemente llame al complemento EME para inicializarlo.

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

     

    Si su cuenta NO está configurada para Entrega dinámica , luego debe llamar y configurar el complemento EME con la información de la credencial de FairPlay.

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

    Brightcove Player envía la información de la credencial FairPlay a una ruta de certificado FairPlay de Video Cloud.

Siga estos pasos para usar el complemento DRM con contenido protegido FairPlay:

  1. En el encabezado de la página HTML, incluye la hoja de estilo del plugin:
        <link href="https://players.brightcove.net/videojs-drm/5/videojs-drm.css" rel="stylesheet">
  2. Incluye el JavaScript del plugin:
        <script src="https://players.brightcove.net/videojs-drm/5/videojs-drm.min.js"></script>
  3. En un bloque de JavaScript en la página, llame y configure el complemento EME con información de credenciales de FairPlay proporcionando obtenerCertificado , getContentId y obtener licencia funciones al complemento EME. Estas funciones son específicas de su propia implementación del servidor de licencias de FairPlay y pueden pasarse directamente al complemento EME antes de una src Está establecido:
        <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>

Tenga en cuenta que la información de FairPlay también se puede pasar como parte de cada src objeto. La emeOptions se proporcionan como un parámetro para todas las funciones. Son una referencia a las opciones de complementos fusionadas con (sobrescritas por) las opciones de fuente de la fuente actual. Está disponible para facilitar el acceso a las opciones para que no tenga que mantenerlas usted mismo.

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

Por ejemplo, si necesita utilizar un ID de aplicación y publisherId Para el getCertificate solicitud, puede pasar las opciones del complemento de esta manera:

    {
      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'
    }

O, si necesita una fuente específica publisherId puede sobrescribirlo a través de las opciones de origen:

    // 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'
    });

La siguiente es una implementación de ejemplo, pasando las opciones como src opciones, recuperando el ID de contenido del nombre de host, licencia fija y URI de certificado, y un URI de licencia que requiere un POST con el cuerpo del mensaje clave:

    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'
    });

Implementación de la reproducción de Widevine en código

Si desea implementar la reproducción de Widevine usando el código de inserción en la página, debe seguir estos pasos para usar el complemento DRM:

  1. En el encabezado de la página HTML, incluye la hoja de estilo del plugin:
        <link href="https://players.brightcove.net/videojs-drm/5/videojs-drm.css" rel="stylesheet">
  2. Incluye el JavaScript del plugin:
        <script src="https://players.brightcove.net/videojs-drm/5/videojs-drm.min.js"></script>
  3. A continuación, simplemente llame al complemento EME para inicializarlo.
        <script type="text/javascript">
          videojs.getPlayer('myPlayerID').ready(function() {
            var myPlayer = this;
            myPlayer.eme();
          });
        </script>

Para el contenido de Widevine Modular, debe configurar su reproductor para usar su servidor de licencias de Widevine usando el controlador de origen del reproductor.

Para actualizar una instancia de un reproductor en su página web, puede utilizar el controlador de origen del reproductor. A continuación, se muestra un ejemplo del uso de keySystemsOptions matriz con el player.src() función:

    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'
      }
      }]
    });

También puede utilizar el updateSourceData funcionan de la siguiente manera:

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

Para obtener más detalles, consulte la videojs-contrib-dash información sobre GitHub.

Apoyar a otros proveedores de DRM

El complemento ha implementado una ruta que permite a los clientes implementar soporte para otros proveedores de DRM. Esto es sobre todo útil para Fairplay, ya que Fairplay requiere una lógica personalizada necesaria para obtener la información de la licencia. Añadiendo un vendor.name a keySystems en una fuente determinada intentará utilizar esta lógica e incluirá el certificado y la información de licencia necesarios. A continuación, se muestra un ejemplo de 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'
      }
      }
      });
    });

Aquí hay un ejemplo de 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'
        }
        }
      });
    });

Este ejemplo carga fuentes Widevine y PlayReady:

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

Habilitar la depuración

Para habilitar la depuración de su contenido DRM DASH, agregue los siguientes scripts shaka a su 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>

El siguiente es un ejemplo de la depuración al cargar el reproductor:

Depurando en la consola al inicio

El siguiente es un ejemplo de la depuración después de que el video ha comenzado a reproducirse:

Depurando en consola después de jugar

DASH-IF

Brightcove Player es compatible con los activos del Foro de la industria DASH (DASH-IF), pasando a través de los datos de Brightcove a Native / EME. Ver http://dashif.org para obtener más información sobre DASH-IF. Los siguientes enlaces DASH-IF también son útiles cuando se usa DASH:

Restricciones de reproducción

Para configurar Brightcove Player para usar Restricciones de reproducción, consulte aquí .

Problemas conocidos

  • La Predeterminado (visualización automática) ajuste de subtítulos en el Medios de comunicación módulo PISTA DE TEXTO La sección no es compatible cuando se usa junto con DRM y subtítulos en el manifiesto. Los subtítulos en el manifiesto se utilizan con los productos de Brightcove Dynamic Delivery y SSAI, por ejemplo. Una solución para este problema es utilizar el <track> etiqueta con la implementación de Advanced Brightcove Player. Esto se detalla en el Agregar subtítulos a videos mediante programación documento. Tenga en cuenta que debe utilizar el default atributo con el <track> etiqueta.
  • Activos DRM y Chrome: Al usar la implementación del reproductor estándar (iframe) con el complemento DRM, allow="encrypted-media" es necesario para poder reproducir recursos DRM en Chrome.
        <iframe src="https://players.brightcove.net/123456789/BydO6uuuu_default/index.html?videoId=5783262319001"
        allowfullscreen
        width="640" height="360"
        allow="encrypted-media"></iframe>
  • Evento especial para Silverlight/IE11: En la mayoría de los casos, si desea interactuar mediante programación con el reproductor, debe esperar a que ready o loadedmetadata  evento que se enviará. Sin embargo, si desea interactuar mediante programación con el reproductor cuando usa la tecnología Silverlight en IE11 y reproduce contenido DRM, debe esperar el canplay evento.
  • En iOS, solo Safari proporciona las API de navegador DRM (EME) necesarias; actualmente, WebViews no es compatible con EME. Por lo tanto, Fairplay DRM solo funcionará en Safari.

Registro de cambios

Ver el Notas de la versión del complemento DRM.

Para obtener notas de la versión histórica, consulte la registro de cambios aquí.