入門
ブライトコーブはナグラ VideoCloudプラットフォームの機能としてフォレンジック透かしを提供します。これにより、著作権侵害や不正なコンテンツ共有からプレミアムコンテンツを保護できます。この機能は、コンテンツリークの原因をすばやく特定するのにも役立ち、アクションを実行できます。
セットアップ
Brightcoveのフォレンジック透かしソリューションをサポートするには、次の設定が必要です。
- 
        アカウントマネージャーに連絡してください:
        
- アカウントで動的配信が有効になっていることを確認してください。
 - アカウントでフォレンジック透かしを有効にします。これは、VideoCloudへの有料アドオンです。
 
 - からライセンスキーを取得しますナグラ。
 - Forensic Watermarking JWTによって使用され、CDNによって復号化される公開鍵と秘密鍵のペアを生成します。 (下記参照)
 - NAGRAが提供するスクリプトを使用して、フォレンジック透かし用のJSON Webトークン(JWT)を生成します。フォレンジック透かしトークンと各ビューアのリンク方法を必ず管理してください。あなたがするときにそれが必要になりますプレーヤーを構成するまた、検出サービスを実行して、どのビューアがコンテンツを不正にリークしたかを知る場合。
 
公開鍵と秘密鍵のペアを生成する方法は多数あります。以下にいくつかの例を挙げます。
bashスクリプトの例:
キーペアを生成するスクリプト例:
#!/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"
    スクリプトを実行します。
$ bash keygen.sh
    使用例行け
を使用した例行けキーペアを生成するためのプログラミング言語:
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)
  }
  
    node.js の使用例
node.js を使用してキーペアを生成する例:
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");
    実装
フォレンジック透かしは、Video Cloud Studioを使用して実装することも、BrightcoveAPIを使用して手動で実装することもできます。これらの方法については、次のセクションで詳しく説明します。
Video Cloud Studio
Video Cloud Studioでフォレンジック透かしを使用するには、次の手順に従います。
- 
        
フォレンジック透かしは、特定の取り込みプロファイルにリンクされていません。動的配信またはコンテキストアウェアエンコーディングプロファイルを使用できます。
- BrightcoveにNAGRAライセンスキーを提供します。このライセンスキーは、透かしを生成するためのトランスコーディング中に使用されます。
 - の中にアップロードモジュールで、取り込みプロファイルを選択します。
 - 
            
を確認してくださいフォレンジックウォーターマークを有効にするオプション。
              透かしオプションを有効にする  - 
          タグを追加します
watermarkedこれにより、フォレンジック透かしを使用してビデオを識別しやすくなります。それらに関する分析レポートを生成します:
            タグ付けする  - 
            
ビデオをドラッグまたは参照して、取り込みを開始します。
 
 - 
        
プレーヤーを構成します。
ここで、NAGRA透かしトークンとビューアIDをプレーヤーに渡します。BrightcoveWebプレーヤーまたはネイティブSDKプレーヤーのいずれかを使用できます。
 - フォレンジック透かし用に取り込まれたコンテンツを再生します。
 
分析レポート
フォレンジック透かし入りビデオの視聴者に関する分析レポートは、 Analytics APIそれだけ。レポートは、JSON、CSV、またはXLXS形式で返すことができます
分析データ:
1トランザクション= 24時間で動画ごとに1人のユニークな視聴者
    
    例1:日付別の動画の視聴者
この例では、video、viewerとdateディメンションを作成し、レポートをCSV形式で取得します。
リクエストの例
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
    応答
"date","video","viewer","video_view"
"2021-06-25","70702952720202","3f46037f932b0c5a","1"
"2021-06-24","70702952720202","3f46037f932b0c5a","2"
注意してくださいviewer Brightcoveプレーヤーによって生成され、ユーザーエージェントとIPに基づいて一意の文字列に設定されます。理想的には、サインインIDに基づいてビューア識別子を自分で設定する必要があります-を参照してくださいこのトピックその方法については。識別子は、JavaScriptを介して取得できる情報に基づいています。
例2:視聴者数
この例では、フォレンジック透かしを使用したすべての動画にタグが付いていると想定しますwatermarked。再度クエリを実行しますvideo、viewerとdateここで関心のある要約であるため、ディメンションを1つだけ返します。
リクエストの例
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
    応答
{
  "item_count": 7,
  "items": [
    {
      "date": "2021-06-25",
      "viewer": "07B1489C-5786-400E-945B-ABB3559B3897",
      "video_view": 1
    }
  ],
  "summary": {
    "video_view": 25
  }
}
  API
フォレンジック透かしに関連するAPIとフィールドは次のとおりです。
Dynamic Ingest API
アカウントでフォレンジックウォーターマークが有効になったら、フォレンジックウォーターマークを追加して動画に追加できます。forensic_watermarkingフィールドを取り込み要求に設定し、に設定しますtrue。これは、ビデオの元の取り込み、置換、または再トランスコーディングに対して実行できます。
リクエスト本文の例
{
  "master": {
          "url": "http://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
}
    もありますforensic_watermarking_stub_modeに設定されている場合、フラグtrue目に見えるフォレンジック透かしを生成します。
      forensic_watermarkingまた、に設定する必要がありますNS目に見える透かしを有効にします。
ビデオに表示される透かしを使用して統合をテストします(少なくとも10分の長さのビデオでテストする必要があります)。フォレンジック透かしが存在することを確認したら、それらを削除して、フォレンジック透かしが非表示になるようにします。これを行うには、ビデオを再トランスコードするために別の動的取り込みリクエストを送信する必要があります。今回は設定します。forensic_watermarking_stub_modeにfalse。
目に見えるフォレンジック透かしのサンプルリクエスト本文
{
  "master": {
          "url": "http://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
}
    目に見えるフォレンジック透かしを削除するためのサンプルリクエスト本文
{
    "profile": "multi-platform-standard-static-with-mp4",
    "forensic_watermarking": true,
    "forensic_watermarking_stub_mode": false,
    "capture-images": true
}
    
    CMS API
デフォルトでは、取り込み中にフォレンジックウォーターマークが要求された場合、フォレンジックウォーターマークレンディションが配信されます。フォレンジック透かしの存在は、読み取り専用フィールドによって示されますforensic_watermarking。フィールドの値がACTIVE、フォレンジック透かしがVODに追加されました。フィールドの値がUNAVAILABLEまたnull、VODにはフォレンジック透かしがありません。
Playback API
Playback APIGETビデオ応答には、forensic_watermarking(アカウントでフォレンジック透かしが有効になっている場合)。値がACTIVE、フォレンジックウォーターマーク付きのレンディションがソースとしてプレーヤーに配信されます。それ以外の場合は、透かしのないレンディションが配信されます。
Zencoder
Zencoderでフォレンジック透かしを使用して出力を生成するには、ビデオごとに2つの出力を指定する必要があります。 "forensic_watermark":"NS"と他の"forensic_watermark":"NS"(これらは2つの値だけですforensic_watermarkフィールドを持つことができます)。
サンプルリクエスト(出力のみ)
{
  "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"
          }
      }
  ]
}
    テスト用の目に見える透かし
テストの目的で、フォレンジックウォーターマークが存在することを確認するために、追加することで、目に見えるフォレンジックウォーターマークを強制することができます。"forensic_watermark_stub_mode":true以下のサンプルに示すように出力します。
{
  "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"
          }
      }
  ]
}
  サポートされている機能
- DRM
 - Playback Restrictions
 - 再トランスコーディング
 - ソースファイルの置き換え
 - カエ
 - オフラインダウンロード
 - Chromecast
 - Airplay
 
制約事項
- 現時点ではVODのみがサポートされています。ライブストリームのフォレンジック透かしはサポートされていません。
 - フォレンジック透かしを適用するには、動画の長さが5分以上である必要があります。
 - HLSv7はサポートされていません。HLSv7は、HEVC、混合コーデック、および5.1オーディオの配信に使用されます。したがって、HEVC、混合コーデックビデオ、および5.1オーディオは現在サポートされていません。
 - 暗号化されたHLSビデオ(HLSe)は現在サポートされていません。
 - この機能には、NAGRAライセンスキーが必要です。
 - プレーヤーには、NAGRAが提供するスクリプトを使用して作成するフォレンジック透かしJWTが必要です。
 - 配達規則フォレンジック透かしを使用してビデオを配信するために使用されるプレーヤーでは使用できません。
 - BrightcoveのCDNを使用する必要があります。BYOCDNはサポートされていません。
 - Brightcoveは検出分析を処理しません。これについては、NAGRAにお問い合わせください。