How Tos

Ingest a YouTube Live broadcast

Bring a public YouTube Live broadcast on air as the source of a Live stream.

Available in: UI · API

Use this how-to to ingest a publicly-available YouTube Live broadcast as the source of a Live stream. The encoder runs a dedicated auxiliary ingest that pulls the broadcast and republishes it onto the encoder's internal bus; from there the transcoding and publishing chain treats it like any other input.

When to use this

When the source of the Live stream is a public YouTube Live broadcast (a re-distribution scenario, a remote contribution that is being mirrored to YouTube first, a 24/7 reference channel, etc.). For originating a broadcast on YouTube from your own encoder, this is not the right flow — use a standard Channel (SDI, SRT, Stream) plus an RTMP Destination pointing at YouTube ingest instead.

Prerequisites

  • The C21LiveYouTube license on the C21 Live Control instance. Without it the API rejects the create with APIf807 and the UI hides the type from the picker.
  • The target broadcast is currently live and public — not unlisted, not private, not member-only. The 11-character Video ID is the value after ?v= in youtube.com/watch?v=<id> or after / in youtu.be/<id>.
  • The deployment can reach YouTube from its outbound IP. If the deployment lives on a datacenter / cloud / VPS network and the broadcast fails the anti-bot challenge, a cookies file exported from a logged-in YouTube account must be in place on the encoder host (deployment-side detail — see the encoder operator runbook with your Cires21 representative).
  • A user with Operator or System Administrator role.

Constraints

  • The Video ID is the public consumer-side identifier — not a YouTube Studio RTMP stream key. The two values are unrelated.
  • Only name, description, alias and settings.youtube_video_id are accepted on this Channel type. Multi-audio, subtitles and audio-track configuration are not configurable — they are dropped by the API on save.
  • The Video ID regex is ^[A-Za-z0-9_-]{11}$. Format violations are rejected with APIf001.

Via UI

Navigation: Sources → Add source.

Pick the type

Open Add source and set Type to Youtube Live. (The option is visible only if the C21LiveYouTube license is present.)

Fill the editor

UI labelValue
NameA stable identifier reused across the UI, API and logs.
DescriptionOptional free-text description.
AliasOptional alias.
YouTube Video IDThe 11-character Video ID. The inline hint reads "This is the public Video ID of a YouTube Live broadcast — not a stream key from YouTube Studio."

The multi-audio, subtitle and audio-track sections are hidden for this Channel type. Save.

Bind to a Live stream

Open the target Live stream in the Live streams editor and pick this Channel as the Source. Save.

Start

Start the Live stream from On air or the Live stream detail. The auxiliary ingest container comes up, pulls the broadcast and republishes it onto the internal bus; the broadcast's Channel entrypoint turns green on the on-air row when frames start flowing.

Via API

ActionMethod + pathoperationId
Create the ChannelPOST /c21apiv2/channelsaddChannel
curl -X POST "https://<your-host>/c21apiv2/channels" \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "YT Lofi 24/7",
    "alias": "yt-lofi",
    "description": "Reference music feed",
    "type": "Youtube Live",
    "settings": {
      "youtube_video_id": "jfKfPfyJRdk"
    }
  }'

The server discards every other settings key. The persisted blob is exactly {youtube_video_id: <id>}. Once saved, bind the Channel to a Live stream via PUT /c21apiv2/livestreams/{id} and start it with POST /c21apiv2/livestreams/{id}/start (operationId startLivestream). See Start and stop a Live stream.

Verify

  • The Channel appears in Sources with its Video ID and the derived Watch URL (https://www.youtube.com/watch?v=<id>) on the detail panel.
  • After binding to a Live stream and starting, the Live stream's row on On air reports a healthy Channel entrypoint and starts producing output to the bound Destinations.
  • The broadcast's events log shows a line confirming the YouTube Live input was added (the encoder logs Adding Youtube Live input with Video ID '<id>' on the input bring-up).

Troubleshooting

  • APIf807 on save — the C21LiveYouTube license is missing or expired. The Channel type is still in the API contract but mutations are rejected. Verify the license under Licenses.
  • APIf001 on save — the Video ID does not match ^[A-Za-z0-9_-]{11}$. Check the length and the charset; trim leading or trailing whitespace.
  • Channel comes up but the broadcast never produces frames — the broadcast is no longer live, was switched to unlisted or private, or YouTube returned the anti-bot challenge on the deployment's IP. If the broadcast is confirmed live and reachable from a regular browser, the ingest is most likely blocked at the network layer — coordinate with your Cires21 representative to deploy a cookies file on the encoder.
  • Live stream restarts after ~30 s of running without producing output — the encoder version pre-dates the watchdog fix for the YouTube Live container. Upgrade the encoder to the current release.

FAQ

Copyright © 2026