Skip to content
streamneo.
Tools14 min read

How to Stream an Indian Radio Station to YouTube Using Liquidsoap

A practical Liquidsoap workflow for sending an Indian radio feed to YouTube with a still image, encoder, stream key and transport checks.

sn.
StreamNeoPublished 4 October 2026
Worth sharing?

Liquidsoap can send an Indian radio audio source to YouTube Live, but audio alone is not a complete YouTube video stream. You need an audio source, a visual source, an encoder, and the stream key supplied by YouTube.

The documented Liquidsoap workflow is a useful starting point rather than a guaranteed production configuration. You should check your installed Liquidsoap and FFmpeg capabilities, use the current ingest details shown in YouTube Live Control Room, and test the complete feed before leaving it unattended.

Map the radio source to YouTube

Think of the setup as four separate parts. First, Liquidsoap needs access to the radio programme: this might be a local playlist, an existing network source, or a source assembled from scheduled items. Secondly, it needs a visual layer. Thirdly, it needs an encoder that turns the combined audio and video into a format accepted by YouTube. Finally, it needs an ingest address and secret stream key.

The path is therefore:

radio source → audio/video mux → encoder → YouTube ingest

A radio station may already have an internet stream used by listeners. That does not automatically make it the right source for Liquidsoap. Confirm whether you are connecting to your own source, a local playlist, or another feed that you have permission to retransmit. Also check what happens when the source is silent, unavailable, or changes format.

Liquidsoap’s documented YouTube output accepts a source, an encoder, and a secret key. Its reference documentation also describes a YouTube HLS output. The exact operator and available arguments depend on the Liquidsoap version you have installed, so start with the reference matching that version rather than copying an older example without checking it. The Liquidsoap source and output reference is the appropriate place to confirm the current shape of the output.

YouTube is not receiving a radio station in the same sense as an FM or internet-radio listener. It is receiving a live audio/video broadcast. That distinction explains why a working audio source still needs a video stream and why a test must include the picture, sound, metadata, and connection rather than only the playlist.

If your aim is a long-running devotional, bhajan, news, or music channel, consider the failure points separately. A playlist can finish, a network source can stall, a key can be revoked, an image can be missing, or the encoder can fail to start. Separating those parts makes a later fault easier to identify.

Prepare the audio and still-image layer

Begin with the simplest source that represents your intended broadcast. For a station playlist, that could be a Liquidsoap playlist containing the audio files. For an existing online radio feed, use the relevant network source supported by your installation. Keep the first test short and predictable: a few known tracks or programme segments are easier to inspect than an entire overnight schedule.

The visual layer can be a still station image, such as a logo with the station name, language, programme information, and a way for listeners to identify the channel. A still image is operationally simpler than moving video because it does not introduce another playlist, codec, or source of rights problems. It still has to be available to Liquidsoap and suitable for the video encoder.

The important point is that Liquidsoap’s radio audio does not become a complete video broadcast by itself. The worked example in the Liquidsoap book adds an image source, then combines it with the radio source using source.mux.video. The combined source is encoded as audio and video before it is sent to YouTube. The example is illustrative and may need adjustment for your installed release and build.

A simplified shape of the workflow looks like this:

radio = playlist("~/Music")
video = single("image.jpg")
radio = source.mux.video(video=video, radio)

Do not treat those lines as a drop-in production script. Check the source syntax, file paths, permissions, and video behaviour against the Liquidsoap version you are using. A missing image may prevent the combined source from behaving as expected, while an unavailable radio source may leave you with a silent or interrupted feed.

Your image also needs to be yours to use on YouTube. A station logo may be straightforward if you own it, but photographs, album artwork, news footage, religious artwork, and promotional material can have separate rights. The Copyright Office’s overview of the Indian Copyright Act covers the legal framework, but it does not determine whether your particular radio licence covers a YouTube simulcast.

For a station carrying recorded music, check the rights for the sound recording, musical work, lyrics, performers, territory, and online transmission. A terrestrial or radio arrangement should not be assumed to cover a separate YouTube broadcast. If the rights position is unclear, obtain advice from the relevant rightsholders or qualified Indian counsel before you run the feed publicly.

Configure Liquidsoap’s YouTube output

Once the audio and visual sources work independently, choose an encoder configuration that your Liquidsoap installation can actually provide. The Liquidsoap book’s example uses an FFmpeg container format, H.264 video, and MP3 audio. It also uses values for video bitrate, audio bitrate, pixel format, and sample rate. Those values demonstrate the structure of the configuration, not a promise that they are current, optimal, or accepted for every YouTube account and build.

The conceptual encoder section is similar to:

enc = %ffmpeg(format="flv",
  %video(codec="libx264", pixel_format="yuv420p", b="300k"),
  %audio(codec="libmp3lame", samplerate=44100, b="160k"))

Before using an encoder block, check three things. First, confirm that your installed Liquidsoap has the relevant FFmpeg support. Secondly, confirm that the named codecs are available in the FFmpeg build exposed to Liquidsoap. Thirdly, compare the resulting audio/video combination with the current settings and requirements shown by YouTube Live Control Room.

The Liquidsoap encoding formats documentation can help you identify what the installation supports. A configuration that parses successfully may still fail when it opens the source, initialises a codec, or begins sending packets. That is why a short live test is more useful than assuming that a copied example is ready for an overnight broadcast.

Liquidsoap’s current references include YouTube-specific output operators. These may be clearer than assembling a generic output.url call, particularly when the operator handles the expected YouTube parameters for your version. Read the versioned documentation and the development documentation carefully, then prefer the stable interface that matches your installation.

The older book example has the general form of reading a key, constructing an RTMP URL, and passing the encoded source to an output. It is valuable for understanding the relationship between the source, encoder, and key, but it should not be treated as a guaranteed current configuration. Keep a copy of the exact Liquidsoap version, FFmpeg version, and configuration used for a successful test so you can reproduce it later.

Keep the stream key separate

YouTube supplies the ingest information through YouTube Studio or Live Control Room. Create or select the live stream there, then copy the current server URL and stream key. Do not assume that an old URL in a blog post or sample script is the preferred endpoint for your account.

A stream key should be treated like a password. Do not put it in a public repository, a screenshot, a tutorial published by your station, or a log file that other people can read. If you share a configuration for troubleshooting, replace the real key with a placeholder before sending it anywhere.

The Liquidsoap book’s pattern is to keep the key in a separate file and read it when the script starts. An equivalent secret-management method is also reasonable if it keeps the value out of source code and limits access to the process that needs it. Check the file permissions and make sure backups, shell history, and diagnostic output are not exposing the key.

For example, the illustrative pattern is:

ykey = string.trim(file.contents("youtube-key"))

The filename is not important. The separation is. If you regenerate the key in YouTube, update the protected secret used by Liquidsoap and test again. A previously working process may continue to fail if it is still using the old value.

Transport also needs attention. YouTube documents RTMPS as RTMP carried over TLS/SSL and describes an RTMPS endpoint using port 443. The YouTube RTMPS ingestion guide is the primary reference for that transport. Liquidsoap’s versioned reference documents a YouTube RTMP output and may show a default endpoint. Compare both with the actual ingest details supplied in Live Control Room and use a transport supported by your Liquidsoap installation.

Send the feed and check YouTube preview

Start with YouTube’s stream set to the intended privacy level for testing. Keep Live Control Room open while Liquidsoap connects. This lets you distinguish a local source or encoder problem from an ingest problem: if Liquidsoap reports a connection but YouTube receives no preview, inspect the endpoint, key, transport, and encoder output together.

Do not switch immediately to a full overnight schedule. Use a controlled programme with a known beginning and end, then watch the preview long enough to confirm that the image remains present, the audio is audible, and the connection does not repeatedly reconnect. A short test cannot prove that a stream will survive an entire night, but it can catch basic configuration errors before they affect listeners.

If you are using RTMP, confirm that the URL is the one currently provided for the stream rather than relying on the old example URL. If you are using RTMPS, verify that the installed Liquidsoap and its underlying output path support the required secure transport. The choice is not simply a matter of changing three letters in a URL.

YouTube may show a delay between the encoder sending data and the preview becoming available. Avoid changing several settings at once. Record the time, the Liquidsoap log message, the selected endpoint, and what Live Control Room displays. This gives you a usable troubleshooting record if the next test behaves differently.

For longer unattended operation, decide what should happen if the radio source disappears. A fallback source may be appropriate, but it should be deliberately designed and tested. Silence, a looping holding message, or an alternative programme each has a different effect on listeners and on your rights obligations. Do not assume that a fallback is present merely because the main source is configured.

The guide to fixing a YouTube 24/7 stream that stops in India is useful when the basic connection works but the broadcast later ends. If your problem is repeated disconnection rather than a stopped broadcast, the church live-stream disconnection checklist covers several practical checks that also apply to a radio feed.

Test metadata, audio, and picture separately

A successful YouTube preview is only the beginning of the test. Listen to the broadcast from a separate device or account and compare it with the source. Check for silence, clipping, very low volume, unexpected gaps, and whether the first seconds of a track are missing. A local Liquidsoap log can say that a source is active even when the listener experience is poor.

Check the image at the same time. It should remain visible rather than disappearing when the audio source changes. If the image contains text, test it on a mobile screen as well as a desktop screen. A station name that is readable on the production computer may be too small in the YouTube player.

Test your metadata expectations separately from the audio. A radio player may display song titles or programme information, but that does not mean the same metadata will automatically appear in YouTube’s title, description, or live chat. Decide what information belongs in the scheduled YouTube event and what, if anything, should change during the broadcast.

For an Indian station, also check language rendering. Hindi, Tamil, Bengali, Malayalam, or other script may display differently in the image, programme title, and description. Use the exact text you expect listeners to see and inspect it in the public watch page, not only in your authoring interface.

Make a simple test record with these columns:

Check What to observe If it fails
Source Tracks or programme segments arrive in the expected order Inspect the playlist, network source, and fallback behaviour
Audio Speech and music are audible without obvious clipping or silence Review source levels and the encoder audio settings
Video The station image stays visible throughout the test Check the image path, permissions, muxing, and video encoder
Metadata Title, description, language, and category are as intended Edit the YouTube event separately from the Liquidsoap source
Ingest Live Control Room receives a stable preview Recheck key, URL, transport, codec support, and logs
Rights The audio and visual assets are cleared for this transmission Confirm permissions before making the broadcast public

Run a second test after a restart. A configuration that works only while a terminal session or temporary file remains open is not ready for unattended use. Also test what happens after the machine or hosting environment loses connectivity and returns. The aim is not to claim guaranteed reliability; it is to discover which parts need a documented recovery procedure.

If you later move the process away from your own computer, monitor the actual YouTube output rather than only checking whether a process exists. The YouTube RTMP stream health monitoring guide for an India-based VPS discusses that distinction. A running encoder process does not necessarily mean that viewers are receiving the intended picture and sound.

Review RTMP, RTMPS, HLS, and the visual choices

Liquidsoap’s documentation gives you more than one output path, but the existence of an option does not mean it is interchangeable with every YouTube workflow. RTMP is widely associated with live ingest, while YouTube’s official documentation describes RTMPS as encrypted RTMP over TLS/SSL. Use the endpoint and transport supported by the current Live Control Room details and by your installed Liquidsoap build.

Liquidsoap also documents a YouTube HLS output. HLS may be relevant when that is the selected ingest method and the particular configuration supports it, but do not substitute it for RTMP or RTMPS merely because the name appears in the reference. Confirm how the output is intended to be used, what the current YouTube setup accepts, and whether your installed version exposes the required operator.

The comparison below is about decisions to verify, not a promise that one option will work in every environment.

Choice What it changes What you should verify
RTMP Uses the documented Liquidsoap RTMP path and the supplied key The current YouTube ingest URL, Liquidsoap version, and encoder support
RTMPS Sends RTMP through the secure transport documented by YouTube TLS support, port and endpoint, and whether the installed output supports it
HLS Uses Liquidsoap’s documented HLS output where the selected workflow supports it The exact operator, YouTube acceptance, and the current account setup
Still image Keeps the visual source simple and predictable Image rights, path, dimensions, and continued availability
Moving visual Adds visual activity and may show programme information Source stability, codec support, and rights for every visual asset

A static image is often the easier first choice for a devotional or music station. A moving visual layer may be worthwhile for a news loop or programme channel, but it adds another source that can fail. Choose it because it serves the broadcast, not because movement by itself proves that the stream is active.

Rights remain separate from transport. The Indian Copyright Rules contain provisions concerning notices and royalties connected with statutory broadcast licensing, but those provisions do not by themselves settle whether your existing permissions cover a YouTube simulcast. YouTube also applies its own platform rules. Its copyright help guidance warns that a live stream can be terminated after a copyright or Community Guidelines strike.

Before making the feed public, confirm the relevant rights and keep records of permissions. Platform acceptance is not proof that the broadcast is authorised under Indian law, and having a radio licence is not automatically proof that every recording, composition, lyric, performance, or visual asset is cleared for YouTube.

For operators who do not want to leave a computer running, a cloud-based stream runner can remove the need to keep the local machine awake, but it does not remove the need to prepare the source, visual layer, key, rights, and recovery plan. StreamNeo is designed for the specific case where you upload the prepared video, supply the YouTube key, and need the broadcast to continue without your own computer running.

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

Can Liquidsoap send radio audio to YouTube without an image?

Not as a complete audio/video YouTube broadcast. You need a video source, such as a station still, and must mux it with the radio audio before encoding and sending the combined source to YouTube.

Is the Liquidsoap book’s configuration ready to paste into production?

No. It explains the relationship between the source, image, encoder, URL, and key, but the codec values and output syntax need to be checked against your installed Liquidsoap and FFmpeg versions. Confirm the current YouTube setup in Live Control Room and test the whole feed.

Should an Indian radio station use RTMP or RTMPS?

Compare the transport supported by your Liquidsoap installation with the current ingest details supplied by YouTube. YouTube documents RTMPS as encrypted RTMP, while Liquidsoap’s versioned reference may document an RTMP default, so do not assume that an older sample URL is the right choice for your account.

Does an existing radio licence automatically cover YouTube?

You should not assume that it does. Check the rights for the recordings, compositions, lyrics, performers, territory, visual assets, and online transmission separately, and obtain advice from the relevant rightsholders or qualified Indian counsel where the position is unclear.

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 Tools guides ↗ · All topics ↗