Real Time streaming to Dolby Millicast
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:
| Piece | Where | What it does |
|---|---|---|
| Real time encoding toggle | Live stream editor | Runs the broadcast on the encoder's sub-second contribution pipeline. |
| RTMP or Enhanced RTMP Destination | Configuration → Destinations | Pushes the encoded signal to the Millicast ingest. |
| Millicast WebRTC CDN provider | The Destination's Provider field | Applies 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,NDIorSRTChannels 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:
- Type — RTMP for a single-program push, or Enhanced RTMP for multitrack contribution (see the next section).
- Provider — Millicast 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/publishings — Publishing.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:
| Hop | What keeps it low |
|---|---|
| Contribution (source → encoder) | SDI / NDI / SRT input on the same site or a low-RTT link. |
| Encode | Real 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
Cross-links
- Destinations — the RTMP and Enhanced RTMP types and the provider catalogue.
- Live stream options — where the Real time encoding flag surfaces.
- On air — runtime health of the push.
Broadcast radio as video
Run a radio Channel as a Live stream where the visual track is a programmable still or short clip, the audio is always the live feed, and the visual can be swapped without interrupting the audio.
Protect a Live stream with multi-DRM
Register a DRM provider and attach it to a Publishing — through the UI, through the API, or both.