Skip to content

Instantly share code, notes, and snippets.

@BusterNeece
Last active May 5, 2024 19:14
Show Gist options
  • 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)
@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

@brixxnatt
Copy link

can i add channel LOGO ?

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