HLS 暗号化は、AES-128 を使用して動画を暗号化します。 このメソッドは、すべての HLS 互換プレーヤーで動作し、アクセス制御のためにキー管理とトークンサービスが必要です。 HLS 暗号化は、オンライン教育プラットフォームや限定コンテンツストリーミングなどのセキュリティ要求の高い分野で一般的に使用されます。 このトピックでは、動画配信の HLS 暗号化と動画再生の復号化を実装する方法について説明します。
動作原理
ApsaraVideo VOD はエンベロープ暗号化技術を採用しています。この技術では、サービスプロバイダーは Alibaba Cloud Key Management Service(KMS)を介してデータキー(DK)とエンベロープデータキー(EDK)を生成します。 DK は動画コンテンツを暗号化し、EDK は暗号化された動画と一緒に保存されます。 再生中、復号化サービスは DK を取得して動画を復号化します。
復号化 URL を検証する場合は、M3U8 暗号化と書き換えを有効にできます(デフォルトでは、MtsHlsUriToken が書き換えられます)。 これにより、HLS データアクセスに暗号化の層が追加されます。
前提条件
Alibaba Cloud アカウントに残高が十分にあること。 HLS 暗号化は無料のサービスですが、暗号化には動画のトランスコードが必要なため、トランスコード操作にはサービス料金が発生します。 料金の詳細については、「メディアトランスコーディング」をご参照ください。
ApsaraVideo VOD がアクティブ化されていること。 詳細については、「ApsaraVideo VOD のアクティブ化」をご参照ください。
ApsaraVideo VOD には KMS にアクセスする権限が付与されています。 クラウド リソースアクセス承認 ページで、ApsaraVideo VOD に KMS へのアクセスを承認できます。
高速化ドメインが ApsaraVideo VOD に追加されていること。 詳細については、「CDN 用のドメイン名を追加する」をご参照ください。
ApsaraVideo VOD SDK が統合されています。このトピックでは、例として Java 用 ApsaraVideo VOD SDK を使用します。
暗号化と復号のプロセス
アップロードと暗号化

復号と再生
(推奨) M3U8 暗号化と書き換えが有効になっている場合

M3U8 暗号化と書き換えが無効になっている場合

動画を暗号化する
動画をアップロードして、コールバックを受信します。
HLS 暗号化をサポートする動画が自動的にトランスコードされないようにするには、ApsaraVideo VOD にアップロードするときに、システム組み込みの [トランスコードなし] テンプレートグループを使用する必要があります。 これにより、アップロードプロセス中に自動トランスコードがトリガーされるのを防ぎます。
ApsaraVideo VOD コンソール または API を使用して動画をアップロードします。
イベント通知 を設定します。 FileUploadComplete コールバックメッセージを受信すると、動画が ApsaraVideo VOD に正常にアップロードされたことを意味します。
キー管理サービスを設定します。
サービスキーを作成します。
サービスキーは KMS の主要な暗号化キーであり、HLS 暗号化キーの生成に使用される必要があります。 サービスキーを作成しないと、GenerateKMSDataKey 操作を呼び出すときにエラーが発生します。
詳細については、「App Service へのコードのデプロイ」をご参照ください。
説明サービスキーは、動画が保存されているオリジンサーバーと同じリージョンで作成する必要があります。たとえば、動画が中国 (上海) に保存されている場合、サービスキーも中国 (上海) で作成する必要があります。

ApsaraVideo VOD コンソール にログインします。 左側のナビゲーションウィンドウで、[構成管理] > [メディア処理] > [HLS 暗号化] を選択します。
手順 2[HLS 暗号化] ページで、 をクリックします。サービスキーが作成されると、システムは というメッセージを表示します。 セクションでサービスキーを表示できます。
サービスキーが作成されると、システムによって [サービスキーが作成されました。] と表示されます。 [キー情報] セクションでサービスキーを表示できます。
説明サービスキーが正常に作成されたという通知を受け取ったにもかかわらず、キーが表示されない場合は、サービスロールが不足していることが原因である可能性があります。再認証を実行してロールを復元し、ページを更新してサービスキーを表示します。
DK を生成します。
DK と EDK を生成するには、入力パラメーターなしで GenerateKMSDataKey 操作を呼び出します。 成功すると、レスポンスの CiphertextBlob は HLS 暗号化とトランスコード用にキャッシュする必要がある AES_128 形式の EDK を提供し、レスポンスの Plaintext には DK が含まれます。
HLS 暗号化用のトランスコーディングテンプレートグループを作成します。
HLS 暗号化プロセス中に、組み込みの [トランスコードなし] テンプレートグループとカスタムトランスコーディングテンプレートグループの 2 つのトランスコーディングテンプレートグループが必要です。 HLS 暗号化用のカスタムトランスコーディングテンプレートグループを作成する方法は次のとおりです。
ApsaraVideo VOD コンソール にログインします。 左側のナビゲーションウィンドウで、[構成管理] > [メディア処理] > [トランスコーディングテンプレートグループ] を選択します。
ページで、 をクリックします。 [基本パラメーター] セクションで、 を に設定します。 セクションで、 をオンにし、 を [Alibaba Cloud 独自の暗号化]WordPress の基本的な に設定します。 その他のパラメーターについては、実際のニーズに基づいて設定します。 パラメーターの説明については、「」をご参照ください。
[基本パラメーター] セクションで、[カプセル化フォーマット] を hls に設定します。[詳細パラメーター] セクションで、[ビデオの暗号化] をオンにし、[暗号化方式] を Alibaba Cloud 独自暗号化 に設定します。その他のパラメーターについては、実際のニーズに基づいて設定してください。パラメーターの説明については、「トランスコーディング テンプレート」をご参照ください。
WordPressトランスコーディングテンプレートグループを作成した後、 ページでその ID を見つけます。 この ID は後で HLS 暗号化とトランスコードに必要になるため、保存してください。

HLS 暗号化とトランスコードのリクエストを開始します。
SubmitTranscodeJobs 操作を呼び出して、HLS 暗号化とトランスコードを開始します。
ApsaraVideo VOD でイベント通知を設定している場合、StreamTranscodeComplete または TranscodeComplete コールバックのいずれかを受信すると、動画のトランスコードが完了します。
HLS 暗号化の結果を表示します。
トランスコードが完了した後、次の方法を使用して HLS 暗号化が成功したかどうかを判断できます。
方法 1: ApsaraVideo VOD コンソール にログオンします。左側のナビゲーションウィンドウで、[メディアファイル] > [オーディオ/ビデオ] を選択します。 [ビデオとオーディオ] ページで、アップロードしたビデオを見つけ、[操作] 列の [管理] をクリックします。 [ビデオ URL] タブで、MP4 形式以外の形式のビデオ出力が存在し、[HLS 暗号化] が M3U8 ファイルにタグ付けされている場合、HLS 暗号化は成功です。
方法 2:[HLS 暗号化] のタグが付いている M3U8 ファイルの URL をコピーし、
curl -v "M3U8 ファイルの URL"コマンドを実行して、結果を確認します。HLS 暗号化を開始するときに指定した復号化 URL が DecryptKeyUri の値と同じ場合、HLS 暗号化は成功しています。方法 3:GetTranscodeTask 操作を呼び出し、手順 4 で返された JobId パラメーターの値を渡します。 レスポンスの TranscodeTemplateId の値が 手順 3 で作成したトランスコーディングテンプレートグループの ID と一致し、TranscodeJobStatus が「トランスコード成功」と表示されている場合、HLS 暗号化は成功しています。
(推奨)M3U8 暗号化と書き換え
M3U8 暗号化と書き換え機能を有効にすると、システムは M3U8 プレイリストファイルの #EXT-X-KEY タグの後に暗号化パラメーター(暗号化アルゴリズム、キー URI、認証パラメーターなど)を自動的に追加します。 クライアントは、書き換えられた M3U8 プレイリストファイルを処理するときに、キー URI(認証パラメーターを含む)を使用して復号化キーをリクエストします。 次に、クライアントはこのキーと指定されたアルゴリズムを使用してトランスポートストリーム(TS)ファイルを復号化し、HLS ストリームへの暗号化されたアクセスを保証します。
手順 1:HLS 暗号化のパラメーターパススルーを有効にする
ApsaraVideo VOD コンソールにログインし、[HLS 暗号化のパラメーターパススルー] をオンにします。
[HLS 暗号化のパラメーターパススルー] を有効にすると、M3U8 プレイリストファイルを変更できます。 具体的には、クライアントリクエストで渡されたパラメーターを最後に追加することにより、#EXT-X-KEY タグの URI を変更します。 デフォルトでは、MtsHlsUriToken が書き換えられます。
前提条件
クロスオリジン リソース共有(CORS) が設定されていること。
Alibaba Cloud GovCloud は、HLS 暗号化のパラメーターパススルーをサポートしていません。
手順
ApsaraVideo VOD コンソール にログインします。
左側のナビゲーションウィンドウで、[構成管理] を見つけます。
[CDN 構成] > [ドメイン名] を選択します。 [ドメイン名] ページが表示されます。
設定するドメイン名を見つけて、[アクション] 列の [構成] をクリックします。
ドメイン名の左側のナビゲーションウィンドウで、[動画関連] をクリックします。
[暗号化再生] セクションで、[HLS 暗号化のパラメーターパススルー] をオンにします。

この機能を有効にすると、HLS 暗号化パラメーターを渡すときに、Token パラメーターを書き換えることで、システムが自動的に認証を処理します。 書き換えられたパラメーターは
MtsHlsUriTokenで、その値はtestです。 CDN の復号化と再生中に、MtsHlsUriToken=testが M3U8 プレイリストファイルの#EXT-X-KEYタグの URI の最後に追加されます。
手順 2:MtsHlsUriToken パラメーターを含むリクエストを送信する
プレゼンスポイント(POP)にリクエストを送信して M3U8 プレイリストファイルにアクセスし、リクエストに MtsHlsUriToken を含めます。
MtsHlsUriToken を取得するには、トークンサービスを設定する必要があります。
次のサンプルコードは、MtsHlsUriToken を取得する方法を示しています。 次の表は、サンプルコードのパラメーターについて説明しています。 ビジネスニーズに基づいて変更できます。
手順 3:再生ファイルを復号化する
クライアントリクエストを受信した後、POP は認証に成功すると再生ファイルを復号化します。
手順 2 で生成された MtsHlsUriToken の値が test の場合、Alibaba Cloud CDN は復号化と再生中に MtsHlsUriToken=test を M3U8 プレイリストファイルの #EXT-X-KEY タグの URI の最後に追加します。
認証検証ロジックを自分で実装する必要があります。 参考のために、「動画を再生する」セクションで、M3U8 暗号化と書き換えが有効になっている復号化サービスを設定するためのサンプルコードを確認できます。
動画を再生する
(推奨)M3U8 暗号化と書き換えが有効になっている場合
復号化サービスを設定します。
動画を復号化するためのローカル HTTP サービスを設定します。
DecryptKMSDataKey 操作を呼び出して DK を復号化します。 レスポンスの
PlainText値には DK が含まれています。 この DK は、GenerateKMSDataKey 操作へのレスポンスで返されたPlainTextパラメーターの Base64 デコードバージョンです。復号化 URL を検証する場合は、M3U8 暗号化と書き換えを有効にします。 デフォルトでは、
MtsHlsUriTokenが書き換えられます。 これにより、HLS データアクセス中にデータが保護されます。 復号化サービスの設定に使用されるコードは、M3U8 暗号化と書き換え機能が有効になっているかどうかによって異なります。 次のセクションでは、サンプルコードについて説明します。暗号化された動画の再生 URL と認証情報を取得します。
GetVideoPlayAuth 操作を呼び出して再生認証情報を取得し、GetPlayInfo 操作を呼び出して再生 URL を取得します。
暗号化された動画を再生します。
HLS 暗号化は、すべての HLS 互換プレーヤーをサポートしています。 自己開発プレーヤーまたは ApsaraVideo Player を使用して、暗号化された動画を再生できます。
ApsaraVideo Player を使用して暗号化された動画を再生する場合は、トークンと認証情報を取得する必要があります。 詳細については、「暗号化された動画を再生する方法」をご参照ください。 サードパーティ製のプレーヤーを使用する場合は、再生ロジックを自分で実装します。
次の手順では、ApsaraVideo Player が再生をテストする方法について説明します。
(推奨)M3U8 暗号化と書き換えが有効になっている場合
M3U8 暗号化と書き換えが無効になっている場合
復号化サービスを設定します。
動画を復号化するためのローカル HTTP サービスを設定します。
DecryptKMSDataKey 操作を呼び出して DK を復号化します。 レスポンスの
PlainText値には DK が含まれています。 この DK は、GenerateKMSDataKey 操作へのレスポンスで返されたPlainTextパラメーターの Base64 デコードバージョンです。サンプルコード:
暗号化された動画の再生 URL と認証情報を取得します。
GetVideoPlayAuth を取得する再生情報を取得する 操作を呼び出して再生認証情報を取得し、 操作を呼び出して再生 URL を取得します。
暗号化された動画を再生します。
HLS 暗号化は、すべての HLS 互換プレーヤーをサポートしています。 自己開発プレーヤーまたは ApsaraVideo Player を使用して、暗号化された動画を再生できます。
ApsaraVideo プレーヤーを使用して暗号化された動画を再生する場合は、トークンと認証情報を取得する必要があります。詳細については、「暗号化された動画を再生する方法」をご参照ください。サードパーティ製のプレーヤーを使用する場合は、再生ロジックを独自に実装してください。
次の手順では、ApsaraVideo Playerの再生テスト方法について説明します。
M3U8 暗号化と書き換えが無効になっている場合