Destinations

What is a Destination
Destinations is the section of the left rail that catalogues outbound endpoints. The underlying entity is a Destination — the object the API manipulates and the editor edits. The two terms appear together: the list toolbar action is "Add destination", and the editor edits a Destination.
A Destination is independent from the Live stream that consumes it: the same Destination can be reused by many Live streams, and a Live stream can publish to many Destinations — directly or through a Destination group.
How it works
Define
Click Add destination and pick the Destination type. The rest of the form depends on the chosen type — endpoint URL or multicast group, credentials, segment settings for HLS / DASH / CMAF, and so on.
Bind
Bind the Destination to a Live stream from the Live streams editor — pick it under the Destination field. Alternatively, group several Destinations into a Destination group and bind the group.
Monitor
The Destination's runtime state surfaces on the bound Live stream's On air row as a coloured arrow on the Destination entrypoint; the per-rendition status is shown as one indicator per rung of the bound Encoding group.
Destination types
Publishing.type exposes a fixed enum. The canonical API labels are:
| Type | Notes |
|---|---|
| HLS / TS | HLS manifest with MPEG-TS segments. |
| DASH | DASH manifest. |
| CMAF | CMAF manifest for unified DASH / HLS delivery. |
| RTMP | RTMP push to any RTMP ingest URL. |
| Enhanced RTMP | Enhanced-RTMP push for multitrack contribution. |
| SRT | SRT push (caller) to a partner SRT listener. |
| STREAM | MPEG-TS over UDP or RTP, used for legacy multicast distribution. |
| SDIOUT | Baseband SDI feed for OB or master control. |
| Record | Captures the broadcast to disk and produces a Recording. |
DRM is not a separate Destination type — it is the drm block on a DASH or CMAF Destination (see DRM on a Destination below).
CDN and delivery providers
The settings_common.provider field on a Destination names the CDN or delivery platform the destination targets. The provider is informational for some types and operationally meaningful for others (notably Millicast, where the provider gates the rtmp_millicast_buffer_millisec hint; and C21 Live Cloud, where the provider together with the bound account binds the Destination to a registered C21 Live Cloud account).
The full provider catalogue is exposed by GET /c21apiv2/publishing/providers (operationId getPublishingProviders); the UI's per-type compatibility matrix lives in publishingProviders in the Vue UI's app store, expressed as notFor exclusion lists.
Provider (provider value) | Intent | Compatible Destination types |
|---|---|---|
| Akamai | Akamai CDN delivery. | DASH, HLS / TS, CMAF, RTMP, SRT, STREAM. |
| C21 Live Cloud | Cires21's managed cloud platform. The Destination is bound to a registered C21 Live Cloud account. | DASH, HLS / TS, CMAF, RTMP, SRT, STREAM. |
| Generic CDN | Any CDN that is not listed by name. The catch-all entry. | Every Destination type. |
| Millicast (Millicast WebRTC CDN) | Millicast WebRTC fanout for sub-second delivery. The Destination's rtmp_millicast_buffer_millisec hint is honoured only when the provider is Millicast. | RTMP, Enhanced RTMP. |
| TransparentCDN | TransparentCDN delivery. | DASH, HLS / TS, CMAF, RTMP, SRT, STREAM. |
| Twitch | Twitch ingest. RTMP is the canonical ingest. | RTMP, Enhanced RTMP. |
| Unified Streaming (Interface-1) | Unified Streaming origin via the Interface-1 contract. | CMAF. |
| Youtube | YouTube Live ingest. RTMP is the canonical ingest. | HLS / TS, RTMP, SRT, STREAM. |
| MediaCopilot | HLS contribution from a Live stream to a MediaCopilot Live Entrypoint. Requires a MediaCopilot account contracted through Cires21. See Contribute a live signal to MediaCopilot Live. | HLS / TS only. |
Per-type configuration
The rest of this section walks through each Destination type, the settings_* blocks that apply, and the DRM / backup / TTL interactions.
HLS / TS
HLS manifest with MPEG-TS segments.
- Compatible providers: every provider that does not exclude HLS / TS — in practice Akamai, C21 Live Cloud, Generic CDN, TransparentCDN, Youtube, MediaCopilot.
settings_extra.hls:segments(count),duration(segment duration),ad_duration,max_ad_duration,absolute_path,keep_dvr(honoured only on CMAF; ignored here).- AES-128 static-key encryption:
settings_extra.aes.{active, key, iv, key_url}enables clear-key AES-128. - DRM: not supported on HLS / TS in v1 — use CMAF for protected delivery on the Apple ecosystem.
- Backup URLs: an optional secondary path is configurable through
settings_common.urls.backup_server/settings_common.urls.backupwhen the receiving CDN supports dual ingest.
DASH
DASH manifest.
- Compatible providers: Akamai, C21 Live Cloud, Generic CDN, TransparentCDN.
settings_extra.dash:min_buffer_time(seconds),time_shift_buffer_depth(seconds),minimum_update_period(seconds).- DRM: supported via the
drmblock. The typical combination issystems = ["Widevine", "PlayReady"]withencryption_mode = cenc.
CMAF
CMAF manifest for unified DASH / HLS delivery.
- Compatible providers: Akamai, C21 Live Cloud, Generic CDN, TransparentCDN, Unified Streaming (Interface-1).
settings_extra.hls:segments,duration,absolute_path,keep_dvr(preserves the previous DVR window across restarts; CMAF-only).- DRM: supported via the
drmblock. CMAF is the only type that supports FairPlay (systems = ["FairPlay"]withencryption_mode = cbcs, or a Widevine + PlayReady CMAF incencfor the non-Apple ecosystem).
RTMP
RTMP push to an external ingest URL.
- Compatible providers: Akamai, C21 Live Cloud, Generic CDN, Millicast, TransparentCDN, Twitch, Youtube.
settings_common:stream(stream name),urls.primary, optionalurls.backup,username,password.- Stream backup name:
backup_stream_nameplususe_stream_backup_name = true. When the flag is set, the serializer stores the pair as<stream>#<backup>insidesettings_common.stream; reads split the two halves automatically. - Millicast hint:
rtmp_millicast_buffer_millisecis honoured only whenprovider = Millicast. - DRM: not applicable.
Enhanced RTMP
Enhanced-RTMP push for multitrack contribution.
- Compatible providers: Generic CDN, Millicast, Twitch.
settings_common: same shape as RTMP.- DRM: not applicable.
For the sub-second end-to-end flow against Dolby Millicast — Real time encoding plus RTMP / Enhanced RTMP contribution — see Real Time streaming to Dolby Millicast.
SRT
SRT push (caller) to a partner SRT listener.
- Compatible providers: every provider that does not exclude SRT — Akamai, C21 Live Cloud, Generic CDN, TransparentCDN, Youtube.
settings_common:urls.primary, optionalurls.backup.settings_extra.srt:latency(milliseconds),encryption(AES-128,AES-192orAES-256; the server stores the integer key byte length),passphrase. The passphrase is redacted to non–System Administrator bearer tokens — reads return***REDACTED***.- DRM: not applicable.
STREAM
MPEG-TS over UDP or RTP. The UI's publishingProtocols store exposes udp:// and rtp:// as the protocols a STREAM Destination accepts. A third protocol, udpr:// (UDP-R), is offered when the instance carries the C21LiveDeploy license.
- Compatible providers: every provider that does not exclude STREAM — Akamai, C21 Live Cloud, Generic CDN, TransparentCDN, Youtube.
settings_common:urls.primary, optionalurls.backup.ttl: integer 0–255, honoured only on this type.- DRM: not applicable.
SDIOUT
Baseband SDI feed routed to an encoder Device's SDI output card.
settings_sdiout:format(one of the standard SDI formats — NTSC, PAL, 1080p / 1080i / 720p families),encoder(FK to the Device that owns the SDI card),slot(SDI slot number on that Device),channels(number of audio channels on the output).- Providers: SDI is local routing; the CDN-provider matrix does not apply.
- DRM: not applicable.
Record
Captures the broadcast to disk and produces a Recording.
settings_recording.remotefolder: FK to a registered RemoteFolder.settings_recording.delete_after: retention in days. The encoder multiplies the value by 24 to derive the purge window in hours.- Providers: Record is local capture; the CDN-provider matrix does not apply.
- DRM: not applicable.
DRM on a Destination
DRM is not a separate Destination type; it is the drm block on a DASH or CMAF Destination. The block carries:
| Field | Notes |
|---|---|
active | Boolean. Enables protection. |
provider_id | FK to a validated DRM provider. See DRM workflow. |
contentid | ≤ 100 characters, unique per Destination. The identifier the upstream vendor expects on key requests. |
systems | Array of Widevine, PlayReady, FairPlay. |
encryption_mode | cenc or cbcs. Derived from systems by the server — any FairPlay member forces cbcs; otherwise cenc. Clients may omit it on write; the server recomputes the value. |
Two constraints come straight from the schema:
- HLS / TS does not support DRM in v1. Use CMAF instead for protected delivery on the Apple ecosystem.
- Interoperability policy:
FairPlaycannot be combined withWidevineorPlayReadyon the same Destination. Split into two Destinations — a CMAF /cbcs/ FairPlay Destination for Apple and a DASH or CMAF /cenc/ Widevine + PlayReady Destination for the rest.
For the end-to-end flow see DRM workflow; for the provider CRUD see DRM providers.
Backup URLs and stream backup name
Stream-pushing types (RTMP, Enhanced RTMP, SRT, STREAM, and HLS / TS / DASH / CMAF when fed to a dual-ingest origin) accept an optional secondary destination via settings_common.urls.backup_server and settings_common.urls.backup.
When the destination expects a secondary stream name, set backup_stream_name and use_stream_backup_name = true; the serializer stores the pair as <stream>#<backup> inside settings_common.stream and the API returns them split.
At runtime, the Operator can flip the per-Destination primary / backup state independently through runtimeTogglePublishings — see the Destinations tab in the runtime panel on On air. For destinations whose backup URL is empty (Record, SDIOUT, STREAM without backup), primary is the on/off toggle and backup is a no-op.
Playback URL
Optional field on the Destination where the operator can store the playback URL for that output. The product does not compute it — it is persisted verbatim from what the customer enters so it is on hand (to share with consumers, paste into a test player or reference from another integration). Persisted under settings_common.urls.player.
Common options
| Option | Notes |
|---|---|
| Name | Display name reused across the UI, API and logs. |
| Description | Optional free-text description. |
| Type | One of the Destination types listed above. |
| Provider | One of the values from getPublishingProviders. Compatibility against type is enforced by the matrix above. |
| Settings (common) | Stream name, primary / backup URLs, username / password — depending on the type. |
| Settings (extra) | Type-specific knobs grouped by family: hls, dash, srt, aes. |
| DRM | Optional block on a DASH / CMAF Destination. |
| TTL | IP TTL for UDP / RTP packets — meaningful only when type = STREAM. |
| Backup stream name | Secondary stream name; persisted alongside the primary stream name as described above. |
Credentials (stream keys, SRT passphrases, RTMP usernames and passwords, DRM provider credentials) are stored encrypted at rest. Operators only see masked values in the UI; full values are never returned by the API.
In the Destination editor the fields are visually grouped into two fieldsets: Basic data (Name, Type) and Destination configuration (Provider, Stream name, Primary server, Primary URL, Backup server, Username, Password). The Backup server, Username and Password fields render only for types that accept credentials.
Cross-links
- Destination groups for the bouquet semantics.
- Live streams overview for the binding from a Live stream to its Destination.
- C21 Live Cloud for the cloud delivery path.
- DRM workflow for the protected delivery path.
- On air for the runtime Destinations toggle.
- Licenses for the license that gates UDP-R on STREAM.
FAQ
runtimeTogglePublishings) lets the Operator turn the failing member off without stopping the broadcast.runtimeTogglePublishings), applying a logo (runtimeApplyLogo), a blackout (runtimeApplyBlackout), switching the source (runtimeApplySourceSwitch), setting an overlay text (setLivestreamText) and pushing metadata (runtimePushMetadata).