Skip to content
streamneo.
Setup Guides13 min read

How to Stream an Indian Online Radio Station to YouTube with FFmpeg

A practical FFmpeg guide to relaying an authorised Indian radio stream to YouTube, including rights, visuals, encoding and monitoring.

sn.
StreamNeoPublished 4 October 2026
Worth sharing?

A publicly playable Indian radio URL is not proof that you may retransmit the station on YouTube. To do this properly, obtain permission first, then use FFmpeg to read the authorised audio stream, add an approved visual, encode the result and send it to YouTube’s Live Control Room destination.

The command below is a pattern for a directly readable audio endpoint, not a universal command for every station. A web player, HLS playlist, redirect or protected feed may need a different input and access method, so test the station URL before planning an overnight relay.

Confirm permission and rights first

Treat the permission check as a hard gate, not an administrative detail. A station’s website may let anyone listen in a browser while reserving retransmission rights to the station itself. The fact that the station is based in India, or that FFmpeg can read its stream, does not change that distinction.

Ask the station or relevant rightsholders for written permission to relay the broadcast to YouTube. The permission should identify the station or service, your YouTube channel, the territory in which the relay may be viewed, the intended duration, and whether YouTube may archive the broadcast. If you plan to monetise the channel, ask specifically whether monetised exploitation is covered.

Check what the station actually controls. A radio service may have permission to broadcast music over its own service without having the right to authorise a separate YouTube retransmission. Depending on the programme, rights may involve the sound recording, composition, lyrics, performers, label, publisher, public-performance licensing and other royalty participants. News reports, jingles, advertisements, interviews and syndicated programmes may have different restrictions.

YouTube’s live-streaming terms say that the provider represents and warrants that it has the necessary rights for worldwide exploitation of live content on Google services, including music licensing rights. The terms also address territory-specific requirements and archived content. Read the current terms and confirm the position with the station and relevant rights holders before publishing. This is a practical permissions check, not a determination of Indian or other local law.

Keep a copy of the permission, its dates and any conditions. Record whether it covers:

  • live retransmission to YouTube;
  • the countries in which viewers may watch;
  • continuous or overnight operation;
  • YouTube’s archive or replay of the broadcast;
  • monetisation and advertising; and
  • the artwork, logos, presenter voices and other material included in the relay.

If permission is limited to a particular programme or period, do not turn a short authorisation into an always-on station feed. A written restriction is part of the stream design: it may require a schedule, a manual stop time or a different visual and description.

If you need a broader explanation of music ownership for an always-on channel, the music licensing guide for monetised 24/7 channels is a useful companion. It does not replace permission for this specific station.

Check YouTube channel and Live Control Room readiness

Before debugging FFmpeg, make sure the destination channel can receive a live encoder feed. YouTube requires live streaming to be enabled and the channel to meet its current eligibility requirements. First-time activation may take up to 24 hours, so do this before the intended launch night rather than immediately beforehand.

Use YouTube’s official live-streaming setup guidance to check the current process. YouTube may change account checks, feature availability or the information requested during activation. The official page is the right place to confirm the position for your channel.

Open YouTube Studio and enter the Live Control Room. Create or schedule the stream, choose the intended privacy setting for your test, and select the encoder workflow. YouTube will provide the server URL and stream key. Copy both values exactly. The stream key is a credential: do not paste it into a public issue, screenshot, script repository or article.

For the first test, use private or unlisted visibility where appropriate. Confirm that the preview appears in Live Control Room before making the broadcast public. A successful FFmpeg process alone is not enough: YouTube must accept the connection and show a usable audio and video preview.

Decide whether the broadcast should be a single continuing event or a scheduled event that you create in advance. Your choice affects how you handle restarts. If FFmpeg stops and reconnects to an existing event, the stream key and event state must still be valid. If you create a new event for every relay, you need an operating procedure for copying the new destination details without exposing the key.

Write down the channel’s intended title, description, thumbnail, language and visibility before testing. Mention that the feed is a relay only if that is accurate and permitted. Avoid presenting the YouTube channel as the official station channel unless the station has authorised that wording.

Verify the station audio URL and access

A browser address is not necessarily the media address that FFmpeg needs. A page may contain a player, while the player obtains an HLS playlist or another endpoint after loading. The page can work in a browser even though the page URL itself contains no demuxable audio stream.

Obtain the direct URL from the station or from the station’s approved technical documentation. Ask what format it uses, whether it redirects, whether it needs a request header or authentication, and whether automated reconnects are permitted. Do not extract or bypass access controls that the provider has not authorised.

Start with a short local test. For a directly readable endpoint, inspect it with FFmpeg and watch its output:

ffmpeg -i 'https://STATION-AUDIO-STREAM-URL' -t 30 -f null -

This does not publish anything to YouTube. It helps show whether FFmpeg can open the endpoint and identify an audio stream. Look for an input that contains an audio track rather than a web page, an HTML error, or a playlist format that your installed build cannot handle.

The endpoint may redirect to another URL or provide a playlist rather than one continuous file. HLS, Icecast-style feeds and other streaming formats can require different FFmpeg input behaviour. Do not assume that replacing http with https, adding -re, or changing the output command will make every endpoint work.

FFmpeg’s HTTP protocol documentation describes reconnect controls such as reconnecting at end of input, reconnecting streamed input, retrying network errors and retrying selected HTTP errors. These options can help with a permitted endless feed, but they are recovery controls, not an uptime guarantee. The station may reject repeated connections, change its endpoint or require headers that you must obtain through its approved access method.

If the test reports several audio streams, identify the one the station intends you to use. If it reports no audio stream, stop there and resolve the endpoint issue. Do not send a blank or misidentified input to YouTube while trying to discover what the URL does.

Choose an authorised visual source

Audio-only input still needs a video track for this image-based YouTube relay. The simplest approach is a still image that you have permission to use, such as station-approved artwork, a logo supplied for this purpose or an image created for your channel under a suitable licence.

Ask whether the station’s permission covers its logo, album artwork, presenter photographs, programme artwork and other visible material. A station may approve the audio relay but expect you to use a particular image or avoid suggesting that your channel is the station’s official outlet.

Prepare the image before building the command. Use a normal image format such as JPEG or PNG and check that it opens correctly. Keep the visual legible at the size used by the YouTube player. A simple still with the station name, programme name and a clear indication that it is an audio broadcast is often more useful than a crowded design.

You can also use a short looping video, but that changes the input and mapping pattern. A video may need its own frame rate, duration and codec settings, and it can introduce rights questions for moving images. If you use a still image, FFmpeg can loop it and create a continuous video track while the station supplies the audio.

The guide to making a 24/7 bird sounds live stream explains the same general issue from another angle: an always-on audio concept still needs a stable visual presentation. For a radio relay, adapt the visual to the station’s permission rather than reusing artwork without checking it.

Build the FFmpeg command pattern

For a directly readable HTTP or HTTPS audio stream and one authorised still image, the following is an illustrative pattern:

ffmpeg \
  -reconnect 1 -reconnect_at_eof 1 -reconnect_streamed 1 \
  -reconnect_on_network_error 1 -reconnect_on_http_error 4xx,5xx \
  -reconnect_delay_max 30 \
  -i 'https://STATION-AUDIO-STREAM-URL' \
  -loop 1 -framerate 30 -i 'station-artwork.jpg' \
  -map 1:v:0 -map 0:a:0 \
  -c:v libx264 -tune stillimage -pix_fmt yuv420p \
  -c:a aac -b:a 128k -ar 44100 \
  -f flv 'rtmps://YOUTUBE-INGEST-URL/STREAM-KEY'

Replace every capitalised placeholder. This is a template, not a tested command for a particular station endpoint. Check the installed FFmpeg version and build because available options and encoders can differ.

The command works from left to right. The reconnect options appear before the station input because they apply to that input. -reconnect 1 enables reconnect behaviour, while the related options ask FFmpeg to consider end-of-file, streamed input and selected network or HTTP failures. -reconnect_delay_max 30 limits the maximum delay used by that reconnect logic in this pattern. A reconnect attempt can fail, and a station can refuse it, so keep an operator or recovery process available.

The first -i is the station audio source. It must be an endpoint that the installed FFmpeg can open and demux. The second input is the still image. -loop 1 keeps the image available, and -framerate 30 asks FFmpeg to generate video frames at that rate for the output.

The two -map options make the intended relationship explicit. -map 1:v:0 selects the first video stream from input 1, the image. -map 0:a:0 selects the first audio stream from input 0, the station feed. Without explicit mapping, an unexpected stream in an input can produce a different result from the one you intended.

-c:v libx264 selects H.264 video when that encoder is available. -tune stillimage is suited to a largely static picture, while -pix_fmt yuv420p selects a broadly compatible pixel format. If your FFmpeg build does not include libx264, choose a supported compatible H.264 encoder and check its options with the local FFmpeg documentation. Do not assume that an encoder name from someone else’s command exists in your installation.

-c:a aac encodes the station audio as AAC. The -b:a 128k setting and -ar 44100 setting follow YouTube’s published stereo recommendations for this type of encoder input. YouTube also describes constant-bitrate encoder settings and lists AAC or MP3 audio among its supported choices. Test the actual output rather than treating a recommendation as a guarantee for every channel or build.

The final -f flv selects the output container commonly used for RTMP-family encoder publishing. The final quoted value is not a guessed address. Replace it with the server URL and stream key supplied in your Live Control Room. Keep the entire output value private because it contains the credential used to publish to your event.

The command does not add loudness processing, normalisation, silence insertion or metadata. That is deliberate. If the station’s approved feed has quiet sections or changing levels, first understand whether you are permitted to alter it and whether the modification is acceptable. Audio processing can create clipping or delay if added without testing.

Connect to YouTube with the supplied destination

In Live Control Room, copy the server URL and stream key into the output destination. YouTube recommends RTMPS where available, so use the protocol and address it provides rather than substituting a guessed RTMP endpoint. The protocol, host, path and key are all part of the destination data.

Do not publish the key in a shell-history example that you plan to share publicly. On a shared computer, consider how command history, process listings and logs may expose it. If the key is exposed, rotate or replace it in YouTube before the next test.

YouTube’s encoder guidance covers the recommended live encoder settings, including video and audio choices, bitrate guidance and connection requirements. The exact settings available to you can depend on the installed FFmpeg build and the event configuration, so use the Live Control Room preview as the final check.

Your upload capacity needs room above the stream’s total bitrate. YouTube recommends 20% headroom for upload bandwidth. For example, if the video and audio settings together produce a certain output rate, do not plan to use an internet connection whose available upload capacity is exactly that rate. Leave room for ordinary variation and other traffic on the connection.

A self-managed FFmpeg process gives you direct control over the input, visual and encoding settings, but you are responsible for the computer, network, process supervision, credentials and recovery. A managed relay can remove the need to keep your own computer running and can be preferable when your main problem is overnight operation rather than command-line control. Compare the operating model, endpoint compatibility, restart behaviour, visual controls and credential handling, and confirm rights either way.

If the pain is specifically leaving a computer running, StreamNeo removes that part of the workflow by taking an uploaded video and running the YouTube broadcast from the cloud after you provide the stream key. It is not a substitute for permission to retransmit the station audio, and it is YouTube-only, so the rights and destination checks still apply.

Preview and monitor the relay

Start with a controlled test, not the public overnight broadcast. Run FFmpeg, wait for the process to connect, and watch the Live Control Room preview. Check that the still image appears, the audio meter responds, the title and visibility are correct, and the live player can be opened by the intended test viewer.

Listen for several transitions in the station feed. A command can connect successfully while producing silence, a wrong stream, clipping or an audio delay. Check both a local monitoring path, if available, and the YouTube preview. What reaches YouTube is the result that matters to viewers.

Watch the FFmpeg console for input disconnects, reconnect attempts, timestamp warnings, encoder errors and output failures. A process that remains open is not necessarily delivering healthy media. YouTube’s stream health indicators and preview can show whether the service is receiving a stable video and audio signal.

YouTube advises testing before going live and continuously monitoring audio and video quality. Its network and streaming troubleshooting guidance is useful when the preview drops, buffers or reports an unstable connection. Check the upload path from the actual machine running FFmpeg, not only a separate phone or office computer.

Plan what happens when recovery does not work. Someone should know how to inspect the process, verify the station endpoint, check the internet connection, restart FFmpeg and confirm that the YouTube event is still the correct destination. If the station has a support contact, keep its approved technical instructions with the runbook.

For an unattended setup, record the last known-good command without the live key, the image filename, the FFmpeg version, the station contact and the YouTube event name. Keep the secret destination separately. This makes a restart less dependent on reconstructing the setup from memory.

Also decide how you will stop the relay. A rights permission may end at a stated time, the station may request a pause, or YouTube may need the event ended manually. An always-on design still needs a human decision when the authority to broadcast changes.

If you are comparing this with a looping video workflow, the pre-recorded YouTube live-stream guide covers a different input model. A station relay remains dependent on an external live audio endpoint, so a file loop cannot silently replace the station without changing what you are broadcasting.

Before committing, compare the operating options on the pricing page. When the file and channel are ready, start free — 24-hour trial, no card.

FAQ

Does a public radio stream URL give me permission to rebroadcast it?

No. Public playback and retransmission are separate permissions. Obtain written authorisation covering YouTube, territories, duration, archiving and monetisation where relevant, and confirm the rights held by the station and other rightsholders.

Will this command work with every Indian radio station?

No. It assumes the first input is a directly readable, demuxable audio stream and the second is a still image. A station may instead provide a web page, HLS playlist, redirect or protected feed, so identify and test the approved endpoint first.

Why does the command include a still image?

The station input supplies audio, but YouTube’s encoder feed also needs video for this image-based pattern. The still image is looped into a video track, so use artwork that you are authorised to display and map the image video separately from the station audio.

Do reconnect options guarantee an uninterrupted broadcast?

No. They can help FFmpeg recover from some network or end-of-stream conditions, but the station may reject a new connection, the endpoint may change, or the local network may fail. Monitor the relay and keep a procedure for checking and restarting it.

YOU’VE REACHED THE END

Keep the ideas coming.

More guides, useful tools and a little help for your next broadcast.

Back to the journal ↗
YOUR NEXT READ

A little more to explore.

More Setup Guides guides ↗ · All topics ↗