Playlist-Stream – 24/7 Livestream mit Linux

Mit dieser kleinen Anleitung, kannst du einen Playlist-Livestream mit Linux erstellen.
Somit kannst du Videos zu Plattformen wie Twitch, YouTube, Mixer, Dlive & Co. streamen.
Wir werden am Ende das fertige Video per „codec copy“ einfach 1:1 auf die Plattform schieben. Damit sparen wir uns die Codierung und dadurch enorm Rechenleistung.

Was brauchen wir?

– Einen Linux-Server => Braucht nicht viel Power. Wirklich nicht viel!
– Viel Speicherplatz für Videos
– Eine gute Internetanbindung => So viel Bandbreite wie die Videos an Datenrate haben
– Root-Rechte auf dem Server
– Videos, ganz viele Videos

1. Videos organisieren und anpassen

Wir brauchen nun sehr viele Videos, die wir streamen möchten.
Diese müssen ggf. auf folgende Kriterien angepasst werden.
Eventuell musst du die vorhanden Videos noch einmal in ein anderes Format rendern.
Die Videos müssen
– im Format mp4 mit x264 Codec sein
– die zu streamende Auflösung haben (z.B. 1920×1080)
– die zu streamende Bilder pro Sekunde haben (z.B. 60FPS)
– die zu streamende Datenrate für das Bild haben (z.B. 6000kbps)
– die zu streamende Datenrate für den Ton haben (z.B. 320kbps)

Die Auflösung, Datenraten und FPS sollten den Vorgaben für normale Livestreams der Plattformen entsprechen.
Twitch erlaubt nur Livestreams mit 1080p + 60FPS und einer maximalen Datenrate von 6000kbps. Wer mit mehr streamt, riskiert von Twitch abgeschaltet zu werden.
(Steht so im FAQ.)

Wer gerne einen 4K-Stream machen möchte, sollte dafür sorgen, das die Videos in 4K mit guter Datenrate (30-40Mbit/s) vorliegen.

Speichere die Videos nun auf dem Server ab.
Du kannst auch (wenn du es von Zuhause aus machst) eine USB-Festplatte an einen Raspberry Pi (oder ähnliches) anschließen und dort die Videos drauf speichern.
Ja auch ein Pi reicht für den Livestream komplett aus!

WICHTIG: Alle Videos müssen in EINEM Ordner vorhanden sein. Es darf KEINEN Unterordner geben! Achte daher etwas auf die Benamung von den Dateien 😉
Am besten bennene die Dateien sehr einfach, ohne Sonderzeichen.
Beispiel: DateiNameDesVideos.mp4

2. FFMPEG + Screen installieren

Wir installieren uns FFMPEG. Damit können wir schlussendlich Streamen.

apt install ffmpeg -y

Zusätzlich installieren wir noch Screen, damit der Stream im Hintergrund weiter laufen kann.

apt install screen -y

3. Eine Playlist erstellen

Wir erstellen uns nun eine Playlist-Datei, welche die Videos behinhaltet.
Gehe nun in den Ordner, indem die ganzen Videos liegen.

cd /dein/Ordner/mit/Videos

Hast du viele Videos nun dort drin, wäre es sehr mühselig die ganzen Dateinamen nun abzukopieren und in eine Playlist zu packen.
Wir helfen uns mit diesem Befehl:

find . -iname "*.mp4" -exec basename {} \;>Playlist.txt

Wunderbar!

Editiere nun die Datei noch, damit die Playlist nun folgendem Muster entspricht:

file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4'
file 'video4.mp4'

Aktuell stehen ja nur die Dateinamen drin. Davor muss jetzt noch file ‚ und am Ende noch einmal ein!
Du kannst auch nun die Reihenfolge der Playlist noch editieren. Die Videos werden der Reihe nach abgespielt. Möchtest du also einen gewissen „Mix“ haben, pass die Reihenfolge an.

WICHTIG: Wir können leider keine Pfade mitgeben, damit müssen alle Videos im gleichen Ordner liegen, indem sich die Playlist-Datei und die folgenden Start-Scripts befindet.

Wem das ganze von Hand etwas zu doof ist, kann „gute“ Texteditoren wie z.B. Notepad++ oder NotepadQQ nutzen.
Dort lässt sich mit wenigen Klicks der notwendige Text einfügen.
Um etwas an jeden Zeilenanfang zu setzen, suche nach „^“ und ersetze es mit „file ‚„.
Um etwas an das Ende jeder Zeile zu setzen, suche nach „.mp4“ und lass es durch „.mp4′“ ersetzen.

4. Die Stream-Datei anlegen

Nun legen wir uns eine Datei an, welche einfach den Stream startet und zur gewünschten Quelle schickt.

nano LIVESTREAM.sh

Ich habe hier nun zwei Möglichkeinten für dich.
Die erste ist ein einfacher „Stream“. Wenn die Playlist vorbei ist, wird der Stream beendet.
Die zweite ist ein Loop. Ist die Playlist zuende, wird sie neu gestartet.

Einfacher Playlist-Stream:

Füge für den einfachen Stream in die LIVESTREAM.sh nun folgenden Startbefehl ein:

ffmpeg -re -f concat -i Playlist.txt -codec copy -f flv rtmp://DEIN-SERVER/DeinStreamKey

Aber was tud sie?
ffmpeg -re -f concat→ Startet ffmpeg
-i → Wir geben die Playlist- Datei an
-codec copy → Wir geben als Codec die Daten des Videos an. Wir rendern nichts auf dem Server
-f flv rtmp → Trage hier dein Zielserver ein (z.B. Twitch, YouTube, Mixer, ….)

Loop-Stream für ein 24/7-Livestream:

Füge für den einfachen Stream in die LIVESTREAM.sh nun folgenden Startbefehl ein:

while [ 1 -eq 1 ]
do
ffmpeg -re -f concat -i Playlist.txt -codec copy -f flv rtmp://DEIN-SERVER/DeinStreamKey
done

Aber was tud sie?
Wir führen eine Schleife aus.
Solange „1“  wirklich „1“ bleibt, führe den ffmpeg-Startbefehl aus.
Ansonten sei fertig.
Mehr ist es nicht.
1 wird auch solange nichts dazwischen kommt, immer 1 bleiben.

Speichere die Datei ab.
Nun noch ein

chmod +x LIVESTREAM.sh

damit die Datei auch ausführbar ist.

5. Starte es mit Screen, dann läuft der Stream im Hintergrund weiter

Dazu erstellen wir uns eine „Start-Datei“.

nano START-STREAM.sh

Hier fügen wir einfach folgenden Startbefehl hinein:

screen -S 24hStream ./LIVESTREAM.sh

Und nun noch die Datei ausführbar machen

chmod +x START-STREAM.sh

FERTIG!

6. Stream starten

Gebe nun auf der Komandozeile folgendes ein:

./START-STREAM.sh

Es sollte nun ein Screen geöffnet werden, welcher den Output von FFMPEG ausgibt und dein Stream sollte live gehen!


Aber wie und was wird nun gestreamt?
Das klären wir noch kurz.

Welche Auflösung wird gesendet?
Die des originalen Videos.
Wechselt die Auflösung, weil die Videos in unterschiedlicher Auflösung vorliegen, ändert sich auch die Auflösung des Streams.

Welche FPS wird gesendet?
Die des originalen Videos.
Hat es 30FPS, werden nur 30FPS gestreamt.
Hat das nächste Video 60FPS, werden 60FPS gestreamt.

Welche Datenrate wird gesendet?
Die des originalen Videos.
Wurde das Video mit variabler Datenrate codiert, schwankt die Bandbreite eben etwas. Wurde das Video mit fester Datenrade codiert, wird dauerhaft mit dieser Datenrate gestreamt.

Was passiert wenn die Playlist fertig ist?
FFMPEG schließt sich und der Stream ist aus.
Nutzt du das Loop-Script, wiederholt sich die Playlist.

Wie kann ich die Bildqualität bei niedriger Datenrate verbessern?
Wenn du nicht viel Uploadbandbreite zur Verfügung hast, rendere deine Video mit der x264 / h264 CPU-Voreinstellung „slow“ oder „placebo“.
Dauert zwar zum rendern etwas länger, die Bildqualität kann aber dann bei niedrigen Datenraten etwas verbessert werden.

Kann ich auch h265 / x265 nutzen?
Nein. Das unterstützen die Plattformen (aktuell) nicht.


Nur als kleiner Einblick in den Leistungshunger eines Livestreams, ist hier ein Screenshot eines Pine ROCK64 (vergleichbar mit Raspberry Pi 3).
Der Stream braucht etwa 2-5% CPU-Leistung.

Gestreamt wurde ein 1080p Stream mit 60FPS und etwa 8Mbit/s Datenrate.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

* Durch das Absenden dieses Kommentars werden deine angegebenen Daten auf dem Server gespeichert. Du stimmst dadurch den Datenschutzbedingungen zu.