Installation

Licencias

Las licencias de producto que controlan C21 Live Control y C21 Live Encoder, cómo se instalan, dónde se administran y qué ocurre cuando una falta o expira.

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 QuantityQué desbloquea
C21LiveControl— (solo presencia)El producto Control: la UI de gestión, la superficie API y el Scheduler. Sin ella, el proceso no arranca.
C21LiveEditorSí 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.
C21LiveDeployNo (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 cuando hasEditorLicense es 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 QuantityQué desbloquea
C21LiveEncoderNúmero de Channels de encoding concurrentesEl propio proceso encoder. La Quantity aparece en el Control como Device.licensed.channels en la página de detalle del Device.
Multi Publishing PointsNo (por defecto 1)Máximo de Destinations activos a la vez por ChannelCuando 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 RecoveryNo (opt-in)Se usa como booleano — UDP-R se activa si la licencia existeActiva 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 = 1 en 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:

FeatureLicenciaDónde se aplicaQué ocurre sin ella
Tipo de Channel Youtube LiveC21LiveYouTubeCRUD 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 CloudC21LiveDeployArranque del LMS ControlEl 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 APILicencia origenSignificado
Device.licensed.channelsC21LiveEncoderChannels de encoding concurrentes máximos en este Device.
Device.licensed.publishing_pointsMulti Publishing PointsMá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:

CampoNotas
ExpirationFecha de expiración. El valor centinela 31-12-3000 lo renderiza la API como Unlimited.
QuantityEntero. Para licencias medidas (C21LiveEncoder channels, Multi Publishing Points) es el tope. Para las solo-presencia (C21LiveControl, C21LiveEditor, C21LiveDeploy, C21LiveYouTube) el valor se ignora.
KeyPayload 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ónMétodo + rutaoperationIdRol requerido
Listar licencias instaladasGET /c21apiv2/system/licensesgetSystemLicensesSystem Administrator
Instalar / reemplazar el ficheroPOST /c21apiv2/system/licensesinstallLicenseSystem Administrator
Comprobación rápida de validezGET /c21apiv2/crud/licenseCualquier usuario autenticado
  • installLicense acepta un cuerpo multipart/form-data cuya parte file es el INI. El handler lee cada sección [Product] y persiste Expiration, Quantity y Key. Cuando el fichero no contiene ninguna sección válida, la respuesta es SYSF008.
  • GET /c21apiv2/crud/license devuelve { valid: true | false } según si C21LiveControl está 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 con Method 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 (o C21LiveEditor en 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-3000 se renderiza como Unlimited en la pestaña License y en la respuesta de getSystemLicenses. El producto no muestra bandas de color de expiración ni avisos graduados — la pestaña License muestra la fecha y el centinela Unlimited, y el chequeo en runtime es binario (válido / no válido).

FAQ

Copyright © 2026