HTTP Live Streaming (HLS) 暗号化は、AES-128 アルゴリズムを使用します。この方法はすべての HLS プレーヤーと互換性があり、キー管理とトークンサービスを使用してアクセス制御を行います。HLS 暗号化は、オンライン教育や限定コンテンツのストリーミングなど、高いセキュリティ要件が求められるシナリオで広く使用されています。このトピックでは、HLS 暗号化を使用して動画を暗号化し、再生のために復号する方法について説明します。
仕組み
ApsaraVideo VOD はエンベロープ暗号化を使用します。ご利用のサービスは Alibaba Cloud Key Management Service (KMS) を使用して、データキー (DK) とエンベロープデータキー (EDK) を生成します。DK を使用して動画を暗号化した後、暗号化された動画と EDK が保存されます。再生中、復号サービスは DK を取得して動画を復号します。
復号アドレスでセキュリティ認証を実行するために、M3U8 暗号化と書き換えを有効にして、HLS データアクセスプロセスに保護レイヤーを追加できます。デフォルトの書き換えパラメーターは MtsHlsUriToken です。M3U8 暗号化と書き換えを有効にする方法とその仕組みの詳細については、「M3U8 暗号化と書き換えの設定」をご参照ください。
前提条件
Alibaba Cloud 動画暗号化 (HLS 暗号化) は無料のサービスです。ただし、この機能を使用するには動画のトランスコーディングが必要です。トランスコーディング操作にはサービス料金が発生します。課金の詳細については、「メディアトランスコーディングの課金」をご参照ください。
ApsaraVideo VOD が有効化されていること。詳細については、「ApsaraVideo VOD の有効化」をご参照ください。
ApsaraVideo VOD に KMS へのアクセスに必要な権限が付与されていること。権限はクラウドリソースアクセス権限付与ページで付与できます。
ApsaraVideo VOD で高速化ドメイン名が設定されていること。詳細については、「高速化ドメイン名の追加」をご参照ください。
ApsaraVideo VOD のサーバーサイド SDK がインストールされていること。詳細については、「サーバーサイド SDK」をご参照ください。このトピックでは、Java 用 SDK を例として使用します。
暗号化と復号のプロセス
アップロードと暗号化のプロセス

復号と再生のプロセス
M3U8 暗号化と書き換えが有効 (推奨)

M3U8 暗号化と書き換えが無効

動画の暗号化
動画をアップロードしてコールバックを受信する。
HLS で暗号化されたビデオの自動トランスコードを防ぐには、ApsaraVideo VOD へのアップロード時に、組み込みのトランスコードなし テンプレートグループを使用してください。
ApsaraVideo VOD コンソールを使用するか、API 操作を呼び出して動画をアップロードします。詳細については、「ApsaraVideo VOD コンソールを使用したメディアファイルのアップロード」および「メディアアップロード」をご参照ください。
ApsaraVideo VOD のイベント通知を設定します。動画アップロード完了 のコールバックメッセージを受信すると、動画は ApsaraVideo VOD にアップロードされます。イベント通知の設定方法の詳細については、「イベント通知」をご参照ください。
暗号化サービスをセットアップする。
サービスキーを作成する。
サービスキーは KMS のプライマリ暗号化キーであり、標準暗号化キーを生成するために必要です。サービスキーを作成しない場合、GenerateDataKey 操作を呼び出してキーを生成する際にエラーが報告されます。
ページの左上隅にあるリージョン ID をクリックして、サービスキーを作成するリージョンに切り替えます。
説明サービスキーは、動画が保存されているオリジンサーバーと同じリージョンにある必要があります。たとえば、動画が中国 (上海) に保存されている場合、サービスキーも中国 (上海) で作成する必要があります。

ApsaraVideo VOD コンソールにログインします。左側のナビゲーションウィンドウで、設定の管理 > ApsaraVideo Media Processing の設定 > 標準暗号化 を選択します。
[標準暗号化] ページで、[サービスキーの作成] をクリックします。
サービスキーが作成されると、メッセージが表示されます。[キー情報] セクションでサービスキーを表示できます。
説明サービスキーが作成されたことを示すメッセージが表示されてもサービスキーを表示できない場合は、サービスリンクロールが欠落している可能性があります。権限を再付与してロールを復元し、ページをリフレッシュしてサービスキーを表示できます。
API 操作を呼び出してデータキーを生成する。
GenerateDataKey 操作を呼び出して、DK と EDK を生成します。この操作にパラメーターを渡す必要はありません。呼び出しが成功すると、応答の `CiphertextBlob` は AES-128 形式の EDK になります。標準の暗号化とトランスコーディングのためにこの値をキャッシュする必要があります。応答の `Plaintext` は DK です。
HLS 暗号化用のトランスコーディングテンプレートグループを作成する。
HLS 暗号化プロセスには、組み込みの [トランスコードなし] テンプレートグループとカスタム HLS 暗号化トランスコーディングテンプレートグループの 2 つのトランスコーディングテンプレートグループが必要です。以下の手順では、カスタムグループの作成方法について説明します。
ApsaraVideo VOD コンソールにログインします。左側のナビゲーションウィンドウで、設定の管理 > ApsaraVideo Media Processing の設定 > トランスコードテンプレートグループ を選択します。
[トランスコーディングテンプレートグループ] ページで、HLS 暗号化用のテンプレートグループを作成します。
[カプセル化形式]を hls に設定します。[高度なパラメーター]セクションで、[ビデオの暗号化]を有効にして、[Alibaba Cloud Encryption]を選択します。他のパラメーターは必要に応じて設定できます。詳細については、「トランスコードテンプレート」をご参照ください。

テンプレートが作成された後、[トランスコーディングテンプレートグループ] ページでトランスコーディングテンプレートグループの ID を表示できます。この ID は、後で HLS 暗号化とトランスコーディングを開始するときに必要になるため、保存してください。

HLS 暗号化とトランスコーディングを開始する。
SubmitTranscodeJobs 操作を呼び出して、HLS 暗号化とトランスコーディングを開始します。
ApsaraVideo VOD のイベント通知を設定している場合、単一解像度動画のトランスコーディング完了 または 全解像度動画のトランスコーディング完了 のコールバックメッセージを受信すると、動画のトランスコーディングは完了です。
HLS 暗号化の結果を表示する。
トランスコーディングが完了した後、以下の 3 つの方法で標準暗号化が成功したかどうかを判断できます。
方法 1: ApsaraVideo VOD コンソールにログインし、メディアファイル > [オーディオ/ビデオ] > 管理 > ビデオ URL を選択します。[ビデオ URL] ページで、ビデオにオリジナルの MP4 ファイルなどの複数のフォーマットの出力がある場合は、m3u8 ビデオストリームに 標準暗号化 というラベルが付いているかどうかを確認します。ラベルが表示されている場合、HLS 暗号化は成功です。

方法 2: 標準暗号化 を使用する M3U8 ファイルの URL をコピーし、
curl -v "M3U8 ファイルの URL"コマンドを実行して M3U8 コンテンツを確認します。 コンテンツにキーURI="<標準暗号化のために渡す復号 URI で、DecryptKeyUri パラメーターの値です>"が含まれている場合、ビデオは HLS 暗号化によって保護されています。方法 3:GetTranscodeTask 操作を呼び出します。ステップ 4 で返された JobId パラメーターの値を渡します。返された TranscodeTemplateId パラメーターが ステップ 3 で作成したトランスコーディングテンプレートグループの ID であり、TranscodeJobStatus パラメーターが TranscodeSuccess である場合、HLS 暗号化は成功です。
HLS (M3U8) 暗号化と書き換え (推奨)
M3U8 暗号化と書き換え機能を有効にすると、システムは自動的に暗号化アルゴリズム、キー URI、認証パラメーターなどの暗号化パラメーターを HLS プロトコルのメディアプレイリスト (M3U8 ファイル) の #EXT-X-KEY タグに追加します。クライアントが書き換えられた M3U8 ファイルを解析すると、認証パラメーター付きのキー URI を使用して復号鍵をリクエストします。その後、クライアントはそのキーと指定されたアルゴリズムを使用して TS シャードを復号します。このプロセスにより、HLS ストリーミングメディアに暗号化されたアクセス保護が提供されます。
ステップ 1: 標準暗号化パラメーターのパススルーを有効にする
ApsaraVideo VOD コンソールで、HLS 標準暗号化パラメータのパススルー を有効にします。
HLS 暗号化のHLS 標準暗号化パラメータのパススルーを有効にすると、HLS 用の M3U8 ファイルを変更できます。この機能は、クライアントリクエストからのパラメーターを追加することにより、#EXT-X-KEY タグ内の URI を変更します。デフォルトのパラメーター名は MtsHlsUriToken です。
前提条件
オリジン間リソース共有 (CORS) が設定されていること。詳細については、「オリジン間リソース共有の設定」をご参照ください。
この機能は現在 Alibaba Gov Cloud ではサポートされていません。
手順
ApsaraVideo VOD コンソールにログインします。
左側のナビゲーションウィンドウで、設定の管理 をクリックします。
[配信の高速化設定] > [ドメイン名] をクリックして、[ドメイン名] ページに移動します。
対象のドメイン名を見つけ、操作 列の [設定] をクリックします。
ドメイン名のページの左側にあるナビゲーションウィンドウで、動画関連 をクリックします。
暗号化再生セクションで、HLS 標準暗号化パラメータのパススルー スイッチをオンにします。

この機能を有効にすると、HLS 暗号化パラメーターがパススルーされる際に、システムはトークン認証パラメーターを書き換えることでリクエストを認証します。書き換えられたパラメーター名は
MtsHlsUriTokenで、その値はtestです。Alibaba Cloud CDN が再生のために動画を復号する際、M3U8 ファイルの#EXT-X-KEYタグの URI の末尾にMtsHlsUriToken=testが追加されます。
ステップ 2: MtsHlsUriToken パラメーターを含むリクエストを送信する
クライアントは、MtsHlsUriToken パラメーターを含むリクエストを CDN の POP (Point of Presence) に送信して、M3U8 ファイルにアクセスします。
MtsHlsUriToken を取得するには、ユーザートークンを発行するためのトークンサービスを構築する必要があります。このサービスが MtsHlsUriToken を生成します。
以下のコードで生成されるトークンが MtsHlsUriToken です。サンプルコードの以下のパラメーターは、要件に応じて変更する必要があります。
ステップ 3: ファイルを復号して再生する
CDN の POP がクライアントからリクエストを受信した後、認証が成功すると動画を復号して再生します。
ステップ 2 で生成された MtsHlsUriToken パラメーターの値が test の場合、CDN が再生のために動画を復号する際に、M3U8 ファイルの #EXT-X-KEY タグの URI の末尾に MtsHlsUriToken=test が追加されます。
認証ロジックはご自身で実装する必要があります。詳細については、「動画の再生」の M3U8 暗号化と書き換えが有効な場合の復号サービスのサンプルコードをご参照ください。
動画の再生
M3U8 暗号化と書き換えが有効 (推奨)
復号サービスをセットアップする。
動画を復号するためにローカル HTTP サービスをセットアップします。
Decrypt 操作を呼び出してキーを復号します。応答の
PlainTextはデータキー (DK) です。この DK は、GenerateDataKey 操作によって返されるPlainTextの Base64 デコード済みデータです。復号アドレスでセキュリティ認証を実行するために、M3U8 暗号化と書き換えを有効にできます。これにより、HLS データアクセスプロセスに保護レイヤーが追加されます。デフォルトの書き換えパラメーターは
MtsHlsUriTokenです。復号サービスをセットアップするコードは、M3U8 暗号化と書き換えを有効にするかどうかによって異なります。動画の再生 URL と認証情報を取得する。
GetVideoPlayAuth 操作を呼び出して再生認証情報を取得するか、GetPlayInfo 操作を呼び出して再生 URL を取得します。
暗号化された動画を再生する。
HLS 暗号化はすべての HLS プレーヤーと互換性があります。自社開発のプレーヤーまたは ApsaraVideo Player を使用して、暗号化された動画を再生できます。
ApsaraVideo Player を使用する場合、再生前に ApsaraVideo Player が要求するトークンと認証情報を取得する必要があります。詳細については、「暗号化された動画の再生」をご参照ください。ApsaraVideo Player 以外のプレーヤーを使用する場合は、再生ロジックを実装する必要があります。
以下のセクションでは、テスト再生に ApsaraVideo Player を使用する際の内部プロセスについて説明します。
M3U8 暗号化と書き換えが有効 (推奨)
M3U8 暗号化と書き換えが無効
復号サービスをセットアップする。
動画を復号するためにローカル HTTP サービスをセットアップします。
Decrypt 操作を呼び出してキーを復号します。応答の
PlainTextはデータキー (DK) です。この DK は、GenerateDataKey 操作によって返されるPlainTextの Base64 デコード済みデータです。以下に例を示します。
動画の再生 URL と認証情報を取得する。
GetVideoPlayAuth 操作を呼び出して再生認証情報を取得するか、GetPlayInfo 操作を呼び出して再生 URL を取得します。
暗号化された動画を再生する。
HLS 暗号化はすべての HLS プレーヤーと互換性があります。自社開発のプレーヤーまたは ApsaraVideo Player を使用して、暗号化された動画を再生できます。
ApsaraVideo Player を使用する場合、再生前に ApsaraVideo Player が要求するトークンと認証情報を取得する必要があります。詳細については、「暗号化された動画の再生」をご参照ください。ApsaraVideo Player 以外のプレーヤーを使用する場合は、再生ロジックを実装する必要があります。
以下のセクションでは、テスト再生に ApsaraVideo Player を使用する際の内部プロセスについて説明します。
M3U8 暗号化と書き換えが無効