Installation

Licenses

The product licenses that gate C21 Live Control and C21 Live Encoder, how they are installed, where they are administered, and what happens when one is missing or expires.

Every C21 Streaming host carries a license file keyed to its MAC address. The file declares which products and features the host is allowed to run. This page is the canonical reference for which licenses exist, what each one unlocks, where it is enforced, and what an operator sees when one is missing.

System Administrators upload the license file through the license form that surfaces automatically when an instance carries no valid license — for example, on first boot or after expiration. Once a license is valid and an operator is signed in, there is no in-session UI panel to inspect or replace the license; replacement requires invalidating the instance (or restarting the service after expiration) and uploading a new file through the login flow. Operators have no license-administration surface — they may still see the user-facing effects (a hidden tab, a rejected channel type) but cannot change what is licensed.

What licenses are

A license has a name (the product or feature it grants), an expiration, an optional quantity (used by licenses that meter a resource, such as the number of channels an encoder may run) and a signed key. Licenses are bound to the host's MAC address; a license file from one host will not validate on another.

A single license file usually carries several licenses — one for the C21 Live Control product, one for the C21 Live Editor, one for the C21 Live Deploy add-on, and so on. The Control and the Encoder are licensed separately even when they run on the same machine: the Encoder enforces its own license set (encoder channels, multi publishing points, UDP recovery) and the Control enforces its own (Control / Editor / Deploy).

Where licenses live

Licenses are installed as a single file on the host. The upload form is the license screen that surfaces automatically when the LMS detects no valid license (user.validLicense === false); at any other time there is no UI panel to touch the file. The two real paths to replace the file are: (a) wait for the LMS to report an invalid license (expiration or a restart with no license) so the form surfaces; or (b) use the installLicense API endpoint described below. The file-system location is an implementation detail not exposed in the product.

C21 Live Control licenses

The C21 Live Control process (LMS) checks these licenses on startup and again periodically while it runs.

LicenseRequired?Quantity meaningWhat it unlocks
C21LiveControlYes— (presence-only)The Control product itself: the management UI, the API surface and the Scheduler. Without it, the Live Control process refuses to start.
C21LiveEditorYes for the standalone Live Editor product; optional on Live Control— (presence-only)The Recordings Editor tab — the in-product surface for cutting clips from finished Recordings and exporting them (download, FTP, S3, SFTP, MediaCopilot). On a Live Control install, the Editor tab is hidden when the license is absent and the MediaCopilot integration cannot be invoked from the UI.
C21LiveDeployNo (opt-in)— (presence-only)The C21 Live Cloud account integration: the Stream – C21 Live Cloud Channel type, its matching cloud Destinations and the related cloud-folder provisioning.

What happens when a Control license is missing

  • C21LiveControl missing. The Live Control process refuses to start; the management UI is unreachable. If the license expires while the process is running, the periodic recheck (which runs on the main loop) trips and the process exits.
  • C21LiveEditor missing on a Live Control install. The Live Control still starts. The Editor tab is hidden from Recordings (verified in RecordingsBase.vue — the tab is only added when hasEditorLicense is true) and the integrations that depend on it (notably MediaCopilot) cannot be invoked from the UI.
  • C21LiveDeploy missing. The Live Control still starts. The C21 Live Cloud integration page is reachable, but the cloud Channel and Destination variants are not selectable in the editors. See C21 Live Cloud for the integration page.

C21 Live Encoder licenses

The C21 Live Encoder process checks these licenses on startup. The encoder will not run without a valid C21LiveEncoder license; the other licenses are opt-in features.

LicenseRequired?Quantity meaningWhat it unlocks
C21LiveEncoderYesNumber of concurrent encoding channels the encoder may runThe encoder process itself. The Quantity surfaces on the Control side as Device.licensed.channels on the Device's detail page.
Multi Publishing PointsNo (defaults to 1)Max Destinations active at the same time per channelWhen absent, every channel is capped to a single active Destination. A Destination group can still hold up to 20 members; this license governs how many are active at once. The Quantity surfaces on the Control side as Device.licensed.publishing_points.
UDP RecoveryNo (opt-in)Used as a boolean — UDP-R is enabled when the license is presentEnables the UDP-R contribution path on the encoder. Stream – C21 Live Cloud Channels using UDP-R transport cannot run on an encoder without this license.

What happens when an Encoder license is missing

  • C21LiveEncoder missing. The encoder process refuses to start and logs "Incorrect License". The Control side cannot dispatch broadcasts to that encoder.
  • Multi Publishing Points missing. The encoder runs but caps every channel to a single Destination. The cap surfaces as Device.licensed.publishing_points = 1 on the Device detail.
  • UDP Recovery missing. The encoder runs but rejects UDP-R contribution Channels at start time.

Per-feature license gates

Beyond the product-level licenses above, two features are gated at the application layer:

FeatureLicense requiredWhere the gate sitsWhat happens without it
Youtube Live Channel typeC21LiveYouTubeChannel CRUD (POST / PUT on /c21apiv2/channels)The Youtube Live option is hidden from the Channel type picker in the UI (ChannelEditor.vue checks the license flag). API calls that create or convert a Channel into Youtube Live fail with APIf807. Existing Youtube Live Channels keep working until edited.
C21 Live Cloud account integrationC21LiveDeployLMS Control startupThe Stream – C21 Live Cloud Channel type and its matching cloud Destinations are not provisioned. See C21 Live Cloud.

Per-device quantities exposed through the API

The Quantity fields of the encoder-side licenses surface on the Control through Device.licensed:

API fieldSource licenseMeaning
Device.licensed.channelsC21LiveEncoderMaximum concurrent encoding channels on this Device.
Device.licensed.publishing_pointsMulti Publishing PointsMaximum simultaneous Destinations per channel.
Device.licensed.outputs(Derived from encoder licenses)Maximum simultaneous outputs the encoder may emit.

For the full Device contract see Devices.

License file format

The license file is an INI file. Each license is one [Product] section whose name matches the canonical license name (for example [C21LiveControl], [C21LiveEncoder], [Multi Publishing Points]). Each section carries exactly three fields:

FieldNotes
ExpirationDate the license expires. The sentinel value 31-12-3000 is rendered by the API as Unlimited.
QuantityInteger. For metered licenses (C21LiveEncoder channels, Multi Publishing Points) this is the cap. For presence-only licenses (C21LiveControl, C21LiveEditor, C21LiveDeploy, C21LiveYouTube) the value is ignored.
KeySigned payload. The host validates the signature against its MAC address.

The same file format is uploaded through the license form (the screen that surfaces automatically when the instance has no valid license) and through the API endpoint described below.

Administering licenses

How the API exposes it

getSystemLicenses returns each installed license with its product name, expiration (rendered as Unlimited when the underlying value is 31-12-3000) and quantity. The Key is stored on disk and is not returned by the API.

From the API

OperationMethod + pathoperationIdRequired role
List installed licensesGET /c21apiv2/system/licensesgetSystemLicensesSystem Administrator
Install / replace the license filePOST /c21apiv2/system/licensesinstallLicenseSystem Administrator
License-validity probeGET /c21apiv2/crud/licenseAny authenticated user
  • installLicense accepts a multipart/form-data body whose file part is the INI license file. The handler reads each [Product] section and persists Expiration, Quantity and Key. When the file contains zero valid product sections, the response is SYSF008.
  • GET /c21apiv2/crud/license returns { valid: true | false } based on whether C21LiveControl is present and active. The UI uses this probe to render the "This section is not available without a product license." banner on On Air and similar gated pages. Mutating verbs (POST / PUT / DELETE) on this path are explicitly blocked with Method not allowed.

For per-device license readouts (legacy multiplexer) see POST /c21apiv2/system/command with action: "getLicenses" and action: "uploadLicense" documented under API → System commands.

Expiration handling

  • C21 Live Control. The process re-checks C21LiveControl (or C21LiveEditor on a standalone Editor install) on its main loop. When the license file is no longer valid, the process logs "License is not valid or has expired" and exits. The UI becomes unreachable shortly after.
  • C21 Live Encoder. The encoder reads its license on startup. A mid-run expiration of the encoder license is not re-evaluated until the next restart, but the host's other licenses (Multi Publishing Points, UDP Recovery) are read on the same path so they take effect on the next encoder restart.
  • License rendering. Expiration: 31-12-3000 is rendered as Unlimited in the License tab and in the getSystemLicenses response. The product does not render expiration colour bands or graded warnings — the License tab shows the date and the Unlimited sentinel, and the runtime check is binary (valid / not valid).

FAQ

Copyright © 2026