How Tos

Proteger un Live stream con multi-DRM

Registra un DRM provider y asócialo a un Publishing — desde la UI, desde la API o ambas.

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 AXINOM y EZDRM. 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, CMAF o HLS / TS en 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 UICampo APINotas
NamenameNombre visible (≤ 100 caracteres).
Provider typeprovider_typeUno de los valores del catálogo servidor (hoy AXINOM, EZDRM).
SPEKE URLspeke_urlEndpoint SPEKE principal.
SPEKE backup URLspeke_url_backupRespaldo opcional.
Tenant idtenant_idObligatorio cuando el Provider type elegido declara requires_tenant_id = true.
CredentialscredentialsSobre específico del proveedor. Solo escritura — GET devuelve el centinela redactado.
EnabledenabledSi 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 UICampo APINotas
Activedrm.activeToggle que activa el DRM en este Destination.
Providerdrm.provider_idSelector sobre los proveedores registrados (solo aparecen los habilitados).
Content iddrm.contentidIdentificador de contenido esperado por el proveedor.
Systemsdrm.systems[]Cualquier combinación de Widevine, PlayReady, FairPlay.
Encryption modedrm.encryption_modeUno 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ónMétodo + rutaoperationId
Listar proveedoresGET /c21apiv2/settings/integrations/drmprovidersgetAllDrmProviders
Crear un proveedorPOST /c21apiv2/settings/integrations/drmprovidersaddDrmProvider
Validar un proveedorPOST /c21apiv2/settings/integrations/drmproviders/{providerId}/validatevalidateDrmProvider
Actualizar un proveedorPUT /c21apiv2/settings/integrations/drmproviders/{providerId}updateDrmProvider
Borrar un proveedorDELETE /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óndrm.systemsdrm.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 bloque drm con active: true y los systems / encryption_mode esperados.
  • Reproductores de cada ecosistema descifran y reproducen correctamente la salida protegida:
EcosistemaNavegador / dispositivoManifest
WidevineChrome o Edge en escritorioDASH o CMAF
PlayReadyEdge en WindowsDASH o CMAF
FairPlaySafari en iOS o macOSHLS / CMAF

El dashboard del proveedor upstream registra una emisión de licencia por sesión y ecosistema.

FAQ

Copyright © 2026