Proteger un Live stream con multi-DRM
Available in: UI · API
Usa este how-to cuando un Live stream deba llegar a clientes web, Windows y Apple con DRM aplicado en todas las plataformas. El modelo de integración es el mismo en cualquier superficie: registra un DRM provider una vez y asócialo a cada Destination protegido.
Cuándo usar esto
Cuando un Destination DASH o CMAF sobre un Live stream deba cifrar segmentos y llevar las URLs de licencia en el manifest. Para la referencia conceptual consulta DRM.
Prerrequisitos
- El rol System Administrator. El CRUD de DRM providers está reservado a ese rol; los Operators no pueden registrar, validar, editar ni borrar proveedores.
- Una cuenta con un proveedor multi-DRM. El catálogo publica hoy
AXINOMyEZDRM. El proveedor te facilita un endpoint SPEKE, las credenciales que espera la marca y — para las marcas que lo requieran — un tenant id. - Un Destination
DASHoCMAFen el Live stream que llevará la salida protegida.
Via UI
Navegación: Integrations → DRM → Providers.
Registra el DRM provider
Abre Integrations → DRM → Providers y pulsa Add provider. El formulario mapea al esquema DrmProviderCreateRequest:
| Etiqueta UI | Campo API | Notas |
|---|---|---|
| Name | name | Nombre visible (≤ 100 caracteres). |
| Provider type | provider_type | Uno de los valores del catálogo servidor (hoy AXINOM, EZDRM). |
| SPEKE URL | speke_url | Endpoint SPEKE principal. |
| SPEKE backup URL | speke_url_backup | Respaldo opcional. |
| Tenant id | tenant_id | Obligatorio cuando el Provider type elegido declara requires_tenant_id = true. |
| Credentials | credentials | Sobre específico del proveedor. Solo escritura — GET devuelve el centinela redactado. |
| Enabled | enabled | Si el proveedor es seleccionable por los Destinations. |
Envía. La nueva fila aparece en la lista de proveedores con Validation status: UNKNOWN.
Valida
Ejecuta la acción Validate sobre la fila del proveedor. El handler hace ida y vuelta contra el servicio SPEKE upstream. La columna Validation status pasa a VALID (éxito) o INVALID (fallo). Un fallo expone un error saneado en Validation error; corrige las credenciales con Edit y vuelve a validar.
Asocia el proveedor a un Destination
Abre el Destination en Destinations y rellena el bloque DRM:
| Etiqueta UI | Campo API | Notas |
|---|---|---|
| Enable DRM | drm.active | Toggle que activa el DRM en este Destination. |
| DRM Provider | drm.provider_id | Selector sobre los proveedores registrados (solo aparecen los habilitados). |
| Content ID | drm.contentid | Identificador de contenido esperado por el proveedor. |
| DRM Systems | drm.systems[] | Cualquier combinación de Widevine, PlayReady, FairPlay. FairPlay solo está disponible en CMAF. |
| Encryption | drm.encryption_mode | CENC o CBCS. |
Cuando los sistemas seleccionados admiten los dos modos, eliges tú; si no, los fijan los sistemas. FairPlay obliga a CBCS — el botón CENC aparece deshabilitado. Con CBCS, Widevine, PlayReady y FairPlay comparten un solo empaquetado: un único juego de segmentos sirve a todos los reproductores. Los dispositivos que solo admiten CENC — sobre todo televisores PlayReady 2.0 — no reproducen CBCS; si tu audiencia los incluye, usa un Destination CENC aparte para Widevine y PlayReady.
Guarda. La fila del Destination muestra un escudo cuando DRM está activo.
Arranca el Live stream
Arranca el Live stream desde On air o desde la página de detalle. El encoder solicita las claves al endpoint SPEKE configurado, cifra los segmentos y escribe las URLs de licencia en el manifest.
Via API
CRUD del DRM provider:
| Acción | Método + ruta | operationId |
|---|---|---|
| Listar proveedores | GET /c21apiv2/settings/integrations/drmproviders | getAllDrmProviders |
| Crear un proveedor | POST /c21apiv2/settings/integrations/drmproviders | addDrmProvider |
| Validar un proveedor | POST /c21apiv2/settings/integrations/drmproviders/{providerId}/validate | validateDrmProvider |
| Actualizar un proveedor | PUT /c21apiv2/settings/integrations/drmproviders/{providerId} | updateDrmProvider |
| Borrar un proveedor | DELETE /c21apiv2/settings/integrations/drmproviders/{providerId} | deleteDrmProvider |
El bloque DRM de un Destination se asigna mediante addPublishing / updatePublishing:
# 1. Registra el proveedor
curl -X POST "https://<tu-host>/c21apiv2/settings/integrations/drmproviders" \
-H "Authorization: Bearer <YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"name": "MyDRMProvider",
"provider_type": "AXINOM",
"speke_url": "https://drm-axinom.example/speke/v2",
"tenant_id": "<tenant>",
"credentials": { "...": "..." },
"enabled": true
}'
# 2. Valida
curl -X POST "https://<tu-host>/c21apiv2/settings/integrations/drmproviders/<providerId>/validate" \
-H "Authorization: Bearer <YOUR_API_TOKEN>"
# 3. Asocia a un Destination DASH o CMAF existente
curl -X PUT "https://<tu-host>/c21apiv2/publishings/<publishingId>" \
-H "Authorization: Bearer <YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"drm": {
"active": true,
"provider_id": <providerId>,
"contentid": "<content id del proveedor>",
"systems": ["Widevine", "PlayReady"],
"encryption_mode": "cenc"
}
}'
validation_status lleva UNKNOWN (recién registrado), VALID (validación correcta) o INVALID (validación fallida). Patrones habituales:
| Patrón | drm.systems | drm.encryption_mode |
|---|---|---|
| DASH + CMAF, web + Microsoft | ["Widevine", "PlayReady"] | cenc |
| CMAF, cobertura Apple | ["FairPlay"] | cbcs |
Entrega universal cbcs (solo CMAF; envía encryption_mode explícitamente) | ["Widevine", "PlayReady", "FairPlay"] | cbcs |
Verificar
- La fila del proveedor muestra Validation status: VALID.
GET /c21apiv2/publishings/{publishingId}devuelve el bloquedrmconactive: truey lossystems/encryption_modeesperados.- Reproductores de cada ecosistema descifran y reproducen correctamente la salida protegida:
| Ecosistema | Navegador / dispositivo | Manifest |
|---|---|---|
| Widevine | Chrome o Edge en escritorio | DASH o CMAF |
| PlayReady | Edge en Windows | DASH o CMAF |
| FairPlay | Safari en iOS o macOS | HLS / CMAF |
El dashboard del proveedor upstream registra una emisión de licencia por sesión y ecosistema.
FAQ
cbcs con los tres sistemas sirve a reproductores Widevine, PlayReady y FairPlay con los mismos segmentos. Mantén un segundo Destination cenc para Widevine y PlayReady solo si tu audiencia incluye dispositivos que no reproducen cbcs.validation_error. Causas habituales: tenant id incorrecto, credenciales mal escritas o endpoint SPEKE no accesible desde esta instancia de C21 Live Control. Corrige el campo con updateDrmProvider (o Edit en la UI) y vuelve a ejecutar Validate.updateDrmProvider; el cambio aplica a las siguientes adquisiciones de clave. Los Live streams en emisión siguen funcionando con las claves que ya tienen hasta la próxima rotación.Publicar en almacenamiento de objetos (S3, Azure Blob)
Publica la salida HLS / TS, DASH o CMAF de un Live stream directamente en un bucket compatible S3 o en un container de Azure Blob, con un CDN por delante.
Programar una emisión semanal recurrente
Dispara un Live stream con una cadencia fija — desde el Scheduler, desde la API o ambas.