Konfigurieren des Brightcove Players für DRM

In diesem Thema erfahren Sie, wie Brightcove Player die Verwaltung digitaler Rechte (DRM) implementiert. Das Dokument zeigt zuerst, wie das DRM-Plugin implementiert wird, dann folgen Details des Plugins und wie es implementiert wird.

Einleitung

Brightcove nutzt die folgenden Technologien, um DRM-geschützte Inhalte für eine möglichst große Vielfalt an Browsern und Geräten bereitzustellen:

  • MPEG-DASH mit Native/EME unterstützten CENC DRMs
  • HLS mit FairPlay

Um DRM mit Brightcove Player verwenden zu können, müssen Sie:

  • Produzieren von DRM-fähigen Inhalten
  • Aktivieren Sie Brightcove Player, um das DRM-Plugin zu verwenden
  • Konfigurieren Sie in einigen Fällen das DRM-Plugin für die Verwendung Ihres Lizenzservers

Terminologie

Überprüfen Sie diese Schlüsselbegriffe, die in diesem Dokument verwendet werden.

Begriff Definition
DRM Aus Wikipedia: Digital Rights Management (DRM) ist eine Klasse von Kopierschutztechnologien, die von Hardware- und Softwareherstellern, Herausgebern, Inhabern von Urheberrechten und Einzelpersonen verwendet werden, um die Verwendung digitaler Inhalte und Geräte nach dem Verkauf zu kontrollieren.
MPEG-STRICH Aus Wikipedia: Dynamisches adaptives Streaming über HTTP (DASH), auch als MPEG-DASH bekannt, ist eine adaptive Bitraten-Streaming-Technik, die ein qualitativ hochwertiges Streaming von Medieninhalten über das Internet ermöglicht, das von herkömmlichen HTTP-Webservern bereitgestellt wird. Ähnlich wie bei der HTTP Live Streaming (HLS) -Lösung von Apple teilt MPEG-DASH den Inhalt in eine Folge kleiner HTTP-basierter Dateisegmente auf, wobei jedes Segment ein kurzes Intervall der Wiedergabezeit eines Inhalts enthält, dessen Dauer möglicherweise viele Stunden beträgt. wie ein Film oder die Live-Übertragung eines Sportereignisses.
CENC Aus der ISO-Norm: Das gemeinsame Verschlüsselungsschema 'CENC' spezifiziert Standardverschlüsselungs- und Schlüsselzuordnungsmethoden, die von einem oder mehreren digitalen Rechten und Schlüsselverwaltungssystemen (DRM-Systemen) verwendet werden können, um die Entschlüsselung derselben Datei unter Verwendung verschiedener DRM-Systeme zu ermöglichen.
Verschlüsselte Medienerweiterungen (EME) Aus Wikipedia: EME ist ein W3C-Entwurf zur Bereitstellung eines Kommunikationskanals zwischen Webbrowsern und Agentensoftware für Digital Rights Management (DRM). Dies ermöglicht die Verwendung von HTML5-Videos zur Wiedergabe von DRM-umwickelten Inhalten, ohne dass Medien-Plugins von Drittanbietern wie Microsoft Silverlight erforderlich sind.

Mit dem Player-Modul implementieren

Gehen Sie folgendermaßen vor, um das DRM-Plugin in Studio zu implementieren und DRM basierend auf Ihrer Kontoeinrichtung zu aktivieren:

  1. Öffnen Sie das PLAYERS-Modul und erstellen Sie entweder einen neuen Player oder suchen Sie den Player, dem Sie die DRM-Funktionalität hinzufügen möchten.
  2. Klicken Sie auf den Link für den Spieler, um die Eigenschaften des Spielers zu öffnen.
  3. Klicken Wiedergabe im linken Navigationsmenü.
  4. Überprüfen Sie als Nächstes die Aktivieren Sie DRM Kontrollkästchen.
    DRM-Kontrollkästchen in Studio
  5. Um den Player zu veröffentlichen, klicken Sie auf Veröffentlichen & Einbetten > Änderungen veröffentlichen.
  6. Um das Dialogfeld „Öffnen“ zu schließen, klicken Sie auf Schließen.

DRM-Plugin-Architektur

Das DRM-Plugin (videojs-drm) ist ein Wrapper um zwei Plugins:

  • videojs-silberlicht
  • videojs-contrib-eme

Das videojs-drm-Plugin Version 5 nutzt die integrierten DASH-Wiedergabefunktionen des Players. Dies verwendet VHS, das ist die nächste und umbenannte Version des integrierten videojs-contrib-hls Plugins.

Ab Spieler 6.26.0 unterstützt der Player DASH Multi-Perioden. Für frühere Versionen des Players ist der Shaka-Spieler für DASH Multi-Periode erforderlich.

Wenn Sie den Shaka Player wie in Version 4 für die DASH-Wiedergabe verwenden möchten, können Sie das folgende Skript zusammen mit dem Skript videojs-drm Version 5 einschließen:

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

Das videojs-silverlight-Plugin ermöglicht die Wiedergabe von DASH-Inhalten auf bestimmten Internet Explorer-Browsern.

Das videojs-contrib-eme-Plugin ermöglicht die Wiedergabe von FairPlay HLS-Inhalten.

Verwendete Wiedergabetechnologien

Brightcove Player verwendet verschiedene DRM-Wiedergabetechnologien mit verschiedenen Browsern. Im Folgenden werden die mit Brightcove Player verwendeten DRM-Technologien beschrieben:

  • FairPlay: Apples DRM-System
  • PlayReady: Microsofts DRM-System
  • Widevine: Googles DRM-System

Die folgende Tabelle beschreibt die Beziehung zwischen dem Browser (neueste Version), Format und Wiedergabetechnologie, die im Brightcove Player verwendet wird:

Browser Formatieren DRM-Wiedergabetechnologie Wiedergabetyp verwendet
DRM-Inhalte zu liefern
Chrome-Desktop HLS oder DASH mit Widevine EME HLS oder MPEG-DASH
Chrome Mobile1 HLS oder DASH mit Widevine EME HLS oder MPEG-DASH
Internet Explorer2 HLS oder DASH mit PlayReady EME HLS oder MPEG-DASH
Kante HLS oder DASH mit Widevine EME HLS oder MPEG-DASH
Safari HLS mit FairPlay Einheimische HLS
Firefox HLS oder DASH mit Widevine EME HLS oder MPEG-DASH

1Die DRM-Wiedergabe mit Chrome Mobile unter iOS wird nicht unterstützt.

Produzieren Sie DRM-Inhalte

Es gibt zwei Schritte, die Sie ausführen müssen, um DRM-aktivierte Inhalte zu erstellen:

  1. Wenden Sie sich an Ihren Kundenbetreuer, um Ihre Konten DRM-aktiviert zu haben. Anschließend können Sie Ihr Konto mit den richtigen Lizenzschlüsseln und Profilen aufnehmen, um die Erstellung von DRM-geschützten Inhalten zu ermöglichen.
  2. Produzieren Sie DRM-geschützte Inhalte. Sie können entweder neue Inhalte hochladen oder vorhandene Inhalte erneut als DRM codieren. Dies geschieht durch Auswahl des Ingest-Profils, das Ihre gewünschte Verschlüsselungstechnologie erzeugt.

Sie müssen DRM-geschützte Inhalte erstellen, die entweder MPEG-DASH-Manifeste mit segmentierten und verschlüsselten Videos oder HLS FairPlay-Inhalte verwenden.

Implementierung der FairPlay-Wiedergabe im Code

Wenn Sie die FairPlay-Wiedergabe mit dem In-Page-Einbettungscode implementieren möchten, müssen Sie diese Schritte ausführen, um das DRM-Plugin zu verwenden:

  1. Fügen Sie im Header Ihrer HTML-Seite das Stylesheet des Plugins hinzu:
        <link href="https://players.brightcove.net/videojs-drm/5/videojs-drm.css" rel="stylesheet">
        
        
  2. Fügen Sie das JavaScript des Plugins ein:
        <script src="https://players.brightcove.net/videojs-drm/5/videojs-drm.min.js"></script>
  3. Wenn Ihr Konto für Dynamic Delivery eingerichtet ist, rufen Sie einfach das EME-Plugin auf, um es zu initialisieren.

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

     

    Wenn Ihr Konto NICHT für Dynamic Delivery eingerichtet ist, müssen Sie das EME-Plugin mit den FairPlay-Anmeldeinformationen aufrufen und konfigurieren.

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

    Brightcove Player sendet die Informationen zur FairPlay-Anmeldeinformationen an einen Video Cloud FairPlay-Zertifikatpfad.

Befolgen Sie diese Schritte, um das DRM-Plugin mit FairPlay-geschützten Inhalten zu verwenden:

  1. Fügen Sie im Header Ihrer HTML-Seite das Stylesheet des Plugins hinzu:
        <link href="https://players.brightcove.net/videojs-drm/5/videojs-drm.css" rel="stylesheet">
  2. Fügen Sie das JavaScript des Plugins ein:
        <script src="https://players.brightcove.net/videojs-drm/5/videojs-drm.min.js"></script>
  3. Rufen Sie in einem JavaScript-Block auf der Seite das EME-Plugin auf und konfigurieren Sie es mit FairPlay-Anmeldeinformationen, indem Sie Folgendes bereitstellen Zertifikat abrufen , getContentId Und getLicense Funktionen zum EME-Plugin. Diese Funktionen sind spezifisch für Ihre eigene FairPlay-Lizenzserver-Implementierung und können direkt an das EME-Plugin weitergegeben werden, bevor ein SRC festgelegt wird:
        <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>

Beachten Sie, dass die FairPlay-Informationen auch als Teil jedes src-Objekts übergeben werden können. Die eMeOptions werden als Parameter für alle Funktionen bereitgestellt. Sie sind ein Verweis auf Plugin-Optionen, die mit den Quelloptionen der aktuellen Quelle zusammengeführt (überschrieben durch) werden. Es ist verfügbar, um den Zugriff auf Optionen zu erleichtern, damit Sie sie nicht selbst pflegen müssen.

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

Wenn Sie beispielsweise eine ApplicationId und PublisherID für die getCertificate-Anfrage verwenden müssen, können Sie die Plugin-Optionen auf diese Weise übergeben:

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

Oder wenn Sie eine quellspezifische PublisherID benötigen, können Sie diese über die Quelloptionen überschreiben:

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

Im Folgenden finden Sie eine Beispielimplementierung, die die Optionen als src-Optionen übergibt, die Content-ID vom Hostnamen, der Festlizenz- und Zertifikat-URIs sowie einem Lizenz-URI abruft, der einen POST mit einem Text der Schlüsselnachricht erfordert:

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

Implementierung der Widevine-Wiedergabe im Code

Wenn Sie die Widevine-Wiedergabe mit dem In-Page-Einbettungscode implementieren möchten, müssen Sie diese Schritte ausführen, um das DRM-Plugin zu verwenden:

  1. Fügen Sie im Header Ihrer HTML-Seite das Stylesheet des Plugins hinzu:
        <link href="https://players.brightcove.net/videojs-drm/5/videojs-drm.css" rel="stylesheet">
  2. Fügen Sie das JavaScript des Plugins ein:
        <script src="https://players.brightcove.net/videojs-drm/5/videojs-drm.min.js"></script>
  3. Rufen Sie als nächstes einfach das EME-Plugin auf, um es zu initialisieren.
        <script type="text/javascript">
          videojs.getPlayer('myPlayerID').ready(function() {
            var myPlayer = this;
            myPlayer.eme();
          });
        </script>

Für Widevine Modularer Inhalte müssen Sie Ihren Player so konfigurieren, dass er Ihren Widevine-Lizenzserver mit dem Quellhandler des Players verwendet.

Um eine Instanz eines Players auf Ihrer Webseite zu aktualisieren, können Sie den Quellhandler des Players verwenden. Hier ist ein Beispiel für die Verwendung des keySystemsOptions Arrays mit der player.src() Funktion:

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

Sie können die updateSourceData Funktion auch wie folgt verwenden:

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

Weitere Informationen finden Sie in den videojs-contrib-dash Informationen auf GitHub.

Unterstützung anderer DRM-Anbieter

Das Plugin hat einen Pfad implementiert, der es Kunden ermöglicht, Unterstützung für andere DRM-Anbieter zu implementieren. Dies ist hauptsächlich für Fairplay nützlich, da Fairplay eine benutzerdefinierte Logik benötigt, die erforderlich ist, um Lizenzinformationen zu erhalten. Durch das Hinzufügen eines vendor.name keySystems zu einer bestimmten Quelle wird versucht, diese Logik zu nutzen und die erforderlichen Zertifikat- und Lizenzinformationen einzuschließen. Ein Beispiel für Azure folgt:

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

Hier ist ein Beispiel für 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'
        }
        }
      });
    });

In diesem Beispiel werden Widevine- und PlayReady-Quellen geladen:

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

Debuggen aktivieren

Um das Debuggen für Ihren DRM DASH-Inhalt zu aktivieren, fügen Sie Ihrem Brightcove Player die folgenden Shaka-Skripte hinzu:

    <!-- 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>

Das Folgende ist ein Beispiel für das Debuggen beim Laden des Spielers:

Debuggen in der Konsole beim Start

Das Folgende ist ein Beispiel für das Debuggen, nachdem das Video abgespielt wurde:

Debuggen in der Konsole nach dem Spielen

STRICH-WENN

Der Brightcove Player unterstützt Assets des DASH Industry Forum (DASH-IF) und gibt Brightcove-Daten an Native/EME weiter. Sehen http://dashif.org Weitere Informationen zu DASH-IF. Die folgenden DASH-IF-Links sind auch hilfreich bei der Verwendung von DASH:

Einschränkungen bei der Wiedergabe

Informationen zum Konfigurieren von Brightcove Player für die Verwendung von Wiedergabeeinschränkungen finden Sie hier.

Bekannte Probleme

  • Der Standard (Automatische Anzeige) Untertiteleinstellung in der Medien Moduls TEXTSPUR Der Abschnitt wird nicht unterstützt, wenn er in Verbindung mit DRM und In-Manifest-Untertiteln verwendet wird. In-Manifest-Untertitel werden beispielsweise mit den Brightcove-Produkten Dynamic Delivery und SSAI verwendet. Eine Problemumgehung für dieses Problem besteht darin, das <track> Tag mit der Advanced Brightcove Player-Implementierung zu verwenden. Dies ist ausführlich in der Programmgesteuertes Hinzufügen von Untertiteln zu Videos dokumentieren. Beachten Sie, dass Sie das default Attribut mit dem <track> Tag verwenden müssen.
  • DRM-Assets und Chrome: Wenn Sie die Standard- (Iframe) -Player-Implementierung mit dem DRM-Plugin verwenden, allow="encrypted-media" ist es erforderlich, DRM-Assets in Chrome abspielen zu können.
        <iframe src="https://players.brightcove.net/123456789/BydO6uuuu_default/index.html?videoId=5783262319001"
        allowfullscreen
        width="640" height="360"
        allow="encrypted-media"></iframe>
  • Sonderveranstaltung für Silverlight/IE11: In den meisten Fällen würden Sie, wenn Sie programmgesteuert mit dem Player interagieren möchten, entweder auf das warten ready oder loadedmetadata  zu versendendes Ereignis. Wenn Sie jedoch programmgesteuert mit dem Player interagieren möchten, wenn Sie die Silverlight-Technologie in IE11 verwenden UND DRM-Inhalte abspielen, sollten Sie auf das canplay Event warten.
  • Unter iOS stellt nur Safari die erforderlichen DRM-Browser-APIs (EME) zur Verfügung, WebViews haben derzeit keine EME-Unterstützung. Daher wird Fairplay DRM nur an Safari arbeiten.

Änderungsliste

Siehe die Versionshinweise zum DRM Plugin.

Historische Versionshinweise finden Sie im Changelog hier.