srt2hls
srt2hls copied to clipboard
Simple audio HLS streaming server based on Liquidsoap
srt2hls
Simple audio HLS streaming server.
Intro
The goal of this program is to receive an audio stream with SRT and broadcast it with HLS. It can serve as a CDN origin server or as a set-and-forget streaming server.
How it works
srt2hls use Liquidsoap to receive a stream and encode it in HLS, then it use [nginx] (https://www.nginx.com/) to serve HLS content.
The Liquidsoap container, by default, run radio/live.liq script. It's a fully functionnal example that will :
- Receive 2 SRT inputs on ports 10000 and 10001
- Create a production stream with basic logic between the 2 inputs
- Encode the stream in aac with 3 quality
- Segment it in HLS format in /hls directory
The Nginx container come with a specific configuration to serve HLS content with proper Content-Type, CORS and Cache-Control headers. It need read only access to /hls directory to serve HLS segments and playlists.
Setup
With docker compose
mkdir hls
sudo chown -R 10000:10001 hls
sudo docker-compose up
Local installation requirements
- Liquidsoap 2.0.0+
- ffmpeg
Basic usage
Listening
By default the encoder send blank HLS segments, that mean if it's started, you can already listen the blank stream.
ffplay http://localhost:8080/live.m3u8
vlc http://localhost:8080/live.m3u8
Switch live source
The default script allow to switch the output between inputs.
# Check available input to switch to
curl http://localhost:8080/api/list?livesource
# Switch the livesource
curl http://localhost:8080/api/set?livesource=srt2
curl http://localhost:8080/api/set?livesource=srt1
# check the current live source
curl http://localhost:8080/api/get?livesource
Sending audio to the streaming server
Using ffmpeg
Requirement : ffmpeg compiled with srt support (https://johnvansickle.com/ffmpeg/ for example)
# live stream or static file
ffmpeg -re -i $AUDIOFILE -vn -f wav -codec:a pcm_s16le srt://127.0.0.1:10000
Monitoring
Grafana
http://localhost:3000/
Prometheus
http://localhost:9090/
Development
Build images
sudo docker-compose build
Thanks
Folks of Liquidsoap
Monitoring stack is mostly inspired by https://github.com/stefanprodan/dockprom