Untuk mendukung manajemen hak digital (DRM) dan perlindungan konten, konfigurasikan enkripsi video output Anda dengan Transcoder API. Versi Transcoder API saat ini mendukung DRM enkripsi umum (CENC) dari Google Widevine dan Microsoft PlayReady, serta perlindungan konten DRM dan AES-128 Apple FairPlay. Transcoder API hanya bertanggung jawab untuk enkripsi konten.
Sebelum memulai
Sebelum mengupload konten ke Transcoder API untuk enkripsi, Anda memerlukan cara untuk membuat dan menyimpan kunci acak 128-bit (32 karakter heksadesimal). Transcoder API menggunakan kunci tersebut untuk mengenkripsi konten sesuai dengan penampung. Pastikan kunci tersebut terdaftar dalam kebijakan lisensi dari penyedia DRM Anda. Dengan begitu, pemain dapat mendekripsi konten Anda nantinya. Enkripsi konten didukung untuk penampung berikut:
Jenis | Teknologi | Format | Codec Video | Codec Audio | |
---|---|---|---|---|---|
H.264 | H.265 | AAC | |||
DRM | FairPlay | HLS | TS (CONTOH-AES) | fMP4 (CONTOH-AES) | TS (CONTOH-AES) |
fMP4 (CONTOH-AES) | fMP4 (CONTOH-AES) | ||||
DRM | Widevine, PlayReady | DASH | fMP4 (MPEG-CENC) | fMP4 (MPEG-CENC) | |
DRM | Widevine, PlayReady | HLS | fMP4 (MPEG-CENC) | fMP4 (MPEG-CENC) | |
Perlindungan konten | AES-128 | HLS, DASH | fMP4, TS (AES-128) | fMP4, TS (AES-128) | fMP4, TS (AES-128) |
Google Widevine dan Microsoft PlayReady mendukung protokol streaming adaptif dinamis melalui HTTP (DASH) dan protokol live streaming HTTP (HLS). Dukungan perangkat untuk protokol ini bervariasi (misalnya, HLS dan DASH didukung di Android dan web, tetapi hanya HLS yang didukung di iOS). Output untuk protokol ini dienkripsi menggunakan standar CENC (ISO/IEC 23001-7:2016 untuk fragmen ISO-BMFF). Secara khusus, skema enkripsi harus berupa CTR AES-128.
Apple FairPlay menggunakan protokol HLS. Output untuk protokol ini dienkripsi menggunakan CONTOH-AES CBC. Untuk mengetahui informasi selengkapnya tentang output ini, baca Format Enkripsi Streaming MPEG-2 untuk HTTP Live Streaming.
Perlindungan konten
AES-128 mendukung DASH atau HLS dan dienkripsi menggunakan mode CTR atau CBC.
Memilih penampung output
Transcoder API mendukung container berikut:
- TS (menggunakan skema AES-128 CBC):
- HLS dengan CONTOH-AES
- HLS dengan (AES-128 CTR atau AES-128 CBC)
- fMP4:
- HLS
- CONTOH-AES
- DASH
- MPEG-CENC
- Skema: AES-128 CTR atau AES-128 CBC
- HLS
Membuat streaming output multipleks
Tambahkan aliran output ke
daftar muxStreams
dalam konfigurasi tugas. Konfigurasikan setelan enkripsi menggunakan
objek
Encryption
.
Berikut adalah contoh REST/JSON untuk container file output TS:
"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"
}
}
}
]
Berikut adalah contoh REST/JSON untuk penampung output fMP4:
"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"
}
}
}
]
Menambahkan aliran output ke file manifes
Berikut adalah contoh REST/JSON untuk container file output TS:
"manifests": [
{
"fileName": "manifest.m3u8",
"type": "HLS",
"muxStreams": [
"360p-my-video-ts"
]
}
]
Berikut adalah contoh REST/JSON untuk penampung output fMP4:
"manifests": [
{
"fileName": "main-cbcs.mpd",
"type": "DASH",
"muxStreams": [
"360p-my-audio-fmp4",
"360p-my-video-fmp4"
]
}
]
Bermigrasi ke konfigurasi v1
Ikuti langkah-langkah di bagian ini untuk memperbarui konfigurasi tugas pratinjau pribadi agar mendukung format enkripsi v1.
Konfigurasi enkripsi lama memberikan detail enkripsi untuk aliran mux di kolom muxStreams
itu sendiri (lihat hal berikut):
{
...
"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"
}
}
}
]
...
}
Setelan enkripsi kini dibagi menjadi dua bagian berikut:
- Kunci enkripsi: kunci kini disimpan di Secret Manager
- Konfigurasi dan setelan enkripsi: ini sekarang menjadi kolom baru dalam konfigurasi tugas
Gunakan langkah-langkah berikut untuk memperbarui setelan enkripsi pratinjau pribadi ke format v1.
Buat rahasia yang berisi kunci enkripsi yang terdapat dalam konfigurasi tugas lama. Catat ID resource rahasia. Untuk mengetahui informasi selengkapnya, lihat Menambahkan kunci enkripsi ke 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" ] } ] } ] } ...
Buat pesan kolom enkripsi untuk setiap setelan enkripsi dari konfigurasi tugas lama. Untuk mengetahui informasi selengkapnya, lihat Membuat tugas.
... "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" } } ] ...
Perbarui aliran data mux di
muxStreams
dengan menghapus kolom enkripsi dan menggunakanencryptionId
setelan enkripsi yang dibuat di langkah sebelumnya.{ ... "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" } ] ... }
Untuk informasi selengkapnya, lihat Mengenkripsi konten yang di-transcoding.