AVCaptionの暗号化動画ストリーミング
AVCaptionにアップロードされた動画はすべて、CDNエッジに到達する前に暗号化されます。再生時の復号はブラウザのWeb Crypto APIによりクライアント側で行われ、鍵はあなたのドメインに紐付く短命の署名付きURLで配信されます。
このページでは各ステップで実際に起きていることを順に説明します。
暗号化パイプライン
AVCaptionに動画をアップロードすると:
- GPUエンコード — ソースファイルをNVIDIA NVENCで HLSアダプティブビットレート のバリアント(360p、540p、720p、1080p、4K)にエンコードします。
- セグメント分割 — 各バリアントを通常6秒ごとのHLSセグメントに切り分けます。
- バッチ暗号化 — セグメントを10個のバッチ(60秒の再生)にまとめます。各バッチには新しく生成された AES-128鍵 が割り当てられます。
- CDNアップロード — 暗号化済みセグメントはCloudflare R2にアップロードされ、グローバルCF CDN経由で強力なキャッシュとともに配信されます。
- キーボールト — 暗号鍵は別場所に保管され、CDNにもセグメントとも一緒に置かれません。
視聴者がplayを押すと:
- トークン要求 — プレーヤーが
/api/stream/{embed_token}/tokenから再生トークンを要求します。サーバーはembedトークン、要求元ドメイン(ホワイトリスト照合)、レート制限を検証します。 - マスタープレイリスト — プレーヤーがHLSマスター
.m3u8を取得し、帯域に基づいてバリアントを選択します。 - バッチごとの鍵取得 — プレーヤーは必要な各セグメントバッチの鍵を
/api/stream/{embed_token}/key/{batch}から要求します。各鍵URLは再生トークンで署名され、そのセッションでのみ有効です。 - クライアント側復号 — ブラウザのWeb Crypto APIがセグメントをメモリ内で復号し、video要素に渡します。鍵はディスクに保存されません。
マルチキーが重要な理由
シングルキー暗号化(多くのプラットフォームが採用するシンプルな方式)では、動画1本=鍵1本=URL1本です。そのURLが漏れれば、動画全体が永久に復号可能になります。
バッチごとのマルチキー暗号化では、動画1本=多数の鍵=多数の短命URLです。1つのURLが漏れても露出するのはそのバッチ(約60秒の映像)だけ。次のバッチは新しい鍵要求が必要で、流出者は新鮮な再生トークンなしには要求できません。
これは海賊行為のコストを大きく押し上げます。シングルキープラットフォームに通用する自動rip ツール(yt-dlp派生、ブラウザ拡張のダウンローダー)は、マルチキーターゲットごとに作り直す必要があり、ほとんどの場合誰もそこまでやりません。
署名付き再生トークン
各embedトークンにはメタデータが含まれます:
- 許可オリジン(あなたのドメインホワイトリスト)
- 任意の視聴者識別子(Enterpriseの動的ウォーターマークに使用)
- 有効期限(既定24時間)
- レート制限ヒント
署名鍵はサーバー側のみに存在します。偽造トークンは要求時の検証で弾かれます。
ゲーテッドコンテンツ(メンバー専用、コースアクセス)を提供する場合、アプリケーションは認証セッションごとに新しいembedトークンを生成し、セッションが切れるとトークンも失効します。AVCaptionのREST APIはEnterprise顧客向けにembedトークン生成を公開しています。
ドメインホワイトリスト
既定では、すべてのembed iframeはホットリンク前提です — ブラウザが埋め込みオリジン付きで Referer ヘッダーを送り、AVCaptionのstream APIがそのオリジンをホワイトリストと照合してからマスタープレイリストを発行します。
PremiumとEnterpriseでは、許可ドメインを正確に指定できます。ホワイトリスト外のドメインでiframeを埋め込んだ者は即座に403を受けます。
ここで多くの海賊行為が止まります: iframe URLを盗んで別サイトに埋め込むスクレーパーは、単に403を受け取り、プレーヤーは決して読み込まれません。
他プラットフォームとの比較
- シングルキーAES-128(Bunny、CF Stream): 動画1本に鍵1本。一般的なホットリンクには強いが、トークン+鍵のペアが取られると弱い。
- マルチキーAES-128(AVCaption): バッチごとに鍵をローテーション。設計上より強く、自動海賊行為のコストを上げる。
- Widevine/PlayReady DRM(VdoCipher、JW Player Enterprise): ハードウェア紐付きライセンスサーバーとContent Decryption Module。最強だが高価で、スタジオライセンスのコンテンツでのみ必要。完全な比較は DRM vs 暗号化 を参照してください。
コース、ゲーテッドチュートリアル、有料メンバーシップコンテンツ、B2B研修、社内動画には、マルチキーAES-128が適切なバランスです。DRMは過剰、シングルキーは薄すぎます。
はじめる
暗号化セグメントの動きを実際に見たい場合は、テスト動画をアップロードしてください——最初の60秒で十分。DevToolsを開き、.m3u8と.m4sのリクエストが飛ぶ様子を確認し、埋め込みURLに対してyt-dlpを試してみてください——セグメントは暗号化された状態で落ちてきて、バッチごとにローテーションされる鍵なしには再生できません。フリープランでもどの動画にもフルのマルチキースタックが乗ります。暗号化はデフォルト有効で、トグルは不要です。