サポート問い合わせ先| システムステータス
ページコンテンツ

    概要:フォレンジック透かし

    「このトピックでは、Brightcoveのフォレンジック透かし機能の概要を説明します。」

    入門

    ブライトコーブはナグラ VideoCloudプラットフォームの機能としてフォレンジック透かしを提供します。これにより、著作権侵害や不正なコンテンツ共有からプレミアムコンテンツを保護できます。この機能は、コンテンツリークの原因をすばやく特定するのにも役立ち、アクションを実行できます。

    セットアップ

    Brightcoveのフォレンジック透かしソリューションをサポートするには、次の設定が必要です。

    1. アカウントマネージャーに連絡してください:
      1. アカウントで動的配信が有効になっていることを確認してください。
      2. アカウントでフォレンジック透かしを有効にします。これは、VideoCloudへの有料アドオンです。
    2. からライセンスキーを取得しますナグラ
    3. Forensic Watermarking JWTによって使用され、CDNによって復号化される公開鍵と秘密鍵のペアを生成します。 (下記参照)
    4. 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でフォレンジック透かしを使用するには、次の手順に従います。

    1. フォレンジック透かしは、特定の取り込みプロファイルにリンクされていません。動的配信またはコンテキストアウェアエンコーディングプロファイルを使用できます。

      1. BrightcoveにNAGRAライセンスキーを提供します。このライセンスキーは、透かしを生成するためのトランスコーディング中に使用されます。
      2. の中にアップロードモジュールで、取り込みプロファイルを選択します。
      3. を確認してくださいフォレンジックウォーターマークを有効にするオプション。

        Enable watermarking option
        透かしオプションを有効にする
      4. タグを追加しますwatermarkedこれにより、フォレンジック透かしを使用してビデオを識別しやすくなります。それらに関する分析レポートを生成します
        Add Tag
        タグ付けする
      5. ビデオをドラッグまたは参照して、取り込みを開始します。

    2. プレーヤーを構成します。

      ここで、NAGRA透かしトークンとビューアIDをプレーヤーに渡します。BrightcoveWebプレーヤーまたはネイティブSDKプレーヤーのいずれかを使用できます。

    3. フォレンジック透かし用に取り込まれたコンテンツを再生します。

    分析レポート

    フォレンジック透かし入りビデオの視聴者に関する分析レポートは、 Analytics APIそれだけ。レポートは、JSON、CSV、またはXLXS形式で返すことができます

    分析データ:

    1トランザクション= 24時間で動画ごとに1人のユニークな視聴者

    例1:日付別の動画の視聴者

    この例では、videoviewerdateディメンションを作成し、レポートを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。再度クエリを実行しますvideoviewerdateここで関心のある要約であるため、ディメンションを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目に見えるフォレンジック透かしを生成します。

    Visible Forensic Watermarks
    目に見えるフォレンジック透かし

    forensic_watermarkingまた、に設定する必要がありますNS目に見える透かしを有効にします。

    ビデオに表示される透かしを使用して統合をテストします(少なくとも10分の長さのビデオでテストする必要があります)。フォレンジック透かしが存在することを確認したら、それらを削除して、フォレンジック透かしが非表示になるようにします。これを行うには、ビデオを再トランスコードするために別の動的取り込みリクエストを送信する必要があります。今回は設定します。forensic_watermarking_stub_modefalse

    目に見えるフォレンジック透かしのサンプルリクエスト本文

    {
      "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にお問い合わせください。

    ページの最終更新日22 Sep 2021