ffmpeg: Videolivestream mit Live-Audiostream
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.