デジタル著作権管理(DRM)とコンテンツ保護をサポートするために、Transcoder API を使用した出力動画の暗号化を構成します。最新バージョンの Transcoder API は、Google Widevine や Microsoft PlayReady の共通暗号化(CENC)DRM、および Apple FairPlay DRM や AES-128 のコンテンツ保護をサポートしています。Transcoder API は、コンテンツの暗号化のみを行います。
始める前に
コンテンツを Transcoder API にアップロードして暗号化する前に、ランダムな 128 ビットキー(32 個の 16 進数の文字)を生成して保存する方法が必要です。Transcoder API はこれらのキーを使用して、コンテナに従ってコンテンツを暗号化します。キーが DRM プロバイダのライセンス ポリシーに登録されていることを確認します。これにより、プレーヤーが後でコンテンツを復号できるようになります。コンテンツの暗号化は、次のコンテナでサポートされています。
型 | テクノロジー | 形式 | 動画コーデック | オーディオ コーデック | |
---|---|---|---|---|---|
H.264 | H.265 | AAC | |||
DRM | FairPlay | HLS | TS(SAMPLE-AES) | fMP4(SAMPLE-AES) | TS(SAMPLE-AES) |
fMP4(SAMPLE-AES) | fMP4(SAMPLE-AES) | ||||
DRM | Widevine、PlayReady | DASH | fMP4(MPEG-CENC) | fMP4(MPEG-CENC) | |
DRM | Widevine、PlayReady | HLS | fMP4(MPEG-CENC) | fMP4(MPEG-CENC) | |
コンテンツの保護 | AES-128 | HLS、DASH | fMP4、TS(AES-128) | fMP4、TS(AES-128) | fMP4、TS(AES-128) |
Google Widevine と Microsoft PlayReady は、Dynamic Adaptive Streaming over HTTP(DASH)プロトコルと HTTP Live Streaming(HLS)プロトコルの両方をサポートしています。これらのプロトコルのサポートはデバイスによって異なります(たとえば、Android とウェブでは HLS と DASH が サポートされますが、iOS では HLS のみがサポートされます)。これらのプロトコルの出力は、CENC 標準(ISO-BMFF フラグメントの場合は ISO/IEC 23001-7:2016)を使用して暗号化されます。特に、暗号化スキームは AES-128 CTR である必要があります。
Apple FairPlay では HLS プロトコルが使用されます。このプロトコルの出力は SAMPLE-AES CBC を使用して暗号化されます。この出力の詳細については、HTTP Live Streaming の MPEG-2 ストリーム暗号化形式をご覧ください。
コンテンツの保護
AES-128 は DASH または HLS をサポートし、CTR または CBC モードを使用して暗号化されます。
出力コンテナを選択する
Transcoder API は次のコンテナをサポートしています。
- TS(AES-128 CBC スキームを使用):
- HLS(SAMPLE-AES を使用)
- HLS(AES-128 CTR または AES-128 CBC を使用)
- fMP4:
- HLS
- SAMPLE-AES
- DASH
- MPEG-CENC
- スキーム: AES-128 CTR または AES-128 CBC
- HLS
多重化出力ストリームを作成する
出力構成をジョブ構成の muxStreams
リストに追加します。Encryption
オブジェクトを使用して暗号化設定を構成します。
以下に、TS 出力ファイル コンテナの REST/JSON の例を示します。
"muxStreams": [
{
"key": "360p-my-video-ts",
"fileName": "360p-my-video.ts",
"container": "ts",
"elementaryStreams": [
"video-stream0",
"audio-stream0"
],
"encryption": {
"key": "aabbccddeeff11223344556677889900",
"iv": "00112233445566778899aabbccddeeff",
"sampleAes": {
"keyUri": "skd://00112233445566778899aabbccddeeff"
}
}
}
]
以下に、fMP4 出力コンテナの REST/JSON の例を示します。
"muxStreams": [
{
"key": "360p-my-video-fmp4",
"container": "fmp4",
"elementaryStreams": [
"video-stream0"
],
"fileName": "360p-my-video.fmp4",
"encryption": {
"key": "aabbccddeeff11223344556677889900",
"iv": "00112233445566778899aabbccddeeff",
"sampleAes": {
"keyUri": "skd://00112233445566778899aabbccddeeff"
}
}
},
{
"key": "360p-my-audio-fmp4",
"container": "fmp4",
"elementaryStreams": [
"audio-stream0"
],
"fileName": "360p-my-audio.fmp4",
"encryption": {
"key": "aabbccddeeff11223344556677889900",
"iv": "00112253445566778899aabbccddeeff",
"sampleAes": {
"keyUri": "skd://00112233445566778899aabbccddeeff"
}
}
}
]
出力ストリームをマニフェスト ファイルに追加する
以下に、TS 出力ファイル コンテナの REST/JSON の例を示します。
"manifests": [
{
"fileName": "manifest.m3u8",
"type": "HLS",
"muxStreams": [
"360p-my-video-ts"
]
}
]
以下に、fMP4 出力コンテナの REST/JSON の例を示します。
"manifests": [
{
"fileName": "main-cbcs.mpd",
"type": "DASH",
"muxStreams": [
"360p-my-audio-fmp4",
"360p-my-video-fmp4"
]
}
]
v1 構成への移行
非公開プレビュー ジョブの構成を更新して v1 暗号化形式をサポートするには、このセクションの手順を行います。
従来の暗号化構成では、muxStreams
フィールド自体に mux ストリームの暗号化の詳細が表示されます(以下をご覧ください)。
{
...
"muxStreams": [
{
"key": "360p-my-video-ts",
"fileName": "360p-my-video.ts",
"container": "ts",
"elementaryStreams": [
"video-stream0",
"audio-stream0"
],
"encryption": {
"key": "aabbccddeeff11223344556677889900",
"iv": "10314849f4a110ad4abacdb6f5f4b86f",
"sampleAes": {
"keyUri": "skd://10314849f4a110ad4abacdb6f5f4b86f"
}
}
},
{
"key": "360p-my-video-fmp4",
"container": "fmp4",
"elementaryStreams": [
"video-stream0"
],
"fileName": "360p-my-video.fmp4",
"encryption": {
"key": "11223344556677889900aabbccddeeff",
"iv": "179b08b91372aa26e0763e87743db388",
"mpegCenc": {
"keyId": "skd://179b08b91372aa26e0763e87743db388",
"scheme": "cenc"
}
}
},
{
"key": "360p-my-audio-fmp4",
"container": "fmp4",
"elementaryStreams": [
"audio-stream0"
],
"fileName": "360p-my-audio.fmp4",
"encryption": {
"key": "11223344556677889900aabbccddeeff",
"iv": "179b08b91372aa26e0763e87743db388",
"mpegCenc": {
"keyId": "skd://179b08b91372aa26e0763e87743db388",
"scheme": "cenc"
}
}
}
]
...
}
暗号化設定は、次の 2 つの部分に分かれています。
- 暗号鍵: 鍵が Secret Manager に格納されるようになりました
- 暗号化構成と設定: ジョブ構成の新しいフィールドになりました
非公開プレビューの暗号化設定を v1 形式に更新するには、次の手順を行います。
従来のジョブ構成に含まれる暗号鍵を含むシークレットを作成します。シークレットのリソース ID をメモします。詳細については、Secret Manager に暗号鍵を追加するをご覧ください。
... { "encryptionKeys": [ { "key": "aabbccddeeff11223344556677889900", "keyId": "10314849f4a110ad4abacdb6f5f4b86f", "keyUri": "skd://10314849f4a110ad4abacdb6f5f4b86f", "iv": "10314849f4a110ad4abacdb6f5f4b86f", "matchers": [ { "muxStreams": [ "360p-my-video-ts" ] } ] }, { "key": "11223344556677889900aabbccddeeff", "keyId": "179b08b91372aa26e0763e87743db388", "keyUri": "skd://179b08b91372aa26e0763e87743db388", "iv": "179b08b91372aa26e0763e87743db388", "matchers": [ { "muxStreams": [ "360p-my-video-fmp4", "360p-my-audio-fmp4" ] } ] } ] } ...
従来のジョブ構成から暗号化設定ごとに暗号化フィールドのメッセージを作成します。詳細については、ジョブを作成するをご覧ください。
... "encryptions": [ { "id": "ts_sampleaes", "secretManagerKeySource": { // resource for the secret created in the preceding step "secretVersion": "projects/{project}/secrets/{secret_id}/versions/{version_number}" }, "drmSystems": { "fairplay": {} }, "sampleAes": {} }, { "id": "fmp4_mpegcenc_cenc", "secretManagerKeySource": { // resource for the secret created in the preceding step "secretVersion": "projects/{project}/secrets/{secret_id}/versions/{version_number}" }, "drmSystems": { "widevine": {}, "playready": {} }, "mpegCenc": { "scheme": "cbcs" } } ] ...
muxStreams
の mux ストリームを更新するには、暗号化フィールドを削除し、代わりに前の手順で作成した暗号化設定のencryptionId
を使用します。{ ... "muxStreams": [ { "key": "360p-my-video-ts", "fileName": "360p-my-video.ts", "container": "ts", "elementaryStreams": [ "video-stream0", "audio-stream0" ], "encryptionId": "ts_sampleaes" }, { "key": "360p-my-video-fmp4", "container": "fmp4", "elementaryStreams": [ "video-stream0" ], "fileName": "360p-my-video.fmp4", "encryptionId": "fmp4_mpegcenc_cenc" }, { "key": "360p-my-audio-fmp4", "container": "fmp4", "elementaryStreams": [ "audio-stream0" ], "fileName": "360p-my-audio.fmp4", "encryptionId": "fmp4_mpegcenc_cenc" } ] ... }
詳しくは、コード変換されたコンテンツを暗号化するをご覧ください。