How Tos

Real Time streaming to Dolby Millicast

Broadcast with sub-second, end-to-end latency — Real time encoding on the Live stream, RTMP or Enhanced RTMP contribution, and Dolby Millicast WebRTC distribution.

Take a live broadcast below 500 ms of glass-to-glass latency: C21 Live Encoder runs the broadcast on its Real Time encoding pipeline and contributes it over RTMP — or Enhanced RTMP for multitrack scenarios — to Dolby Millicast, whose WebRTC CDN fans it out to viewers with sub-second delivery. The combination fits real-time interactivity: live events, sports, online betting and auctions.

Three pieces make up the flow, all configured from C21 Live Control:

PieceWhereWhat it does
Real time encoding toggleLive stream editorRuns the broadcast on the encoder's sub-second contribution pipeline.
RTMP or Enhanced RTMP DestinationConfiguration → DestinationsPushes the encoded signal to the Millicast ingest.
Millicast WebRTC CDN providerThe Destination's Provider fieldApplies the Millicast-specific delivery behaviour (RTMP buffer hint).

Before you start

  • A Dolby Millicast account with a publish token: the Millicast dashboard supplies the RTMP publish URL and the stream name / token pair the Destination needs.
  • A low-latency friendly input — SDI, NDI or SRT Channels keep the contribution side of the latency budget tight.
  • An Encoding with H.264 + AAC — the safe baseline for Millicast WebRTC playback across browsers and devices.
  • Network headroom from the encoder host to the Millicast ingest: sustained upload at the Encoding's bitrate, low jitter.

Via UI

Create the Millicast Destination

Navigate: Configuration → Destinations → Add destination. Set:

  • TypeRTMP for a single-program push, or Enhanced RTMP for multitrack contribution (see the next section).
  • ProviderMillicast WebRTC CDN.
  • URL / Stream name — the RTMP publish endpoint and stream name from your Millicast dashboard (the token travels in the stream name, as Millicast's RTMP ingest expects).

On an RTMP Destination with the Millicast provider, the editor exposes the RTMP Buffer field (in milliseconds, default 200) — the client-side buffer hint Millicast honours on delivery. Lower it to shave latency; raise it if viewers on poor networks see stalls.

Bind the Destination to the Live stream

Add the Destination (or a Destination group holding it) to the Live stream that will go real-time. See Destinations.

Enable Real time encoding

Open the Live stream in the editor and switch on Real time encoding in the Options column. The flag (real_time_encoding) is persisted on the Live stream and shows as Enabled on the Live stream's detail panel.

Start and verify

Start the Live stream. In the Millicast dashboard, open the stream's hosted viewer: the feed plays with sub-second delay. On the On air row, the Destination indicator reflects the push health.

Enhanced RTMP — multitrack contribution

Where classic RTMP carries one video and one audio program, Enhanced RTMP extends the protocol to publish multitrack outputs — multiple audio tracks and modern codecs — in a single session. Cires21 validated the implementation against Dolby Millicast, so the pairing is operational, not just spec-compatible.

Operational differences from classic RTMP:

  • Adaptive. Enhanced RTMP is one of the adaptive Destination types: when the Live stream carries multiple renditions, all of them are published (classic RTMP emits only the highest quality).
  • Multi-audio. The Live stream's mapped audio tracks travel in the same session — no parallel Destination per language.
  • Engage at start. An Enhanced RTMP Destination added to a Destination group while the broadcast is on air engages on the next start, not at runtime (the runtime toggle returns 409 — see Destination groups).
  • RTMP Buffer. The RTMP Buffer hint is honoured on the classic RTMP type only.

Via API

Create the Destination with POST /c21apiv2/crud/publishingsPublishing.type takes "RTMP" or "Enhanced RTMP" (the legacy alias ERTMP is accepted on write and normalized to Enhanced RTMP on read):

curl -X POST "https://<your-host>/c21apiv2/crud/publishings" \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Millicast-RealTime",
    "type": "Enhanced RTMP",
    "settings_common": {
      "provider": "Millicast",
      "urls": { "primary": "rtmp://<millicast-ingest>/v2/pub" },
      "stream": "<streamName>?token=<publishToken>"
    }
  }'

For a classic RTMP Destination, settings_extra.rtmp_millicast_buffer_millisec carries the buffer hint (honoured only when provider = Millicast). The Real time encoding flag is part of the Live stream's configuration — set it from the Live stream editor; then start the Live stream as usual (startLivestream).

Latency budget

Sub-500 ms end-to-end assumes every hop is tuned:

HopWhat keeps it low
Contribution (source → encoder)SDI / NDI / SRT input on the same site or a low-RTT link.
EncodeReal time encoding enabled on the Live stream.
Ingest (encoder → Millicast)Stable upload, geographically close Millicast ingest.
Distribution (Millicast → viewer)WebRTC delivery — managed by Millicast; the RTMP Buffer hint trades stability for latency on the ingest side.

FAQ

Copyright © 2026