Para admitir la administración de derechos digitales (DRM) y la protección de contenido, configura la encriptación de tu video de salida con la API de Transcoder. La versión actual de la API de Transcoder admite la encriptación común (CENC) DRM de Google Widevine y Microsoft PlayReady, así como protección de contenido de Apple FairPlay y AES-128. La API de Transcoder solo es responsable de la encriptación del contenido.
Antes de comenzar
Antes de subir tu contenido a la API de Transcoder para la encriptación, necesitas una forma de generar y almacenar claves aleatorias de 128 bits (32 caracteres hexadecimales). La API de Transcoder usa esas claves para encriptar el contenido según el contenedor. Asegúrate de que las claves estén registradas en una política de licencias de tu proveedor de DRM. Esto permitirá que los jugadores desencripten tu contenido más adelante. La encriptación de contenido es compatible con los siguientes contenedores:
Tipo | Tecnología | Formato | Códecs de video | Códecs de audio | |
---|---|---|---|---|---|
H.264 | H.265 | AAC | |||
DRM, | FairPlay | HLS | TS (MUESTRA-AES) | fMP4 (MUESTRA-AES) | TS (MUESTRA-AES) |
fMP4 (MUESTRA-AES) | fMP4 (MUESTRA-AES) | ||||
DRM, | Widevine, PlayReady | DASH | fMP4 (MPEG-CENC) | fMP4 (MPEG-CENC) | |
DRM, | Widevine, PlayReady | HLS | fMP4 (MPEG-CENC) | fMP4 (MPEG-CENC) | |
Protección de contenido | AES-128 | HLS y DASH | fMP4 y TS (AES-128) | fMP4 y TS (AES-128) | fMP4 y TS (AES-128) |
Google Widevine y Microsoft PlayReady admiten los protocolos de transmisión en vivo adaptable y dinámica a través de HTTP (DASH) y HTTP en vivo (HLS). La compatibilidad del dispositivo con estos protocolos varía (por ejemplo, HLS y DASH son compatibles con Android y la Web, pero solo HLS es compatible con iOS). El resultado de estos protocolos se encripta con el estándar CENC (ISO/IEC 23001-7:2016 para fragmentos ISO-BMFF). En particular, el esquema de encriptación debe ser una CTR AES-128.
Apple FairPlay usa el protocolo HLS. El resultado de este protocolo se encripta con SAMPLE-AES CBC. Si deseas obtener más información sobre este resultado, consulta Formato de encriptación de transmisión MPEG-2 para transmisión en vivo HTTP.
Protección de contenido
AES-128 admite DASH o HLS y se encripta utilizando el modo CTR o CBC.
Seleccionar un contenedor de salida
La API de Transcoder es compatible con los siguientes contenedores:
- TS (con el esquema AES-128 CBC):
- HLS con SAMPLE-AES
- HLS con (AES-128 CTR o AES-128 CBC)
- fMP4:
- HLS
- AES DE MUESTRA
- DASH
- MPEG‐CENC
- Scheme: AES-128 CTR o AES-128 CBC
- HLS
Crea la transmisión de salida multiplexada
Agrega el flujo de salida a la lista muxStreams
en la configuración del trabajo. Establece la configuración de encriptación con el objeto Encryption
.
El siguiente es un ejemplo de REST/JSON para el contenedor de archivos de salida de 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"
}
}
}
]
El siguiente es un ejemplo de REST/JSON para el contenedor de salida 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"
}
}
}
]
Agrega las transmisiones de salida al archivo de manifiesto
El siguiente es un ejemplo de REST/JSON para el contenedor de archivos de salida de TS:
"manifests": [
{
"fileName": "manifest.m3u8",
"type": "HLS",
"muxStreams": [
"360p-my-video-ts"
]
}
]
El siguiente es un ejemplo de REST/JSON para el contenedor de salida fMP4:
"manifests": [
{
"fileName": "main-cbcs.mpd",
"type": "DASH",
"muxStreams": [
"360p-my-audio-fmp4",
"360p-my-video-fmp4"
]
}
]
Migra a la configuración de la versión 1
Sigue los pasos que se indican en esta sección para actualizar la configuración del trabajo de vista previa privada y que sea compatible con el formato de encriptación v1.
Las configuraciones de encriptación heredada proporcionan los detalles de encriptación para una transmisión mux en el campo muxStreams
(consulta lo siguiente):
{
...
"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"
}
}
}
]
...
}
La configuración de encriptación ahora se divide en las siguientes dos partes:
- Claves de encriptación: ahora se almacenan en Secret Manager
- Configuración y configuración de encriptación: ahora son un campo nuevo en la configuración del trabajo
Sigue estos pasos para actualizar la configuración de encriptación de la vista previa privada al formato v1.
Crea un secreto que contenga las claves de encriptación contenidas en la configuración del trabajo heredado. Anota el ID de recurso del secreto. Para obtener más información, consulta Agrega la clave de encriptación a 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" ] } ] } ] } ...
Crea un mensaje de campo de encriptación para cada configuración de encriptación de la configuración del trabajo heredada. Para obtener más información, consulta Crea un trabajo.
... "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" } } ] ...
Para actualizar una transmisión mux en
muxStreams
, quita el campo de encriptación y, en su lugar, usa elencryptionId
de la configuración de encriptación creada en el paso anterior.{ ... "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" } ] ... }
Para obtener más información, consulta Encripta el contenido transcodificado.