Skip to main content

Liquidsoap

Build audio and video streams from a few lines of code — internet radio, live shows, RTMP to YouTube, transcoding and everything in between.

radio.liq
# A complete internet radio, in a handful of lines.
music = playlist("~/music")
jingles = playlist("~/jingles")

# Three tracks, then a jingle, on repeat.
radio = rotate([music.{weight = 3}, jingles.{weight = 1}])

# Smooth transitions between tracks.
radio = crossfade(radio)

# Stream it out to an Icecast server.
output.icecast(%mp3, host="localhost", mount="radio", radio)

Simple

Light and easy to use, in the Unix tradition of small strong components working together. Your first stream is a couple of lines of code.

Expressive

Not a configuration file with a fixed set of knobs, but a real language built for streaming, so anything you can describe you can build.

Versatile

Audio and video, dozens of formats and codecs, Icecast, RTMP, SRT and HLS, with FFmpeg wired in throughout. Your stream can come from and go almost anywhere.

What you can build

Run an internet radio

Point Liquidsoap at a folder of tracks and stream it to an Icecast or Shoutcast server. Scheduling, jingles and fallbacks are a few lines more.

Quickstart

Take live shows

Accept connections from DJ software such as Mixxx, or from a browser, and switch to the live source automatically when someone connects.

Harbor input

Stream video

Liquidsoap is not audio only. Ingest RTMP from OBS, mix clips with live feeds, and push the result to YouTube Live, or out over SRT and HLS.

Video streams

FFmpeg, built in

Encoders, decoders and the whole filter graph are reachable from the language, so you can transcode on the fly, or copy streams through untouched when no re-encoding is needed.

FFmpeg support

Shape the sound

Write your own transitions, fade tracks in and out, detect blank, normalise loudness, or drop in LADSPA and FFmpeg filters.

Crossfading

Plug in your own backend

Feed tracks from whatever system you already run. Operators like request.dynamic let your database, API or scheduler decide what plays next.

Request sources

Built on Liquidsoap

From national broadcasters to one-room community stations. Radio France runs its 77 stations on it; AzuraCast and LibreTime use it as their playout engine.

  • Radio France
  • AzuraCast
  • LibreTime
  • WHIV-LP 102.3 FM
  • KPISS.FM
  • Lahmacun Radio
  • Radiotomate
  • Datafruits.fm

Also Live365, Centova Cast and Crazy Arms. Many of them have talked about it at the Liquidshop workshops.

Get Liquidsoap

Install it

The recommended route is the opam package manager. Docker images and native packages for Debian, Ubuntu and Alpine are published with every release.

Installation guide →

Learn it

Start with the quickstart, work through a complete case analysis, or read the Liquidsoap book for the language in depth.

The Liquidsoap book →

Ask for help

The Discord channel is the best place for questions and discussion. Bugs and feature requests go to GitHub.

Join the chat →