Configuration du lecteur Brightcove pour DRM

Dans cette rubrique, vous apprendrez comment Brightcove Player implémente la gestion des droits numériques (DRM). Le document montre d'abord comment implémenter le plugin DRM, puis est suivi des détails du plugin et de la manière dont il est implémenté.

Introduction

Brightcove adopte les technologies suivantes pour fournir du contenu protégé par DRM à la plus grande variété de navigateurs et d'appareils:

  • MPEG-DASH avec DRM CENC natifs / EME pris en charge
  • HLS avec FairPlay

Pour utiliser DRM avec Brightcove Player, vous devez:

  • Produire du contenu compatible DRM
  • Activez Brightcove Player pour utiliser le plugin DRM
  • Dans certains cas, configurez le plugin DRM pour utiliser votre serveur de licences

Terminologie

Passez en revue ces termes clés utilisés dans ce document.

Terme Définition
GDN Sur Wikipédia : La gestion des droits numériques (DRM) est une classe de technologies de protection contre la copie qui sont utilisées par les fabricants de matériel et de logiciels, les éditeurs, les titulaires de droits d'auteur et les particuliers dans le but de contrôler l'utilisation du contenu et des appareils numériques après la vente.
MPEG-DASH Sur Wikipédia : Le streaming adaptatif dynamique sur HTTP (DASH), également connu sous le nom de MPEG-DASH, est une technique de diffusion en continu à débit adaptatif qui permet un streaming de haute qualité de contenu multimédia sur Internet fourni à partir de serveurs Web HTTP conventionnels. Semblable à la solution HTTP Live Streaming (HLS) d'Apple, MPEG-DASH fonctionne en divisant le contenu en une séquence de petits segments de fichiers basés sur HTTP, chaque segment contenant un court intervalle de temps de lecture d'un contenu pouvant durer plusieurs heures, comme un film ou la diffusion en direct d'un événement sportif.
CENC De la norme ISO: Le schéma de chiffrement commun «CENC» spécifie les méthodes de chiffrement et de mappage de clés standard qui peuvent être utilisées par un ou plusieurs systèmes de gestion de droits et de clés numériques (systèmes DRM) pour permettre le déchiffrement du même fichier en utilisant différents systèmes DRM.
Extensions multimédias chiffrées (EME) Sur Wikipédia : EME est un projet de spécification du W3C pour fournir un canal de communication entre les navigateurs Web et le logiciel d'agent de gestion des droits numériques (DRM). Cela permet d'utiliser la vidéo HTML5 pour lire du contenu DRM sans avoir besoin de plugins multimédias tiers, tels que Microsoft Silverlight.

Implémenter avec le module Players

Pour implémenter le plug-in DRM dans Studio et activer DRM en fonction de la configuration de votre compte, procédez comme suit:

  1. Ouvrez le JOUEURS module et créez un nouveau lecteur ou localisez le lecteur auquel vous souhaitez ajouter la fonctionnalité DRM.
  2. Cliquez sur le lien correspondant au lecteur pour ouvrir ses propriétés.
  3. Cliquez sur Lecture dans le menu de navigation de gauche.
  4. Ensuite, vérifiez le Activer DRM case à cocher.
    Case à cocher DRM dans Studio
  5. Pour publier le lecteur, cliquez sur Publier et intégrer > Publier les modifications.
  6. Pour fermer la boîte de dialogue ouverte, cliquez sur Fermer.

Architecture du plugin DRM

Le plugin DRM (videojs-drm ) est un wrapper autour de deux plugins:

  • videojs-silverlight
  • videojs-contrib-eme

le videojs-drm La version 5 du plugin utilise les capacités de lecture DASH intégrées du lecteur. Cela utilise VHS, qui est la version suivante et renommée du module intégré videojs-contrib-hls brancher.

À compter du joueur 6.26.0, le joueur prend en charge DASH multipériode. Pour les versions antérieures du lecteur, le lecteur Shaka est requis pour DASH multi-période.

Si vous souhaitez utiliser le lecteur Shaka pour la lecture DASH, comme il l'a fait dans la version 4, vous pouvez inclure le script suivant avec videojs-drm script version 5:

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

le videojs-silverlight Le plugin permet la lecture du contenu DASH sur certains navigateurs Internet Explorer.

le videojs-contrib-eme Le plugin permet la lecture du contenu FairPlay HLS.

Technologies de lecture utilisées

Brightcove Player utilise différentes technologies de lecture DRM avec différents navigateurs. Les informations suivantes décrivent les technologies DRM utilisées avec Brightcove Player:

  • Fair-play: Système DRM d'Apple
  • PlayReady: Système DRM de Microsoft
  • Widevine: Système DRM de Google

Le tableau suivant détaille la relation entre le navigateur (dernière version), le format et la technologie de lecture utilisée dans Brightcove Player:

Navigateur Format Technologie de lecture DRM Type de rendu utilisé
pour fournir du contenu DRM
Bureau Chrome HLS ou DASH avec Widevine EME HLS ou MPEG-DASH
Chrome Mobile1 HLS ou DASH avec Widevine EME HLS ou MPEG-DASH
Internet Explorer2 HLS ou DASH avec PlayReady EME HLS ou MPEG-DASH
Edge HLS ou DASH avec Widevine EME HLS ou MPEG-DASH
Safari HLS avec FairPlay Natif HLS
Firefox HLS ou DASH avec Widevine EME HLS ou MPEG-DASH

1La lecture DRM à l'aide de Chrome Mobile sur iOS n'est pas prise en charge.

Produire du contenu DRM

Vous devez effectuer deux étapes pour créer du contenu compatible DRM:

  1. Contactez votre responsable de compte pour que vos comptes soient activés par DRM. Vous pouvez ensuite configurer votre compte avec les clés de licence et les profils d'ingestion appropriés pour permettre la création de contenu protégé par DRM.
  2. Produisez du contenu protégé par DRM. Vous pouvez choisir de télécharger un nouveau contenu ou de ré-encoder le contenu existant en tant que DRM. Cela se fait en sélectionnant le Profil d'acquisition qui produit la technologie de cryptage souhaitée.

Vous devrez produire un contenu protégé par DRM qui utilise soit des manifestes MPEG-DASH avec des vidéos segmentées et chiffrées, soit du contenu HLS FairPlay.

Implémentation de la lecture FairPlay dans le code

Si vous souhaitez implémenter la lecture FairPlay à l'aide du code d'intégration dans la page, vous devez suivre ces étapes pour utiliser le plugin DRM:

  1. Dans l'en-tête de votre page HTML, incluez la feuille de style du plugin :
        <link href="https://players.brightcove.net/videojs-drm/5/videojs-drm.css" rel="stylesheet">
        
        
  2. Incluez le JavaScript du plugin :
        <script src="https://players.brightcove.net/videojs-drm/5/videojs-drm.min.js"></script>
  3. Si votre compte est configuré pour Livraison dynamique , appelez simplement le plugin EME pour l'initialiser.

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

     

    Si votre compte n'est PAS configuré pour Livraison dynamique , vous devez alors appeler et configurer le plugin EME avec les informations d'identification FairPlay.

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

    Brightcove Player envoie les informations d'identification FairPlay à un chemin de certificat Video Cloud FairPlay.

Suivez ces étapes pour utiliser le plugin DRM avec du contenu protégé par FairPlay:

  1. Dans l'en-tête de votre page HTML, incluez la feuille de style du plugin :
        <link href="https://players.brightcove.net/videojs-drm/5/videojs-drm.css" rel="stylesheet">
  2. Incluez le JavaScript du plugin :
        <script src="https://players.brightcove.net/videojs-drm/5/videojs-drm.min.js"></script>
  3. Dans un bloc JavaScript de la page, appelez et configurez le plugin EME avec les informations d'identification FairPlay en fournissant getCertificate , getContentId et getLicense fonctions au plugin EME. Ces fonctions sont spécifiques à votre propre implémentation de serveur de licences FairPlay et peuvent être transmises directement au plugin EME avant une src est défini:
        <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>

Notez que les informations FairPlay peuvent également être transmises dans le cadre de chaque src objet. le emeOptions sont fournis en tant que paramètre de toutes les fonctions. Ils font référence aux options du plugin fusionnées avec (écrasées par) les options source de la source actuelle. Il est disponible pour faciliter l'accès aux options afin que vous n'ayez pas à les entretenir vous-même.

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

Par exemple, si vous devez utiliser un ID d'application et publisherId pour le getCertificate request, vous pouvez transmettre les options du plugin de cette façon:

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

Ou, si vous avez besoin d'une source spécifique publisherId vous pouvez l'écraser via les options 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'
    });

Ce qui suit est un exemple d'implémentation, en passant les options en tant que src options, récupérant l'ID de contenu à partir du nom d'hôte, les URI de licence et de certificat fixes, et un URI de licence qui nécessite un POST avec un corps du message clé:

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

Implémentation de la lecture Widevine dans le code

Si vous souhaitez implémenter la lecture Widevine à l'aide du code d'intégration dans la page, vous devez suivre ces étapes pour utiliser le plugin DRM:

  1. Dans l'en-tête de votre page HTML, incluez la feuille de style du plugin :
        <link href="https://players.brightcove.net/videojs-drm/5/videojs-drm.css" rel="stylesheet">
  2. Incluez le JavaScript du plugin :
        <script src="https://players.brightcove.net/videojs-drm/5/videojs-drm.min.js"></script>
  3. Ensuite, appelez simplement le plugin EME pour l'initialiser.
        <script type="text/javascript">
          videojs.getPlayer('myPlayerID').ready(function() {
            var myPlayer = this;
            myPlayer.eme();
          });
        </script>

Pour le contenu Widevine Modular, vous devez configurer votre lecteur pour qu'il utilise votre serveur de licences Widevine à l'aide du gestionnaire de source du lecteur.

Pour mettre à jour une instance d'un lecteur sur votre page Web, vous pouvez utiliser le gestionnaire de source du lecteur. Voici un exemple d'utilisation du keySystemsOptions tableau avec le player.src() fonction:

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

Vous pouvez également utiliser le updateSourceData fonction comme suit:

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

Pour plus de détails, consultez le videojs-contrib-dash informations sur GitHub.

Prise en charge d'autres fournisseurs DRM

Le plugin a implémenté un chemin qui permet aux clients d'implémenter la prise en charge d'autres fournisseurs DRM. Ceci est surtout utile pour Fairplay, car Fairplay nécessite une logique personnalisée nécessaire pour obtenir les informations de licence. Ajout d'un vendor.name à keySystems sur une source donnée tentera d'utiliser cette logique et inclura les informations de certificat et de licence nécessaires. Un exemple pour Azure suit:

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

Voici un exemple pour 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'
        }
        }
      });
    });

Cet exemple charge les sources Widevine et PlayReady:

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

Activer le débogage

Pour activer le débogage de votre contenu DRM DASH, ajoutez les scripts shaka suivants à votre 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>

Voici un exemple de débogage au chargement du lecteur:

Débogage dans la console au démarrage

Voici un exemple de débogage après le début de la lecture de la vidéo:

Débogage dans la console après avoir joué

DASH-IF

Le lecteur Brightcove prend en charge les ressources DASH Industry Forum (DASH-IF), en passant les données Brightcove vers Native / EME. Voir http://dashif.org pour plus d'informations sur DASH-IF. Les liens DASH-IF suivants sont également utiles lors de l'utilisation de DASH:

Restrictions de lecture

Pour configurer le lecteur Brightcove afin d'utiliser les restrictions de lecture, cliquez ici.

Problèmes connus

  • le Par défaut (affichage automatique) paramètre de légende dans Médias modules PISTE DE TEXTE La section n'est pas prise en charge lorsqu'elle est utilisée avec DRM et les légendes dans le manifeste. Les sous-titres dans le manifeste sont utilisés avec les produits Brightcove Dynamic Delivery et SSAI, par exemple. Une solution de contournement pour ce problème consiste à utiliser la <track> balise avec l'implémentation Advanced Brightcove Player. Ceci est détaillé dans le Ajout de légendes aux vidéos par programme document. Notez que vous devez utiliser l' default attribut avec la <track> balise.
  • Ressources DRM et Chrome: Lors de l'utilisation de l'implémentation du lecteur Standard (iframe) avec le plugin DRM, allow="encrypted-media" est nécessaire pour pouvoir lire des éléments DRM dans Chrome.
        <iframe src="https://players.brightcove.net/123456789/BydO6uuuu_default/index.html?videoId=5783262319001"
        allowfullscreen
        width="640" height="360"
        allow="encrypted-media"></iframe>
  • Événement spécial pour Silverlight / IE11: Dans la plupart des cas, si vous souhaitez interagir par programmation avec le lecteur, vous attendez soit le ready ou loadedmetadata  événement à envoyer. Cependant, si vous souhaitez interagir par programmation avec le lecteur lors de l'utilisation de la technologie Silverlight dans IE11, ET lire du contenu DRM, vous devez attendre le canplay un événement.
  • Sur iOS, seul Safari fournit les API de navigateur DRM nécessaires (EME), les WebViews ne prennent actuellement pas en charge EME. Par conséquent, Fairplay DRM ne fonctionnera que sur Safari.

Changelog

Voir le Notes de version du plug-in DRM.

Pour les notes de version historiques, voir le changelog ici.