Providers
Un DRM provider es el registro de catálogo de credenciales que conecta C21 Live Control con un servicio multi-DRM upstream. Cada registro declara una marca (provider_type), un endpoint SPEKE y las credenciales que la marca espera. Una vez registrado, el proveedor puede asociarse a un Destination mediante el bloque drm del Destination.
Esquema (DrmProvider)
| Etiqueta UI | Campo | Notas |
|---|---|---|
| Name | name | Nombre visible (≤ 100 caracteres). |
| Provider type | provider_type | Identificador de marca del catálogo servidor (hoy AXINOM, EZDRM). Determina el conjunto de campos de credencial que el formulario exige. La UI muestra los valores con casing humanizado (Axinom, EZDRM); el spec y la API esperan mayúsculas. |
| SPEKE URL | speke_url | Endpoint SPEKE principal. |
| SPEKE URL backup | speke_url_backup | Endpoint SPEKE de respaldo opcional. |
| Tenant ID | tenant_id | Obligatorio cuando la marca declara requires_tenant_id = true (por ejemplo AXINOM). |
| Credentials | credentials | Sobre específico del tipo de proveedor. Solo escritura — GET devuelve el valor centinela •••••••• para valores almacenados. Reenviar el sobre sin cambios en PUT preserva el blob almacenado. |
| Enabled | enabled | Si el proveedor es seleccionable por los Destinations. |
| Validation status | validation_status | Uno de UNKNOWN, VALID, INVALID. Vuelve a UNKNOWN tras cualquier cambio que afecte a la conectividad. |
| Last validation | validation_date | Timestamp del último viaje de validateDrmProvider. |
| Validation error | validation_error | Mensaje de error saneado de la última validación fallida. |
| Supported systems | supported_systems | Array expuesto por la marca. Un subconjunto de Widevine, PlayReady, FairPlay. El spec OpenAPI emite los valores en mayúsculas (WIDEVINE / PLAYREADY / FAIRPLAY); este documento y la UI usan TitleCase por legibilidad. |
Operaciones
| Acción | Método + ruta | operationId |
|---|---|---|
| Listar proveedores | GET /c21apiv2/settings/integrations/drmproviders | getAllDrmProviders |
| Leer un proveedor | GET /c21apiv2/settings/integrations/drmproviders/{providerId} | getDrmProviderById |
| Registrar un proveedor | POST /c21apiv2/settings/integrations/drmproviders | addDrmProvider |
| Actualizar un proveedor | PUT /c21apiv2/settings/integrations/drmproviders/{providerId} | updateDrmProvider |
| Borrar un proveedor | DELETE /c21apiv2/settings/integrations/drmproviders/{providerId} | deleteDrmProvider |
| Validar un proveedor | POST /c21apiv2/settings/integrations/drmproviders/{providerId}/validate | validateDrmProvider |
Cada operación requiere el rol System Administrator.
Registrar un proveedor
Abre el formulario
Abre Integrations → DRM → Providers → Add provider.
Rellena los campos
Establece Name, Provider type, SPEKE URL, Tenant ID opcional y el sobre Credentials específico de la marca. Deja Enabled activo para operación normal.
Guarda
Al enviar se llama a addDrmProvider. El sobre de credenciales se cifra en el servidor (AES-256-CBC, con clave derivada vía PBKDF2-SHA256) y no se devuelve más; has_credentials se pone a true en la fila.
Valida
Ejecuta la acción Validate. validateDrmProvider hace un viaje de ida y vuelta de las credenciales almacenadas contra el servicio SPEKE upstream y actualiza validation_status. Una validación fallida expone un error saneado en validation_error; corrige las credenciales con un update y vuelve a validar.
Editar y borrar
updateDrmProvider es una actualización parcial. Reenviar el sobre de credenciales con el valor centinela •••••••• preserva el blob almacenado; enviar cualquier campo con un valor real re-cifra el sobre completo.
deleteDrmProvider elimina el proveedor. Los Destinations que referenciaban el proveedor borrado en drm.provider_id pierden la referencia y fallan la validación al arrancar hasta que se apunten a otro proveedor.
Asociar un proveedor a un Destination
Una vez registrado un proveedor y con VALID, asócialo a cada Destination protegido mediante el bloque drm (consulta Destinations):
{
"drm": {
"active": true,
"provider_id": <id del proveedor>,
"contentid": "<identificador de contenido>",
"systems": ["Widevine", "PlayReady"]
}
}
encryption_mode se omite porque el servidor lo deriva de systems (sin FairPlay → cenc). Si se envía, el servidor lo recalcula igualmente.
Un Destination sin DRM configurado emite en claro.
FAQ
AXINOM y EZDRM. El conjunto lo dirige el servidor y pueden añadirse marcas adicionales sin romper el contrato de la API.validation_status se restablece a UNKNOWN tras cualquier cambio que afecte a la conectividad (SPEKE URL, tenant id, credenciales). Ejecuta Validate para validar las credenciales contra el servicio upstream; una llamada exitosa mueve el estado a VALID.