クライアントが M3U8 ファイルをリクエストすると、本機能はリクエストからの認証パラメーターを #EXT-X-KEY タグ内のキー URI に自動的に追加します。これにより、オリジンサーバーを変更することなく暗号鍵へのアクセスを保護し、不正な動画再生を防ぎます。
利用シーン
標準的な HTTP Live Streaming (HLS) 暗号化ワークフローでは、#EXT-X-KEY タグは復号鍵を取得するための URI を指定します。この URI が固定の公開アドレスである場合、M3U8 ファイルを取得した誰もがキーをダウンロードして動画コンテンツを復号できてしまい、暗号化が無意味になります。
この問題を解決するため、本機能は各キーリクエストに動的で検証可能な認証トークンを付与します。これは、次のような HLS 暗号鍵のアクセス制御を必要とするシナリオに最適です。
有料動画とオンライン教育:サブスクライバーが M3U8 アドレスを非有料ユーザーと共有するのを防ぐため、ログインした各ユーザーに一意の認証パラメーターを生成できます。これにより、認証されたユーザーのみが有効期間内に復号鍵を取得できるようになります。
ライブストリーミングの著作権保護:大規模なスポーツイベントやライブブロードキャストの場合、動的に生成された認証パラメーターと CDN の URL 認証機能を組み合わせることができます。これにより、ライブストリームに対する詳細なアクセス制御が可能になり、ホットリンクを効果的に防止します。
仕組み
クライアントがアプリケーションサーバーにリクエストを送信します。ビジネスロジック (ユーザーログインなど) に基づいて、アプリケーションサーバーは有効期間と署名を持つ認証パラメーター (例:
token=xxxx) を生成し、クライアントに返します。クライアントはこの認証パラメーターを M3U8 ファイルのリクエスト URL の末尾に追加し、リクエストを CDN の POP (Point of Presence) に送信します。
M3U8 ファイルを返す前に、CDN の POP はそのコンテンツを解析し、
#EXT-X-KEYタグを見つけ、クライアントのリクエスト URL からの認証パラメーターをタグのURI属性の末尾に追加します。クライアントは CDN から変更された M3U8 ファイルを受け取り、認証パラメーターが含まれるようになった新しいキー URI を使用してキーサーバーにリクエストを送信します。
キーサーバーはキーリクエストを受け取り、URL から認証パラメーターを抽出して検証します。検証が成功した場合、復号キーを返します。それ以外の場合は、リクエストを拒否します。
キーを取得した後、クライアントは TS 動画セグメントを復号し、再生を開始します。
本機能は動画コンテンツを暗号化するものではありません。本機能を使用する前に、オリジンサーバーで AES-128 などの HLS 暗号化を使用して動画セグメント (TS ファイル) を暗号化する必要があります。元の m3u8 ファイルには、正しい #EXT-X-KEY タグも含まれている必要があります。暗号化の詳細については、「FFmpeg を使用して AES-128 で暗号化された HLS プレイリスト (M3U8) を生成する方法」をご参照ください。
ビジネスサーバーとキーサーバーという用語は、M3U8 の暗号化と書き換えの役割を説明するために言及されています。本機能は、ビジネスサーバーまたはキーサーバーを実装するものではありません。HLS キー認証プロセスを完了するには、ビジネスサーバーとキーサーバーの機能をご自身で実装する必要があります。
#EXT-X-KEYタグは、コンテンツが暗号化されているかどうかを指定します。M3U8 ファイルのタグの詳細については、「M3U8 タグの概要」をご参照ください。
操作手順
Log on to the CDN コンソールにログインします。
左側のナビゲーションウィンドウで、ドメイン名 をクリックします。
ドメイン名 ページで、対象のドメイン名を見つけ、操作 列の 管理 をクリックします。
ドメインのナビゲーションウィンドウで、ビデオ関連 をクリックします。
M3U8 の暗号化と書き換え セクションで、M3U8 の暗号化と書き換え をオンにします。
説明M3U8 の暗号化と書き換え をオンにすると、デフォルトのパラメーター名は
MtsHlsUriTokenになります。オプション: クライアントに合わせてパラメーター名を変更するには、次の手順に従います。
カスタムパラメーター名 の横にある 変更 をクリックします。
カスタムパラメーター名 ダイアログボックスで、パラメーター名 を設定します。
説明パラメーター名では大文字と小文字が区別されます。設定したパラメーター名がクライアントリクエストに含まれるものと同一であることを確認してください。例えば、クライアントリクエストに
MtsHlsUriTokenパラメーターが含まれている場合、カスタムパラメーター名mtshlsuritokenは有効になりません。OK をクリックします。
例
ご利用のブラウザで CDN によって高速化された M3U8 ファイルにアクセスし、リクエスト URL の末尾に
MtsHlsUriToken=tokenxxxxxを追加します。例:http://<CDN 高速化ドメイン名>/video.m3u8?MtsHlsUriToken=tokenxxxxxご利用のブラウザの開発者ツールで、ネットワーク パネルには、M3U8 ファイルのリクエストにはカスタムパラメーターが含まれていますが、後続のキーリクエストには含まれていないことが示されます。

CDN コンソールで、M3U8 の暗号化と書き換え を有効にします。必要に応じてカスタムパラメーター名を設定します。この例では、次の図に示すように、デフォルトのパラメーター
MtsHlsUriTokenを使用します。
手順 1 を繰り返します。ブラウザで CDN で高速化された M3U8 ファイルにアクセスし、リクエストの末尾に MtsHlsUriToken=tokenxxxxx を追加します。
ブラウザの開発者ツールで、ネットワーク タブに移動します。キーアドレスのリクエストにカスタムパラメーターが含まれるようになります。

よくある質問
HLS プロトコルとは
HLS (HTTP Live Streaming) は、Apple が開発した HTTP ベースのアダプティブストリーミングプロトコルです。クライアントが標準の HTTP を介して一連の短い動画セグメントをダウンロードすることで、動画再生を可能にします。
このプロトコルは、主に 2 つのコンポーネントを使用して機能します。
メディアセグメント (.ts ファイル):動画ストリームは、通常はトランスポートストリーム (TS) 形式の小さなチャンクに分割されます。
プレイリストファイル (.m3u8 ファイル):プレイリストとして機能するプレーンテキストファイルです。利用可能なメディアセグメントと関連メタデータをリストします。再生が始まると、クライアントはまず M3U8 ファイルをダウンロードして、どのセグメントをどの順序でフェッチするかを把握します。
HLS M3U8 プレイリストの主要なタグとその機能
M3U8 ファイルは、タグを使用してストリームを構造化し、プレーヤーにメタデータを提供するテキストベースのプレイリストです。以下は、最も一般的なタグとその機能です。
#EXTM3U:M3U8 ファイルのヘッダーです。ファイルの最初の行でなければなりません。#EXT-X-MEDIA-SEQUENCE:最初の TS セグメントのシリアル番号です。値は通常 0 です。ライブストリーミングのシナリオでは、このシリアル番号はライブセグメントの開始位置を識別します。例:#EXT-X-MEDIA-SEQUENCE:0。#EXT-X-TARGETDURATION:各 TS セグメントの最大期間です。例えば、#EXT-X-TARGETDURATION:10は、各セグメントの最大期間が 10 秒であることを示します。#EXT-X-ALLOW-CACHE:クライアントがセグメントをキャッシュできるかどうかを示します。値は#EXT-X-ALLOW-CACHE:YESまたは#EXT-X-ALLOW-CACHE:NOです。デフォルト値は YES です。#EXT-X-ENDLIST:M3U8 ファイルの終了タグです。#EXTINF:期間や帯域幅など、TS セグメントに関する追加情報 (extra info) です。フォーマットは通常#EXTINF:<duration>,[<title>]です。カンマの前の値は現在の TS セグメントの期間です。セグメント期間は#EXT-X-TARGETDURATIONタグの値以下でなければなりません。#EXT-X-VERSION:M3U8 のバージョン番号です。#EXT-X-DISCONTINUITY:このタグは、前のセグメントと次のセグメントの間に中断があることを示します。#EXT-X-PLAYLIST-TYPE:ストリーミングメディアのタイプを示します。#EXT-X-KEY:復号が必要かどうかを示します。例:#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/video.key?token=xxx"。この例は、暗号化アルゴリズムが AES-128 であることを示しています。キーはhttps://example.com/video.key?token=xxxにリクエストを送信して取得します。キーが取得されると、ローカルに保存され、後続の TS 動画ファイルの復号に使用されます。
FFmpeg を使用して AES-128 で暗号化された HLS プレイリスト (M3U8) を生成する方法
OpenSSL を使用してキーを作成し、FFmpeg を使用して動画をセグメント化および暗号化することで、暗号化された HLS ストリームを生成できます。次の手順に従ってください。
暗号鍵を生成します。
AES-128 暗号化の場合、キーは通常 16 バイトのランダムな文字列です。次の OpenSSL コマンドを使用して、ランダムなキーファイルを生成します。
openssl rand 16 > encryption_key.key暗号化のために
key_info.txtファイルを準備します。暗号化ツールはこのファイルを使用して HLS 動画ファイルを暗号化します。https://example.com/encryption_key.key /path/to/local/encryption_key.key最初の行は、手順 1 で生成した暗号鍵の URL です。キーファイルを CDN で高速化された OSS バケットに配置します。次に、CDN 高速化ドメイン名を使用してファイルにアクセスします。
2 行目は、ローカルキーファイルの絶対パスです。
FFmpegツールを使用して、HLS 動画ファイルを生成および暗号化します。ffmpeg -i input_video.mp4 -c:v copy -c:a copy -hls_time 10 -hls_key_info_file key_info.txt -hls_list_size 0 output_playlist.m3u8-i input_video.mp4:MP4動画など、変換する動画ファイルを指定します。-c:v copy:動画ストリームを再エンコーディングせずにコピーします。-c:a copy:音声ストリームを再エンコーディングせずにコピーします。-hls_time 10:各TSファイルの期間を 10 秒に設定します。この設定は、ソース動画の期間に基づいて変更できます。-hls_key_info_file key_info.txt:暗号鍵情報を含むファイルを指定します。-hls_list_size 0:M3U8プレイリストに保持するTSファイルエントリの数を指定します。値0は、すべての.tsファイルエントリを保持します。output_playlist.m3u8:出力 HLS プレイリストファイル (M3U8ファイル) の名前です。
生成された
output_playlist.m3u8、すべての.tsセグメント、およびencryption_key.keyをご利用の Web サーバーまたは OSS オリジンにアップロードします。プレーヤーは、M3U8 の URL を使用して暗号化されたストリームにアクセスできます。