PlayoutGo 3.46.0 · Guide

Pushing a channel to YouTube

Send a channel straight to YouTube, Facebook, Twitch or anything else that gives you an RTMP address and a stream key. It takes about two minutes.

What you need first

A stream key from the service you are publishing to. On YouTube: YouTube Studio → Create → Go live → Stream. You want two things from that page — the Stream URL and the Stream key.

  1. Open the channel

    Channels → the channel you want to publish → Edit. Scroll to Push to a streaming service.

  2. Join the URL and the key together

    PlayoutGo takes one address, not two boxes. Put a slash between what YouTube calls the Stream URL and what it calls the Stream key:

    # YouTube shows you
    Stream URL   rtmp://a.rtmp.youtube.com/live2
    Stream key   abcd-efgh-ijkl-mnop-qrst
    
    # you paste
    rtmp://a.rtmp.youtube.com/live2/abcd-efgh-ijkl-mnop-qrst
    Push to a streaming service
    rtmp://a.rtmp.youtube.com/live2/abcd-efgh-ijkl-mnop-qrst
    ✓ Ready. The channel connects when it goes on air, and retries by itself if the service drops it.

    The line underneath checks the address as you type. Missing the key is the commonest mistake and it is caught here rather than on air.

  3. Set the quality YouTube asks for

    Press “Use YouTube’s recommended quality”. That sets the ladder from YouTube’s own live encoder guidance:

    RungVideoAudio
    1080p4500 kbps128 kbps AAC
    720p2500 kbps128 kbps AAC
    480p1000 kbps128 kbps AAC

    It also sets a two-second GOP, which is what YouTube expects. Getting one rung wrong means the stream is accepted and then transcoded badly — which looks like a fault in the picture rather than a setting.

  4. Save, then start the channel

    The push connects as the first frames go out. Nothing is sent while the channel is stopped — YouTube shows the stream as offline until you start it.

  5. Check it is going

    Reopen the channel and look under the push field, or ask the API:

    curl -s $BASE/api/channels/7/push -H "Authorization: Bearer $TOK"
    
    → {"enabled":true,"target":"rtmp://a.rtmp.youtube.com/live2/ab…op",
       "connected":true,"seconds_up":412,"video_frames":10300,
       "audio_frames":17800,"dropped":0,"mbps":4.6,"retries":0}

    On YouTube’s side the Go live page turns green within a few seconds of connected becoming true.

When it does not work

What you seeWhat it means
connected: false, error connection refused Nothing is listening at that address. Check the host — YouTube’s primary ingest is a.rtmp.youtube.com; the backup is b.rtmp.youtube.com.
Error mentioning the server refused the connection The key is wrong, expired, or belongs to a different channel. Stream keys reset when you end a stream in some YouTube configurations.
dropped rising steadily The upstream link cannot carry the rate. Lower the top rung, or move the channel to a lower ladder. Frames are dropped rather than queued deliberately — a live push that buffers falls further behind every second and never recovers.
A small dropped count at start-up Normal. Frames produced before the connection was established have nowhere to go.
retries climbing The service keeps closing the connection. The delay widens each time — one second, then two, up to thirty — so a platform coming back is picked up quickly without hammering one that is down.

Your stream key is never shown again. It is stored, but the status endpoint and every log line report the address with the key elided — …/live2/ab…op. A key in a log is a key somebody else can stream with.

One channel, one destination. A channel pushes to one address. To publish the same output to YouTube and Facebook at once, run a second channel with the same rundown, or point a restreamer at the channel’s SRT output.

Doing it from the API

The push target is an ordinary channel field, so it can be set when the channel is created or at any time after.

curl -s -X PUT $BASE/api/channels/7 \
     -H "Authorization: Bearer $TOK" -H 'Content-Type: application/json' \
     -d '{"rtmp_push_url":"rtmp://a.rtmp.youtube.com/live2/abcd-efgh-ijkl-mnop"}'

An address that is not rtmp://, or one with no key after the application, is refused with a reason rather than stored and retried for ever.