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, CMAF o HLS / TS 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
DASH,CMAFoHLS / TSen 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 |
|---|---|---|
| Active | drm.active | Toggle que activa el DRM en este Destination. |
| Provider | drm.provider_id | Selector sobre los proveedores registrados (solo aparecen los habilitados). |
| Content id | drm.contentid | Identificador de contenido esperado por el proveedor. |
| Systems | drm.systems[] | Cualquier combinación de Widevine, PlayReady, FairPlay. |
| Encryption mode | drm.encryption_mode | Uno de cenc o cbcs. |
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 Publishing DASH/CMAF/HLS 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 / HLS, cobertura Apple | ["FairPlay"] (o los tres) | cbcs |
Entrega universal cbcs | ["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
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.Emitir radio como vídeo
Emite un Channel de radio como un Live stream donde la pista visual es una imagen o clip corto programable, el audio es siempre el directo, y la imagen se puede sustituir sin interrumpir el audio.
Programar una emisión semanal recurrente
Dispara un Live stream con una cadencia fija — desde el Scheduler, desde la API o ambas.