Skip to content

Instantly share code, notes, and snippets.

@BusterNeece
Last active April 29, 2024 10:44
Show Gist options
  • Star 26 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save BusterNeece/5dbfb4dbc1846055c9ab07a7c685899c to your computer and use it in GitHub Desktop.
Save BusterNeece/5dbfb4dbc1846055c9ab07a7c685899c to your computer and use it in GitHub Desktop.
Liquidsoap 2.1 Video Stream with HLS
# What is This Script?
# This script allows you to broadcast your AzuraCast radio signal to a remote video stream, using a
# static video file that loops in the background and dynamically writing the currently playing track
# on top of that video file.
#
# This script replaces the previous "radio-video-stream" project, allowing you to manage files directly from
# within AzuraCast and not requiring any changes to your Docker configuration at all.
#
# To use this script, you must be running at least AzuraCast 0.19.0 or a later Rolling Release version.
#
# Before Using This Script:
# - Upload a video file to a folder under your station's media library (in the example below, named "videostream")
# - Choose a font to display Now Playing data and upload a TTF version of that font to the same folder
#
# How to Use This Script
# - Copy the section below.
# - Visit your station's "Edit Liquidsoap Configuration" section (under "Broadcasting" in newer versions)
# - Paste the code into the bottom-most configuration section
# - Customize as necessary with your station's media directory and font specifications
# - Click "Save Changes" and then "Restart Broadcasting"
# - Enjoy!
#
# VIDEO STREAM
#
# Edit This: Station Base Directory
station_base_dir = "/var/azuracast/stations/station_name"
# Edit This: YouTube Stream Key
youtube_key = "abcd-1234-abcd-1234"
# Fetch and encode video
video_file = station_base_dir ^ "/media/videostream/video.mp4"
# Write now playing to the video file
font_file = station_base_dir ^ "/media/videostream/font.ttf"
# A static file auto-generated by AzuraCast in the "config" dir.
nowplaying_file = station_base_dir ^ "/config/nowplaying.txt"
# Align text
font_size = "50"
font_x = "340"
font_y = "990"
# Method to overlay now playing text
def add_nowplaying_text(s) =
def mkfilter(graph)
let {video = video_track} = source.tracks(s)
video_track = ffmpeg.filter.video.input(graph, video_track)
video_track = ffmpeg.filter.drawtext(font=font_file,fontsize=font_size,x=font_x,y=font_y,textfile=nowplaying_file,graph,video_track)
video_track = ffmpeg.filter.video.output(graph, video_track)
source({
video = video_track
})
end
ffmpeg.filter.create(mkfilter)
end
videostream = single(video_file)
videostream = add_nowplaying_text(videostream)
videostream = source.mux.video(video=videostream, radio)
# Output to YouTube
enc = %ffmpeg(
format="mpegts",
%video.raw(codec="libx264", pixel_format="yuv420p", b="300k", preset="superfast", r=25, g=50),
%audio(
codec="aac",
samplerate=44100,
channels=2,
b="96k",
profile="aac_low"
)
)
output.youtube.live.hls(key=youtube_key, fallible=true, encoder=enc, videostream)
@coxabling
Copy link

Hi, will this work for broadcasting on twitch? What will I have to change or add?

@Kahppachino
Copy link

Hi, will this work for broadcasting on twitch? What will I have to change or add?

you need to get your twitch rtmp url, google it

@forlen
Copy link

forlen commented May 6, 2022

Hi, when saved shows an error
LogicException at /var/azuracast/www/src/Radio/Backend/Liquidsoap.php L332: At line 283, char 30-33: Error 5: this value has type unit but it should be a subtype of string

@forlen
Copy link

forlen commented May 6, 2022

Hi, when saved shows an error LogicException at /var/azuracast/www/src/Radio/Backend/Liquidsoap.php L332: At line 283, char 30-33: Error 5: this value has type unit but it should be a subtype of string

variable "youtube_key" change on "url"

@imVinayPandya
Copy link

Is this possible to add multiple video files/folder?

@ivellios1988
Copy link

How to change the video size?

@app19191
Copy link

Hi. I have a 1080p video, however, but the stream is 720p. I tried adding height and width, so this is a fix for the stream, but when trying to download it, the 1080p is not available, so will download the 720p. How do I change from 720 to 1080?

@ivellios1988
Copy link

I fixed my issue with the size of video by adding the following lines above "# Output to YouTube":

set("frame.video.width", 640)
set("frame.video.height", 360)

Change the values to whatever you want and it should be ok.

@app19191
Copy link

I fixed my issue with the size of video by adding the following lines above "# Output to YouTube":

set("frame.video.width", 640)
set("frame.video.height", 360)

Change the values to whatever you want and it should be ok.

Thank you, I will try this

@Capersjr
Copy link

Where do I place this file in the docker container?

@sognev
Copy link

sognev commented Jul 7, 2023

Hello. Where can I override the youtube method to change the link to the rtmp server ? I need to stream to twitch or another server. Thank you.

@salvatorepre
Copy link

Won't work on Azuracast v0.18.5, and also can you add the RTMP server output for own rtmp server such nginx?

@giorgi-n
Copy link

Hello, how i can change font color?

@shalone86
Copy link

The code is working great for me! Thank you! Except I have a few issues. I copied and edited the code exactly as instructed, but my text always says "station offline" what am I doing wrong? Also, I can't get it to recognize my loaded font (Roboto in this instance). Lastly, if I can get the now playing text to work, I'd love to have the text in the top left corner, which x and y numbers coincide with that location?

@dekakast
Copy link

dekakast commented Feb 7, 2024

Can I use a 4k looping .mov?

@butchydutchy
Copy link

can anyone confirm this still works in v0.19.4 Stable ? since we updated it no longer works for us.

@Ranzware
Copy link

Ranzware commented Feb 9, 2024

it work with v0.19.4 Stable for youtube

i try to stream to Owncast .. how can i change the url ?

@butchydutchy
Copy link

it work with v0.19.4 Stable for youtube

i try to stream to Owncast .. how can i change the url ?

url = "owncast url here"

output.url(fallible=true, url=url, enc, videostream)

you can try adding this

@Ranzware
Copy link

it work with v0.19.4 Stable for youtube
i try to stream to Owncast .. how can i change the url ?

url = "owncast url here"

output.url(fallible=true, url=url, enc, videostream)

you can try adding this

this is very helpful thanks .. just i edited and in it work .. now i am facing other problem from OwnCast side ..

---- transcoding error. look at data/logs/transcoder.log to help debug. your copy of ffmpeg may not support your selected codec of libx264 https://owncast.online/docs/codecs/ ---

i will see how to edit this ..

Thank you alot

@tekmac22
Copy link

VIDEO STREAM

Edit This: Station Base Directory

station_base_dir = "/var/azuracast/stations/YOUR-STATION"

Edit This: Stream RTMP Adress

stream_key = "rtmp://YOUR RTMP URL/STREAM-KEY"

Fetch and encode video

video_file = station_base_dir ^ "/media/videostream/video.mp4"

Write now playing to the video file

font_file = station_base_dir ^ "/media/videostream/font.ttf"

A static file auto-generated by AzuraCast in the "config" dir.

nowplaying_file = station_base_dir ^ "/config/nowplaying.txt"

Align text

font_size = "50"
font_x = "340"
font_y = "990"

Method to overlay now playing text

def add_nowplaying_text(s) =
def mkfilter(graph)
let {video = video_track} = source.tracks(s)
video_track = ffmpeg.filter.video.input(graph, video_track)
video_track = ffmpeg.filter.drawtext(font=font_file,fontsize=font_size,x=font_x,y=font_y,textfile=nowplaying_file,graph,video_track)
video_track = ffmpeg.filter.video.output(graph, video_track)

source({
  video = video_track
})

end

ffmpeg.filter.create(mkfilter)
end

videostream = single(video_file)
videostream = add_nowplaying_text(videostream)
videostream = source.mux.video(video=videostream, radio)

Output to Twitch

enc = %ffmpeg(
format="flv",
%video.raw(codec="libx264", pixel_format="yuv420p", b="300k", preset="superfast", r=25, g=50),
%audio(
codec="aac",
samplerate=44100,
channels=2,
b="96k",
profile="aac_low"
)
)
output.url(url=stream_key, enc, fallible=true, vid

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment