ffmpeg: Videolivestream mit Live-Audiostream

0

Es gibt durchaus im Audiobusiness häufiger den Anwendungsfall, dass man auf Videoplattformen den Live-Audio-Stream mit einem Standard-Footage weiterverbreiten möchte. Das geht mit ffmpeg relativ simpel. Hier ein Beispiel unter Debian 11, das sehr generisch ist. Der Aufbau ist immer der selbe:

  • unter STREAM_URL wird der Streamingserver eingetragen, z.B. von YouTube,
  • unter SOURCE1 das Video oder Bild, das als Loop laufen soll,
  • unter SOURCE2 der Audiostream und
  • unter KEY der Streamingkey für die Plattform (Authentifizierungskey).
  • threads sollte je nach CPU Kernanzahl gesetzt werden

Bild Stream Beispiel


#! /bin/bash

STREAM_URL="rtmp://..."

SOURCE1="/var/www/htdocs/mixcloud-video.jpg"
SOURCE2="https://stream.url/stream"
KEY=""

ffmpeg \
-loop 1 -i "$SOURCE1" -i "$SOURCE2" \
-c:v libx264 -tune stillimage -pix_fmt yuv420p \
-b:a 192k -threads 4 -preset fast -bufsize 2048k \
-f flv "$STREAM_URL/$KEY"

Video Stream Beispiel


#! /bin/bash

STREAM_URL="rtmp://..."

SOURCE1="/var/www/htdocs/mixcloud-video.mp4"
SOURCE2="https://stream.url/stream"
KEY=""

ffmpeg \
-re -stream_loop -1 -i "$SOURCE1" -i "$SOURCE2" \
-c:v libx264 -tune stillimage -pix_fmt yuv420p \
-b:a 192k -threads 4 -preset fast -bufsize 2048k \
-f flv "$STREAM_URL/$KEY"


Minimale Videosource Anlieferung

Wer einen RTMP Audiostream generieren möchte mit minimaler Anforderung, sollte sich zunächst von Wikimedia das 1×1 Pixel große PNG runterladen und dann folgende Settings verwenden:


#! /bin/bash 

STREAM_URL="rtmp://..." 
SOURCE1="/var/www/htdocs/1x1.png" 
SOURCE2="https://stream.url/stream" 
KEY=""

ffmpeg \
-loop 1 -i "$SOURCE1" -i "$SOURCE2" \
-c:v h264 -pix_fmt yuv420p -tune stillimage -profile:v baseline -crf 24 -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" \
-b:a 96k -threads 4 -preset fast -bufsize 1024k \
-f flv "$STREAM_URL/$KEY"


Service

Damit der ffmpeg Aufruf im Hintergrund sauber weiterläuft einfach unter /etc/system/systemd/ einen Service anlegen, z.B. ffmpeg-mixcloud.service:


[Unit]
Description=mixcloudstream
After=network.target remote-fs.target nss-lookup.target

[Service]
User=root
Restart=on-failure
RestartSec=30
ExecStart=/root/mixcloudstream.sh
KillSignal=SIGTERM

[Install]
WantedBy=multi-user.target

Hier gilt es darauf zu achten, dass unter ExecStart der richtige Pfad zum Skript oben hinterlegt ist.

Leave A Reply

Your email address will not be published.