HTTPライブストリーミング (HLS) 暗号化は、AES-128を使用してビデオコンテンツを暗号化し、すべてのHLS互換プレーヤーをサポートします。 HLS暗号化は、Key Management Service (KMS) およびトークンサービスとともに使用する必要があります。 この暗号化方式は、オンライン教育やテレビ番組など、高いセキュリティが要求される分野で広く利用されています。このトピックでは、HLS暗号化を使用してHLS暗号化ビデオを再生する方法について説明します。
アップグレードの説明
ApsaraVideo VODのHLS暗号化機能は2022年8月にアップグレードされました。 古い暗号化手順は引き続き使用できますが、暗号化プロセスとロジックが改善された新しい手順を使用することをお勧めします。 古い暗号化手順を使用する場合は、「HLS暗号化」をご参照ください。
HLS暗号化のしくみ
ApsaraVideo VODは、エンベロープ暗号化テクノロジーを使用してビデオを暗号化します。 KMSを使用して、データキー (DK) とエンベロープデータキー (EDK) を生成できます。 次に、DKを使用してビデオを暗号化し、暗号化されたビデオをEDKと一緒に保存できます。 ビデオを再生する場合、プレーヤーは復号化サービスを使用してDKを取得し、ビデオを復号化します。
復号用のURLを検証する場合は、M3U8の暗号化と書き換えを有効にして、HLSコンテンツを保護できます。 デフォルトでは、MtsHlsUriToken
は書き換えられます。 M3U8の暗号化と書き換えを有効にする方法と技術原則の詳細については、「M3U8の暗号化と書き換え」をご参照ください。
暗号化と復号化プロセス
アップロードと暗号化
解読と再生
(推奨) M3U8暗号化と書き換えが有効
M3U8暗号化と書き換えが有効になっていません
前提条件
ApsaraVideo VODが有効化されています。 詳細については、「ApsaraVideo VODの有効化」をご参照ください。
ApsaraVideo VODはKMSへのアクセスを許可されています。 [クラウドリソースアクセス許可] ページで、ApsaraVideo VODにKMSへのアクセスを許可できます。
高速化ドメイン名がApsaraVideo VODに追加されました。 詳細については、「CDNのドメイン名の追加」をご参照ください。
ApsaraVideo VOD SDKは統合されています。 詳細については、「概要」をご参照ください。 このトピックでは、例としてApsaraVideo VOD SDK for Javaを使用します。
ビデオを暗号化
サービスキーを作成します。
サービスキーは、KMSのプライマリ暗号化キーとして使用されます。 HLS暗号化用のキーを生成するには、サービスキーを作成する必要があります。 サービスキーを作成しない場合、GenerateKMSDataKey操作を呼び出してDKを生成するとエラーが発生します。
ApsaraVideo VODコンソールにログインします。 左側のナビゲーションウィンドウで、[構成管理]> [メディア処理]> [HLS暗号化] を選択します。
ページの左上隅で、サービスキーを作成するリージョンを選択します。
説明サービスキーは、ビデオが保存されているオリジンサーバーと同じリージョンに作成する必要があります。 たとえば、ビデオが中国 (上海) リージョンに保存されている場合は、中国 (上海) リージョンにサービスキーを作成する必要があります。
HLS暗号化ページで、[サービスキーの作成] をクリックします。
サービスキーの作成後、システムはサービスキーが作成されます。 [キー情報] セクションでサービスキーを確認できます。
説明[キー情報] セクションにサービスキーが表示されない場合は、AliyunVODDefaultRoleポリシーをロールにアタッチしているかどうかを確認します。 [Cloud Resource Access Authorization] ページでロールに権限を付与し、HLS Encryptionページを更新してサービスキーを表示できます。
HLS暗号化用のトランスコードテンプレートグループを作成します。
HLS暗号化用のトランスコードなしテンプレートグループとトランスコードテンプレートグループが必要です。
[No Transcoding] テンプレートグループは、プリセットテンプレートグループです。 HLS暗号化用のトランスコードテンプレートグループを作成する必要があります。 トランスコードテンプレートグループを作成するには、次の手順を実行します。
ApsaraVideo VODコンソールにログインします。 左側のナビゲーションウィンドウで、[構成管理]> [メディア処理]> [トランスコードテンプレートグループ] を選択します。
[トランスコードテンプレートグループ] ページで、[トランスコードテンプレートグループの作成] をクリックします。
[基本パラメーター] セクションで、カプセル化形式をhlsに設定します。 [詳細パラメーター] セクションで、[ビデオ暗号化] をオンにし、[Alibaba Cloud独自の暗号化] を選択します。 ビジネス要件に基づいて他のパラメーターを設定します。 パラメーターの詳細については、「通常のトランスコードテンプレートグループの設定」をご参照ください。
テンプレートが作成されたら、[トランスコードテンプレートグループ] ページでトランスコードテンプレートグループのIDを確認します。 IDは、HLS暗号化をリクエストするときに必要です。
Alibaba Cloud KMSをカプセル化するキー管理サービスを設定します。
DKとEDKを生成するには、GenerateKMSDataKey操作を呼び出します。
GenerateKMSDataKeyを呼び出すときにリクエストパラメーターを指定する必要はありません。 応答の
CiphertextBlob
パラメーターはEDKを示し、Plaintext
はDKを示します。CiphertextBlob
はAES_128キーです。 EDKは、HLS暗号化をリクエストするときに必要です。[トランスコードなし] トランスコードテンプレートグループを使用して動画をアップロードします。
通常、自動トランスコーディングは、ApsaraVideo VODにアップロードされたビデオに対してトリガーされます。 ただし、HLS暗号化は、自動的にトランスコードされるビデオをサポートしません。 したがって、HLS暗号化が必要な動画をアップロードするには、[No Transcoding] テンプレートグループを使用する必要があります。 このように、自動トランスコーディングはトリガーされません。
ApsaraVideo VODコンソールを使用してメディアファイルをアップロードする方法の詳細については、「ApsaraVideo VODコンソールを使用してメディアファイルをアップロードする」をご参照ください。 ApsaraVideo VOD APIを使用してメディアファイルをアップロードする方法の詳細については、「メディアアップロード」をご参照ください。
ApsaraVideo VODでイベント通知を設定します。 FileUploadCompleteコールバックが返されると、ビデオがアップロードされます。 イベント通知の設定方法の詳細については、「概要」をご参照ください。
HLS暗号化を開始します。
SubmitTranscodeJobs操作を呼び出して、HLS暗号化を開始します。
ApsaraVideo VODでイベント通知を設定した場合、StreamTranscodeCompleteまたはTranscodeCompleteコールバックが返されると、ビデオはトランスコードされます。
HLS暗号化の結果を表示します。
ビデオをトランスコードしたら、次のいずれかの方法でHLS暗号化が成功したかどうかを確認します。
方法1: ApsaraVideo VODコンソールにログインします。 左側のナビゲーションウィンドウで、[メディアファイル]> [オーディオ /ビデオ] を選択します。 [ビデオとオーディオ] ページでビデオを見つけ、[操作] 列の [管理] をクリックします。 [ビデオURL] タブで、MP4を含む形式のビデオ出力が存在し、M3U8ファイルにHLS暗号化がタグ付けされている場合、HLS暗号化は成功します。
方法2: HLS暗号化とタグ付けされたM3U8ファイルのURLをコピーし、
curl -v "URL of the M3U8 file"
コマンドを実行して、結果を確認します。HLS暗号化の開始時に指定した復号化URLがDecryptKeyUriの値と同じである
場合、HLS暗号化は成功です。
HLS暗号化ビデオを再生する
復号化サービスを設定します。
ビデオを復号化するためのローカルHTTPサービスを設定します。
DecryptKMSDataKey操作を呼び出して、ビデオを復号化します。 DKは応答で返されます。 DKは、GenerateKMSDataKey操作の応答で返される
PlainText
パラメーターのBase64-decoded値です。復号用のURLを検証する場合は、M3U8の暗号化と書き換えを有効にして、HLSコンテンツを保護できます。 デフォルトでは、
MtsHlsUriToken
は書き換えられます。 M3U8の暗号化と書き換えを有効にする方法と技術原則の詳細については、「M3U8の暗号化と書き換え」をご参照ください。 復号化サービスの設定に使用されるコードは、M3U8の暗号化と書き換えを有効にしたかどうかによって異なります。 次のセクションでは、サンプルコードについて説明します。(推奨) M3U8暗号化および書き換え可能
M3U8暗号化および書き換えが有効になっていない
ビデオの再生URLと資格情報を取得します。
GetVideoPlayAuth操作を呼び出して再生資格情報を取得し、GetPlayInfo操作を呼び出して再生URLを取得します。
暗号化されたビデオを再生します。
HLS暗号化は、すべてのHLS互換プレーヤーをサポートします。 自己開発プレーヤーまたはApsaraVideoプレーヤーを使用して、暗号化されたビデオを再生できます。
ApsaraVideo Playerを使用して暗号化されたビデオを再生する場合、トークンと認証情報を取得する必要があります。 詳細については、「暗号化ビデオの再生」をご参照ください。 サードパーティのプレーヤーを使用する場合は、再生ロジックを指定します。
次の手順では、ApsaraVideo Playerが再生をテストする方法について説明します。
(推奨) M3U8暗号化および書き換え可能
プロセス
プレーヤーは、M3U8ファイルのURIを取得した後、M3U8ファイルのEXT-X-KEYタグ内のURIを解析してアクセスします。 このようにして、プレーヤは、EDKを含む復号化操作のURIを取得する。 このURIは、HLS暗号化の開始時に指定するEncryptConfigの
DecryptKeyUri
パラメーターの値です。許可されたユーザーのみにビデオへのアクセスを許可する場合、プレーヤーは、プレーヤーが復号鍵を取得したときに確認できる正確な認証情報を提供する必要があります。 認証情報は、MtsHlsUriTokenパラメーターを使用して渡すことができます。
プレーヤーが解読URIを取得した後、プレーヤーは自動的に解読キーを取得する要求を送信します。 プレーヤが復号鍵を取得した後、プレーヤは、再生のために暗号化されたTSファイルを復号します。
例
ビデオ再生URLは
https://demo.aliyundoc.com/encrypt-stream ****-hd.m3u8
です。 リクエストにはMtsHlsUriToken
パラメーターを含める必要があります。最後のリクエストURLは
https://demo.aliyundoc.com/encrypt-stream ****-hd.m3u8?MtsHlsUriToken=<Token>
です。復号化URLは
https://demo.aliyundoc.com?CipherText=ZjJmZGViNzUtZWY1Mi00Y2RlLTk3MTMtOT ****
です。復号化の最終的なリクエストURLは、
https://demo.aliyundoc.com?CipherText=ZjJmZGViNzUtZWY1Mi00Y2RlLTk3MTMtOT ****&MtsHlsUriToken=<発行されたトークン>
です。
M3U8暗号化および書き換えが有効になっていない
処理中
プレイヤーは、M3U8ファイルのURLを取得した後、M3U8ファイルの
EXT-X-KEY
のURLを解析してアクセスします。 このようにして、プレーヤは、暗号文鍵が含まれた復号URLを得る。 復号化URLは、HLS暗号化の開始時に渡すEncryptConfigのDecryptKeyUri
の値です。 詳細は、「リクエストパラメーター」をご参照ください。プレーヤーが解読URIを取得した後、プレーヤーは自動的に解読キーを取得する要求を送信します。 プレーヤが復号鍵を取得した後、プレーヤは、再生のために暗号化されたTSファイルを復号します。
例
ビデオ再生URLは
https://demo.aliyundoc.com/encrypt-stream ****-hd.m3u8
です。最終的なリクエストURLは
https://demo.aliyundoc.com/encrypt-stream ****-hd.m3u8
です。復号化URLは
https://demo.aliyundoc.com?CipherText=ZjJmZGViNzUtZWY1Mi00Y2RlLTk3MTMtOT ****
です。復号化の最終要求URLは
https://demo.aliyundoc.com?CipherText=ZjJmZGViNzUtZWY1Mi00Y2RlLTk3MTMtOT ****
です。