Überblick: Forensische Wasserzeichen

In diesem Thema erhalten Sie einen umfassenden Überblick über das Brightcove-Feature "Forensisches Wasserzeichen".

Einleitung

Brightcove hat eine Partnerschaft mit NAGRA um forensische Wasserzeichen als Funktion in der Video Cloud-Plattform bereitzustellen. Dies trägt dazu bei, Ihre Premium-Inhalte vor Piraterie und unbefugtem Teilen von Inhalten zu schützen. Diese Funktion hilft auch, die Quelle eines Inhaltslecks schnell zu identifizieren, sodass Maßnahmen ergriffen werden können.

Das folgende Diagramm gibt einen Überblick:

  • Inhaltliche Vorbereitung
    • Das forensische Wasserzeichen ist ein unsichtbares Wasserzeichen, das während der Transkodierung mit dem SDK von Nagra in das Video eingebettet wird
    • Bei der Aufnahme werden 2 VOD-Wiedergaben erstellt, eine mit Wasserzeichen A und eine mit Wasserzeichen B; beide Wiedergaben sind Teil desselben Titels in Video Cloud
  • Lieferung
    • Bei der Wiedergabe der Inhalte wird das Forensic Watermark-Token dem Player zur Verfügung gestellt und dann in die URL aufgenommen, die für die Anforderung von Inhalten aus dem CDN verwendet wird
    • Das CDN interpretiert das Token und liefert das Video mit der richtigen Reihenfolge der A/B-Segmente an den Betrachter
Übersichtsdiagramm
Überblick über die forensische Wasserzeichenerstellung

Einrichtung

Die folgende Einrichtung ist erforderlich, um die forensische Wasserzeichenlösung von Brightcove zu unterstützen:

  1. Kontaktieren Sie Ihren Customer Success Manager:
    1. Stellen Sie sicher, dass Ihr Konto für Dynamic Delivery aktiviert ist.
    2. Aktivieren Sie Ihr Konto für forensische Wasserzeichen; Dies ist ein kostenpflichtiges Add-on für Video Cloud.
  2. Holen Sie sich Ihren Lizenzschlüssel von NAGRA.
  3. Generieren Sie ein öffentlich-privates Schlüsselpaar, das vom Forensic Watermarking JWT verwendet und vom CDN entschlüsselt wird. (siehe unten)
  4. Verwenden Sie das von NAGRA bereitgestellte Skript, um ein JSON-Webtoken (JWT) für das forensische Wasserzeichen zu generieren. Achten Sie darauf, zu verwalten, wie das forensische Wasserzeichen-Token und die einzelnen Viewer verknüpft sind. Sie werden es brauchen, wenn Sie Konfigurieren Sie Ihre Spieler und im Falle eines Erkennungsdienstes, um zu erfahren, welcher Zuschauer den Inhalt illegal durchgesickert hat.

Es gibt viele Möglichkeiten, das öffentlich-private Schlüsselpaar zu generieren. Hier sind einige Beispiele:

Beispiel für ein Bash-Skript:

Beispielskript zum Generieren des Schlüsselpaars:

#!/bin/bash
set -euo pipefail

NAME=${1:-}
test -z "${NAME:-}" && NAME="brightcove-forensic-watermarking-key-$(date +%s)"
mkdir "$NAME"

PRIVATE_PEM="./$NAME/private.pem"
PUBLIC_PEM="./$NAME/public.pem"
PUBLIC_TXT="./$NAME/public_key.txt"

ssh-keygen -t rsa -b 2048 -m PEM -f "$PRIVATE_PEM" -q -N ""
openssl rsa -in "$PRIVATE_PEM" -pubout -outform PEM -out "$PUBLIC_PEM" 2>/dev/null
openssl rsa -in "$PRIVATE_PEM" -pubout -outform DER | base64 > "$PUBLIC_TXT"

rm "$PRIVATE_PEM".pub

echo "Public key to saved in $PUBLIC_TXT"

Führen Sie das Skript aus:

$ bash keygen.sh
Beispiel mit Go

Beispiel mit dem Go Programmiersprache zum Generieren des Schlüsselpaars:

package main
  
  import (
    "crypto/rand"
    "crypto/rsa"
    "crypto/x509"
    "encoding/base64"
    "encoding/pem"
    "flag"
    "fmt"
    "io/ioutil"
    "os"
    "path"
    "strconv"
    "time"
  )
  
  func main() {
    var out string
  
    flag.StringVar(&out, "output-dir", "", "Output directory to write files into")
    flag.Parse()
  
    if out == "" {
      out = "rsa-key_" + strconv.FormatInt(time.Now().Unix(), 10)
    }
  
    if err := os.MkdirAll(out, os.ModePerm); err != nil {
      panic(err.Error())
    }
  
    priv, err := rsa.GenerateKey(rand.Reader, 2048)
    if err != nil {
      panic(err.Error())
    }
  
    privBytes := x509.MarshalPKCS1PrivateKey(priv)
  
    pubBytes, err := x509.MarshalPKIXPublicKey(priv.Public())
    if err != nil {
      panic(err.Error())
    }
  
    privOut, err := os.OpenFile(path.Join(out, "private.pem"), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
    if err != nil {
      panic(err.Error())
    }
  
    if err := pem.Encode(privOut, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: privBytes}); err != nil {
      panic(err.Error())
    }
  
    pubOut, err := os.OpenFile(path.Join(out, "public.pem"), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
    if err != nil {
      panic(err.Error())
    }
  
    if err := pem.Encode(pubOut, &pem.Block{Type: "PUBLIC KEY", Bytes: pubBytes}); err != nil {
      panic(err.Error())
    }
  
    var pubEnc = base64.StdEncoding.EncodeToString(pubBytes)
  
    var pubEncOut = path.Join(out, "public_key.txt")
    if err := ioutil.WriteFile(pubEncOut, []byte(pubEnc+"\n"), 0600); err != nil {
      panic(err.Error())
    }
  
    fmt.Println("Public key saved in " + pubEncOut)
  }
  

Beispiel mit node.js

Beispiel mit node.js zum Generieren des Schlüsselpaars:

var crypto = require("crypto");
  var fs = require("fs");
  
  var now = Math.floor(new Date() / 1000);
  var dir = "rsa-key_" + now;
  fs.mkdirSync(dir);
  
  crypto.generateKeyPair(
    "rsa",
    {modulusLength: 2048},
    (err, publicKey, privateKey) => {
      fs.writeFile(
        dir + "/public.pem",
        publicKey.export({ type: "spki", format: "pem" }),
        err => {}
      );
      fs.writeFile(
        dir + "/public_key.txt",
        publicKey.export({ type: "spki", format: "der" }).toString("base64") +
          "\n",
        err => {}
      );
      fs.writeFile(
        dir + "/private.pem",
        privateKey.export({ type: "pkcs1", format: "pem" }),
        err => {}
      );
    }
  );
  
  console.log("Public key saved in " + dir + "/public_key.txt");

Implementierung

Sie können das forensische Wasserzeichen entweder mit Video Cloud Studio implementieren oder dies manuell mithilfe der Brightcove-APIs tun. Die Methoden werden in den folgenden Abschnitten detailliert beschrieben.

Videocloud-Studio

Führen Sie diese Schritte aus, um das forensische Wasserzeichen mit Video Cloud Studio zu verwenden:

  1. Forensisches Wasserzeichen ist nicht mit einem bestimmten Aufnahmeprofil verknüpft. Sie können jedes Dynamic Delivery- oder Context Aware Encoding-Profil verwenden.

    1. Stellen Sie Brightcove Ihren NAGRA-Lizenzschlüssel zur Verfügung. Dieser Lizenzschlüssel wird während der Transcodierung verwendet, um das Wasserzeichen zu generieren.
    2. In dem Hochladen Wählen Sie Ihr Aufnahmeprofil aus.
    3. Überprüf den Forensisches Wasserzeichen aktivieren Möglichkeit.

      Option für Wasserzeichen aktivieren
      Option für Wasserzeichen aktivieren
    4. Tag hinzufügen watermarked zum Video, da dies die Identifizierung der Videos mit forensischen Wasserzeichen erheblich erleichtert und Erstellen Sie Analyseberichte über sie:
      Tag hinzufügen
      Tag hinzufügen
    5. Ziehen oder suchen Sie nach Ihrem Video, um die Aufnahme zu starten.

  2. Konfigurieren Sie Ihren Player.

    Hier übergibst du dem Spieler den NAGRA-Wasserzeichen-Token und die Viewer-ID. Sie können entweder den Brightcove-Webplayer oder die nativen SDK-Player verwenden:

  3. Spielen Sie Inhalte ab, die für Forensic Watermarking aufgenommen wurden.

Analytics-Berichte

Analyseberichte zu Zuschauern für forensische Videos mit Wasserzeichen sind über das Analytics-API nur. Berichte können im JSON-, CSV- oder XLXS-Format zurückgegeben werden

In den Analytics-Daten:

1 Transaction = 1 unique Viewer per video in 24 hours

Beispiel 1: Zuschauer für ein Video nach Datum

Für dieses Beispiel fragen wir die ab video , viewer Und date Dimensionen und erhalten den Bericht im CSV-Format zurück.

Musteranfrage

https://analytics.api.brightcove.com/v1/data?accounts=4800266849001&from=2021-06-23&to=2021-06-25&dimensions=date,viewer&limit=10&where=video==70702952720202&fields=video,viewer,video_view&format=csv

Antwort

"date","video","viewer","video_view"
"2021-06-25","70702952720202","3f46037f932b0c5a","1"
"2021-06-24","70702952720202","3f46037f932b0c5a","2"

Notiere dass der viewer wird vom Brightcove-Player generiert und auf eine eindeutige Zeichenfolge basierend auf Benutzeragent und IP festgelegt. Idealerweise sollten Sie die Viewer-ID selbst basierend auf einer Anmelde-ID festlegen - siehe dieses Thema für Informationen, wie das geht. Ihre Kennung basiert auf Informationen, die über JavaScript abgerufen werden können.

Beispiel 2: Zuschauerzahl

In diesem Beispiel gehen wir davon aus, dass alle Videos mit forensischem Wasserzeichen das Tag haben watermarked. Wir werden die erneut abfragen video , viewer Und date Abmessungen und senden Sie nur einen Artikel zurück, da es die Zusammenfassung ist, die uns hier interessiert:

Musteranfrage

https://analytics.api.brightcove.com/v1/data?accounts=4800266849001&from=2021-06-23&to=2021-06-25&dimensions=date,viewer&limit=1&where=video.q==tags:watermarked

Antwort

{
  "item_count": 7,
  "items": [
    {
      "date": "2021-06-25",
      "viewer": "07B1489C-5786-400E-945B-ABB3559B3897",
      "video_view": 1
    }
  ],
  "summary": {
    "video_view": 25
  }
}

APIs

Hier sind die APIs und Felder im Zusammenhang mit Forensic Watermarking:

Dynamische Ingest-API

Sobald ein Konto für forensische Wasserzeichen aktiviert ist, können Sie einem Video forensische Wasserzeichen hinzufügen, indem Sie die forensic_watermarking Feld für Ihre Aufnahmeanfrage und setzen Sie es auf true. Dies kann für die ursprüngliche Aufnahme, Ersetzung oder Neutranscodierung des Videos erfolgen.

Beispielanfragetext

{
  "master": {
          "url": "https://solutions.brightcove.com/video/Walking_Dead_609.mp4",
          "audio_tracks": [
              {
                  "language": "en",
                  "variant": "main"
              }
          ]
      },
    "profile": "multi-platform-standard-static-with-mp4",
    "forensic_watermarking": true,
    "capture-images": true
}

Da ist auch ein forensic_watermarking_stub_mode Flag, das, wenn es auf gesetzt ist, true erzeugt sichtbare forensische Wasserzeichen:

Sichtbare forensische Wasserzeichen
Sichtbare forensische Wasserzeichen

forensic_watermarking muss auch auf gesetzt sein, true um sichtbare Wasserzeichen zu aktivieren.

Verwenden Sie sichtbare Wasserzeichen in einem Video, um Integrationen zu testen (Sie sollten mit einem Video von mindestens 10 Minuten Länge testen). Sobald Sie sich vergewissert haben, dass die forensischen Wasserzeichen vorhanden sind, sollten Sie sie entfernen, sodass nur noch unsichtbare forensische Wasserzeichen angezeigt werden. Dazu müssen Sie eine weitere Dynamic Ingest-Anfrage senden, um das Video neu zu transcodieren, diesmal die Einstellung forensic_watermarking_stub_mode zu false.

Beispielanforderungstext für sichtbare forensische Wasserzeichen

{
  "master": {
          "url": "https://solutions.brightcove.com/video/Walking_Dead_609.mp4",
          "audio_tracks": [
              {
                  "language": "en",
                  "variant": "main"
              }
          ]
      },
    "profile": "multi-platform-standard-static-with-mp4",
    "forensic_watermarking": true,
    "forensic_watermarking_stub_mode": true,
    "capture-images": true
}

Beispiel für den Anfragetext zum Entfernen sichtbarer forensischer Wasserzeichen

{
    "profile": "multi-platform-standard-static-with-mp4",
    "forensic_watermarking": true,
    "forensic_watermarking_stub_mode": false,
    "capture-images": true
}

CMS-API

Standardmäßig werden forensische Wasserzeichen-Darstellungen geliefert, wenn während der Aufnahme ein forensisches Wasserzeichen angefordert wurde. Das Vorhandensein von forensischen Wasserzeichen wird durch das schreibgeschützte Feld angezeigt forensic_watermarking. Wenn das Feld den Wert von hat ACTIVE, wurde das forensische Wasserzeichen zu VOD hinzugefügt. Wenn das Feld den Wert UNAVAILABLE oder hat null, enthält das VOD kein forensisches Wasserzeichen.

Zencoder

Um Ausgaben mit forensischem Wasserzeichen in Zencoder zu generieren, müssen Sie 2 Ausgänge pro Video angeben, eine mit "forensic_watermark": "A" und die andere mit "forensic_watermark": "B"(dies sind die einzigen beiden Werte, die das forensic_watermark Feld haben kann).

Musteranfrage (nur Ausgaben)

{
  "outputs": [
      {
          "base_url": "s3://urlTest",
          "filename": "contextAwareEncoding1_A.m4f",
          "public": false,
          "format": "m4f",
          "label": "m4f-contextAwareEncoding1-A-b30e1",
          "generate_mp4_atom_map": true,
          "Mp4_atom_map_filename": "contextAwareEncod-A-atom_map.json",
          "skip_audio": true,
          "forensic_watermark": "A",
          "dynamic_profile_rendition": 1,
          "skip": {
              "require_video": true
          },
          "fragment_duration": 2000,
          "segment_seconds": 2,
          "headers": {
              "x-amz-server-side-encryption": "AES256"
          }
      },
      {         
          "base_url": "s3://urlTest",
          "filename": "contextAwareEncoding1_B.m4f",
          "public": false,
          "format": "m4f",
          "label": "m4f-contextAwareEncoding1-B-e348",
          "generate_mp4_atom_map": true,
          "mp4_atom_map_filename": "contextAwareEncod-B-atom_map.json",
          "skip_audio": true,
          "forensic_watermark": "B",
          "dynamic_profile_rendition": 1,
          "skip": {
              "require_video": true
          },
          "fragment_duration": 2000,
          "segment_seconds": 2,
          "headers": {
              "x-amz-server-side-encryption": "AES256"
          }
      }
  ]
}

Sichtbare Wasserzeichen zum Testen

Zu Testzwecken, um zu überprüfen, ob forensische Wasserzeichen vorhanden sind, können Sie sichtbare forensische Wasserzeichen erzwingen, indem Sie hinzufügen "forensic_watermark_stub_mode":true zu Ausgängen, wie im Beispiel unten gezeigt:

{
  "outputs": [
      {
          "base_url": "s3://urlTest",
          "filename": "contextAwareEncoding1_A.m4f",
          "public": false,
          "format": "m4f",
          "label": "m4f-contextAwareEncoding1-A-b30e1",
          "generate_mp4_atom_map": true,
          "Mp4_atom_map_filename": "contextAwareEncod-A-atom_map.json",
          "skip_audio": true,
          "forensic_watermark": "A",
          "forensic_watermark_stub_mode":true,
          "dynamic_profile_rendition": 1,
          "skip": {
              "require_video": true
          },
          "fragment_duration": 2000,
          "segment_seconds": 2,
          "headers": {
              "x-amz-server-side-encryption": "AES256"
          }
      },
      {         
          "base_url": "s3://urlTest",
          "filename": "contextAwareEncoding1_B.m4f",
          "public": false,
          "format": "m4f",
          "label": "m4f-contextAwareEncoding1-B-e348",
          "generate_mp4_atom_map": true,
          "mp4_atom_map_filename": "contextAwareEncod-B-atom_map.json",
          "skip_audio": true,
          "forensic_watermark": "B",
          "forensic_watermark_stub_mode":true,
          "dynamic_profile_rendition": 1,
          "skip": {
              "require_video": true
          },
          "fragment_duration": 2000,
          "segment_seconds": 2,
          "headers": {
              "x-amz-server-side-encryption": "AES256"
          }
      }
  ]
}

Unterstützte Funktionen

  • HEVC
  • Mixed Codec-Wiedergabeleitern
  • 5.1 Audio
  • DRM
  • Wiedergabebeschränkungen
  • Neu-Transcodierung
  • Quelldatei ersetzen
  • CAE
  • Offline-Download
  • Chromecast
  • Luftspiel

Einschränkungen

  • Derzeit wird nur VOD unterstützt. Forensische Wasserzeichen für Livestreams werden nicht unterstützt.
  • Videos müssen mindestens fünf Minuten lang sein, damit forensische Wasserzeichen angebracht werden.
  • Verschlüsselte HLS-Videos (HLSe) werden derzeit nicht unterstützt.
  • SSAI wird bei Forensic Watermarking nicht unterstützt. Wenn SSAI in einem Asset mit forensischem Wasserzeichen verwendet wird, wird das forensische Wasserzeichen nicht geliefert.
  • Diese Funktion erfordert einen NAGRA-Lizenzschlüssel.
  • Die Spieler benötigen ein forensisches Wasserzeichen-JWT, das Sie mit einem von der NAGRA bereitgestellten Skript erstellen.
  • Lieferregeln kann nicht mit Playern verwendet werden, die zum Bereitstellen von Videos mit forensischen Wasserzeichen verwendet werden.
  • Sie müssen das CDN von Brightcove verwenden. BYO-CDN wird nicht unterstützt.
  • Brightcove übernimmt keine Erkennungsanalyse. Wenden Sie sich hierzu an die NAGRA.
  • Forensisches Wasserzeichen wird beim Schutz von Lizenzschlüsseln nicht unterstützt.