Licencias
Cada host C21 Streaming lleva un fichero de licencia vinculado a su dirección MAC. El fichero declara qué productos y funcionalidades puede ejecutar. Esta página es la referencia canónica de qué licencias existen, qué desbloquea cada una, dónde se aplica y qué ve un operador cuando falta alguna.
Los System Administrator suben el fichero de licencia mediante el formulario que aparece automáticamente cuando una instancia carece de licencia válida — por ejemplo, en el primer arranque o tras la expiración. Una vez que la licencia es válida y un operador está dentro, no hay panel in-session para inspeccionar ni reemplazar la licencia desde la UI; la sustitución requiere invalidar la instancia (o reiniciar el servicio tras la expiración) y subir un fichero nuevo a través del flujo de login. Los Operators no tienen superficie de administración de licencias — pueden ver los efectos visibles (una pestaña oculta, un tipo de Channel rechazado) pero no pueden cambiar lo que está licenciado.
Qué es una licencia
Una licencia tiene un nombre (el producto o feature que concede), una expiración, una quantity opcional (usada por licencias que miden un recurso, como el número de Channels que un encoder puede correr) y un key firmado. Las licencias se vinculan a la MAC del host; un fichero de un host no valida en otro.
Un único fichero de licencia suele llevar varias licencias — una para el producto C21 Live Control, una para C21 Live Editor, una para el add-on C21 Live Deploy, etc. El Control y el Encoder se licencian por separado incluso cuando corren en la misma máquina: el Encoder aplica su propio conjunto (encoder channels, multi publishing points, UDP recovery) y el Control aplica el suyo (Control / Editor / Deploy).
Dónde viven las licencias
Las licencias se instalan como un único fichero en el host. El formulario de subida es la pantalla de licencia que aparece automáticamente cuando el LMS detecta que no hay licencia válida (user.validLicense === false); en el resto de momentos no hay panel UI para tocar el fichero. Las dos rutas reales para sustituir el fichero son: (a) esperar a que el LMS reporte licencia inválida (expiración o reinicio sin licencia) para que aparezca el formulario; o (b) usar el endpoint API installLicense descrito abajo. La ruta en el sistema de ficheros es un detalle de implementación no expuesto en el producto.
Licencias de C21 Live Control
El proceso de C21 Live Control (LMS) comprueba estas licencias al arrancar y periódicamente mientras corre.
| Licencia | ¿Obligatoria? | Significado de Quantity | Qué desbloquea |
|---|---|---|---|
| C21LiveControl | Sí | — (solo presencia) | El producto Control: la UI de gestión, la superficie API y el Scheduler. Sin ella, el proceso no arranca. |
| C21LiveEditor | Sí para el producto independiente Live Editor; opcional en Live Control | — (solo presencia) | La pestaña Recordings Editor — la superficie de producto para cortar clips de grabaciones finalizadas y exportarlos (download, FTP, S3, SFTP, MediaCopilot). En una instalación de Live Control, la pestaña Editor queda oculta cuando falta la licencia y la integración MediaCopilot no puede invocarse desde la UI. |
| C21LiveDeploy | No (opt-in) | — (solo presencia) | La integración con cuentas C21 Live Cloud: el tipo de Channel Stream – C21 Live Cloud, sus Destinations cloud equivalentes y el aprovisionamiento de carpetas cloud asociadas. |
Qué ocurre cuando falta una licencia de Control
- C21LiveControl ausente. El proceso Live Control no arranca; la UI de gestión queda inaccesible. Si la licencia expira mientras el proceso corre, el chequeo periódico (en el main loop) salta y el proceso termina.
- C21LiveEditor ausente en una instalación de Live Control. Live Control arranca igual. La pestaña Editor queda oculta en Recordings (verificado en
RecordingsBase.vue— la pestaña solo se añade cuandohasEditorLicensees true) y las integraciones que dependen de ella (notablemente MediaCopilot) no pueden invocarse desde la UI. - C21LiveDeploy ausente. Live Control arranca igual. La página de integración C21 Live Cloud es accesible, pero las variantes cloud de Channel y Destination no son seleccionables en los editores. Consulta C21 Live Cloud.
Licencias de C21 Live Encoder
El proceso C21 Live Encoder comprueba estas licencias al arrancar. El encoder no arranca sin una licencia C21LiveEncoder válida; el resto son features opt-in.
| Licencia | ¿Obligatoria? | Significado de Quantity | Qué desbloquea |
|---|---|---|---|
| C21LiveEncoder | Sí | Número de Channels de encoding concurrentes | El propio proceso encoder. La Quantity aparece en el Control como Device.licensed.channels en la página de detalle del Device. |
| Multi Publishing Points | No (por defecto 1) | Máximo de Destinations activos a la vez por Channel | Cuando falta, cada Channel queda limitado a un solo Destination activo. Un Destination group puede contener hasta 20 miembros; esta licencia determina cuántos están activos a la vez. La Quantity aparece en el Control como Device.licensed.publishing_points. |
| UDP Recovery | No (opt-in) | Se usa como booleano — UDP-R se activa si la licencia existe | Activa el path de contribución UDP-R en el encoder. Los Channels Stream – C21 Live Cloud que usan transporte UDP-R no pueden correr en un encoder sin esta licencia. |
Qué ocurre cuando falta una licencia de Encoder
- C21LiveEncoder ausente. El proceso encoder no arranca y registra "Incorrect License". El Control no puede despachar broadcasts a ese encoder.
- Multi Publishing Points ausente. El encoder corre pero limita cada Channel a un único Destination simultáneo. El tope aparece como
Device.licensed.publishing_points = 1en el detalle del Device. - UDP Recovery ausente. El encoder corre pero rechaza Channels de contribución UDP-R al arrancarlos.
Gates por feature a nivel aplicación
Más allá de las licencias a nivel producto, dos features se filtran en la capa de aplicación:
| Feature | Licencia | Dónde se aplica | Qué ocurre sin ella |
|---|---|---|---|
| Tipo de Channel Youtube Live | C21LiveYouTube | CRUD de Channel (POST / PUT en /c21apiv2/channels) | La opción Youtube Live queda oculta en el selector de tipo de Channel (ChannelEditor.vue comprueba el flag de licencia). Las llamadas API que crean o convierten un Channel en Youtube Live devuelven APIf807. Los Channels existentes siguen funcionando hasta que se editen. |
| Integración con cuentas C21 Live Cloud | C21LiveDeploy | Arranque del LMS Control | El tipo de Channel Stream – C21 Live Cloud y sus Destinations cloud equivalentes no se aprovisionan. Consulta C21 Live Cloud. |
Quantities por Device expuestas en la API
Los campos Quantity de las licencias del encoder se exponen en el Control mediante Device.licensed:
| Campo API | Licencia origen | Significado |
|---|---|---|
Device.licensed.channels | C21LiveEncoder | Channels de encoding concurrentes máximos en este Device. |
Device.licensed.publishing_points | Multi Publishing Points | Máximo de Destinations simultáneos por Channel. |
Device.licensed.outputs | (Derivado de las licencias de encoder) | Máximo de salidas simultáneas que el encoder puede emitir. |
Para el contrato completo de Device consulta Devices.
Formato del fichero de licencia
El fichero de licencia es INI. Cada licencia es una sección [Product] cuyo nombre coincide con el nombre canónico (por ejemplo [C21LiveControl], [C21LiveEncoder], [Multi Publishing Points]). Cada sección lleva exactamente tres campos:
| Campo | Notas |
|---|---|
Expiration | Fecha de expiración. El valor centinela 31-12-3000 lo renderiza la API como Unlimited. |
Quantity | Entero. Para licencias medidas (C21LiveEncoder channels, Multi Publishing Points) es el tope. Para las solo-presencia (C21LiveControl, C21LiveEditor, C21LiveDeploy, C21LiveYouTube) el valor se ignora. |
Key | Payload firmado. El host valida la firma contra su MAC. |
El mismo formato se sube por el formulario de licencia (pantalla automática cuando la instancia carece de licencia válida) y por el endpoint API descrito abajo.
Administrar licencias
Cómo lo expone el API
getSystemLicenses devuelve cada licencia instalada con su producto, expiración (renderizada como Unlimited cuando el valor real es 31-12-3000) y quantity. El Key se guarda en disco y no se devuelve en la respuesta.
Desde la API
| Operación | Método + ruta | operationId | Rol requerido |
|---|---|---|---|
| Listar licencias instaladas | GET /c21apiv2/system/licenses | getSystemLicenses | System Administrator |
| Instalar / reemplazar el fichero | POST /c21apiv2/system/licenses | installLicense | System Administrator |
| Comprobación rápida de validez | GET /c21apiv2/crud/license | — | Cualquier usuario autenticado |
installLicenseacepta un cuerpomultipart/form-datacuya partefilees el INI. El handler lee cada sección[Product]y persisteExpiration,QuantityyKey. Cuando el fichero no contiene ninguna sección válida, la respuesta esSYSF008.GET /c21apiv2/crud/licensedevuelve{ valid: true | false }según siC21LiveControlestá presente y activa. La UI usa este probe para renderizar el banner "This section is not available without a product license." en On Air y páginas similares. Los verbos de mutación (POST/PUT/DELETE) sobre esta ruta están explícitamente bloqueados conMethod not allowed.
Para lecturas por Device (multiplexador legacy) consulta POST /c21apiv2/system/command con action: "getLicenses" y action: "uploadLicense" documentadas en API → System commands.
Tratamiento de expiraciones
- C21 Live Control. El proceso revisa
C21LiveControl(oC21LiveEditoren una instalación standalone de Editor) en su main loop. Cuando el fichero deja de ser válido, el proceso registra "License is not valid or has expired" y termina. La UI queda inaccesible poco después. - C21 Live Encoder. El encoder lee su licencia al arrancar. Una expiración a mitad de ejecución de la licencia de encoder no se reevalúa hasta el siguiente reinicio, pero el resto de licencias del host (Multi Publishing Points, UDP Recovery) se leen por el mismo path y aplican en el siguiente reinicio del encoder.
- Render de expiración.
Expiration: 31-12-3000se renderiza como Unlimited en la pestaña License y en la respuesta degetSystemLicenses. El producto no muestra bandas de color de expiración ni avisos graduados — la pestaña License muestra la fecha y el centinelaUnlimited, y el chequeo en runtime es binario (válido / no válido).
FAQ
C21LiveControl. Cuando falta C21LiveEditor, la pestaña Recordings → Editor queda oculta y el flujo de exportación MediaCopilot no puede invocarse desde la UI, pero el resto de funcionalidad funciona.[Product].Device.licensed.channels — esa es la Quantity de la licencia C21LiveEncoder del Encoder. Device.licensed.publishing_points es la Quantity de Multi Publishing Points.C21LiveYouTube. El tipo de Channel sigue en el esquema por estabilidad de contrato, pero las mutaciones (crear / convertir) se rechazan con APIf807. Los Channels existentes de tipo Youtube Live siguen funcionando hasta que los edites.