“IRL”-Livestream mit SRT-Protokoll erstellen + Automatischer Szenenwechsel bei Verbindungsverlust

Ich habe in einer Anleitung (hier) schon einmal gezeigt, wie man einen „IRL“ (In Reallife – Im echten Leben) Livestream erstellen kann.
Dabei wurde nginx mit dem RTMP-Modul bestückt und der Automatic Low Bitrate Switcher installiert.
Mit dieser Kombination, konnten wir OBS bei Verbindungsverlust automatisch steuern lassen.

In dieser Anleitung zeige ich dir, wie du einen IRL-Livestream mit dem SRT-Protokoll erstellen kannst.
SRT hat den Vorteil, da es recht Latenzarm ist, x265 unterstützt und auch mehrere Verbindungen zum Zielserver erlaubt.
Was du alles tun musst und was es zu beachten gilt, steht hier in der ausführlichen Anleitung beschrieben.

Legen wir los!







Die Anforderungen

Wir benötigen folgendes:
– Einen Linux-Server (Windows / Mac geht nicht!)
– Vollen Root-Zugriff zum System
– Eine Kamera / Stream-Software welche SRT als Streamprotokoll unterstützt
– Ein Stream-Rechner mit OBS (Hier geht Linux, Windows, Mac)
– Zugriff auf die Firewall / Router, um Portfreigaben zu erstellen
– Eine gute Internetanbindung

Optional aber empfehlenswert:
– Eine Domain, um nicht IP-Adressen merken zu müssen

Der Server benötigt folgende Anforderungen:
– min. 1 CPU-Kern
– min. 512MB RAM
– min. 10GB Festplattenspeicher
– LAN-Anbindung (kein WLAN)

WICHTIG: Betreibst du alles Zuhause, benötigst du für eine saubere Verbindung einen Internetanschluss welcher Dual-Stack kann! Du benötigst eine eigene öffentliche IPv4 und IPv6-Adresse! DS-Light führt zu unschönen Verbindungsproblemen!
Kurzum: Nix Vodafone-Billig-Billig-Schrottanschluss auf Kabelbasis.
WICHTIG²: Aktuell unterstützt der SRT-Server nur IPv4! IPv6 kann daher nicht genutzt werden!

Ich werde in dieser Anleitung nicht darauf eingehen, wie man einen Linux-Server einrichtet. Dies habe ich in anderen Videos bereits ausführlich gezeigt.
Diese Anleitung basiert auf Debian 11.

Hier eine kleine Skizze, wie der Netzwerkaufbau ist:


1. Notwendige Pakete installieren

Wir müssen unser System zuerst einmal aktualisieren und anschließend mit notwendigen Paketen bestücken.
Das bekommen wir mit folgenden Befehlen hin:

# apt update && apt upgrade -y
# apt install libinput-dev make cmake tcl openssl zlib1g-dev gcc perl net-tools nano ssh git zip unzip tclsh pkg-config cmake libssl-dev build-essential -y

2. SRT installieren

Nun installieren wir uns Secure Reliable Transport (SRT) Protocol.
Das GitHub-Projekt findest du HIER.
Lade dir das Repo herunter und wechsel in den dann verfügbaren Ordner:

# git clone https://github.com/Haivision/srt.git
# cd srt

Schicke hier folgende drei Befehle ab:

# ./configure
# make
# make install

3. Srt Live Server installieren

Jetzt installieren wir noch den Server, welcher später unseren Stream empfängt und an die gewünschten Quellen zur Verfügung stellen kann.
Kleiner Tipp: Geh wieder in das Hauptverzeichnis zurück, wenn du von Schritt 2 noch im SRT-Ordner dich befindest 🙂
Das GitLab Repo findest du HIER.

Lade daher dir das Repo mit folgendem Befehl herunter:

# git clone https://gitlab.com/mattwb65/srt-live-server.git

Wechsel nun in den neuen Ordner und schicke den make-Befehl ab:

# cd srt-live-server
# make

Wir benennen nun die Konfigurationsdatei von srt um, weil wir diese gleich von vorne anlegen.
So haben wir zur Not eine Sicherung.

# cp sls.conf sls.bak

Öffne nun den Editor nano und lege die sls.conf-Datei erneut an:

# nano sls.conf

Füge folgenden Inhalt in die Datei ein:

srt {
    worker_threads  1;
    worker_connections 300 ;
    http_port 8181;
    cors_header *;
    log_file logs/error.log ;
    log_level info;

    server {
        listen 8280;
        latency 2000;

        domain_player play;
        domain_publisher live;
        default_sid play/stream/test;
        backlog 10;
        idle_streams_timeout 10;
        app {
            app_player stream ;
            app_publisher stream ;
        }
    }
}

In der Datei musst du nur 3 Dinge ändern.
http_port 8181 –> Ändere den Port auf etwas anderes, sollte er bei dir blockiert sein. Merke dir den Port gut, denn diesen brauchen wir später!
listen 8280 –> Ändere den Port auf etwas anderes, sollte er bei dir blockiert sein. Merke dir den Port gut, denn diesen brauchen wir später!
default_sid play/stream/test –> „test“ ist der Streamkey. Ändere ihn auf etwas besseres ab, um einen unerlaubten Zugriff zu unterbinden. Nutze keine Sonderzeichen! Beispiel: play/stream/jkesdlfghikluethjkedfgh34jkjhgsdfajhgsdjfhg

Speichere die Datei nun ab (STRG + X gefolgt von Y und ENTER).

Nun können wir prüfen, ob alles sauber startet.
Wechsel dazu in den Unterordner bin.

# cd bin

Damit das Tool gleich die korrekten Umgebungsvariablen kennt, schicke folgenden Befehl ab:

# ldconfig

Perfekt, jetzt können wir den SRT-Live-Server einmal starten. Das schaffst du mit diesem Befehl:

# /root/srt-live-server/bin/sls -c /root/srt-live-server/sls.conf

ACHTUNG: Passe ggf. den Pfad auf deine Gegebenheiten an!
Wir starten nun den sls-Server und dieser Prozess bindet die Konfigurationsdatei im übergeordneten Ordner ein.
Der SRT-Live-Server sollte nun ohne Probleme starten.
Drücke STRG+C, um den Server wieder zu beenden.

Damit der Server nun automatisch bei Systemstart gestartet wird, legen wir noch kurz ein SystemD-Service an.
Öffne dazu mit dem Editor nano eine neue Datei:

# nano /etc/systemd/system/srt-live-server.service

Füge hier folgenden Inhalt ein und passe ihn mit den Infos darunter an:

[Unit]
Description=SRT Live-Server
After=network.target
  
[Service]
Type=simple
WorkingDirectory=/root/srt-live-server/bin/
ExecStart=/root/srt-live-server/bin/sls -c /root/srt-live-server/sls.conf
User=root
Group=root
 
Restart=on-failure
RestartSec=10
  
[Install]
WantedBy=default.target

Ändere folgendes ab:
WorkingDirectory=Trage hier den Pfad zu dem bin-Ordner des SRT-Live-Servers korrekt ein!
ExecStart=Trage hier den Pfad zu dem bin-Ordner des SRT-Live-Servers und der Konfigurationsdatei korrekt ein!
User=Trage hier ein anderen Benutzer ein, sofern du den Dienst nicht mit dem Root-Account startest.
Group=Trage hier eine andere Gruppe ein, wenn der Benutzer bei „User“ nicht in der Root-Gruppe ist.

Nun müssen wir den Dienst nur noch aktivieren und starten:

# systemctl enable srt-live-server.service
# systemctl start srt-live-server.service

4. Automatic Low Bitrate Switcher installieren

Damit OBS Studio nun die Szenen automatisch wechselt, brauchen wir das Tool NOALBS (nginx obs automatic low bitrate switcher).
Öffne die GitHub-Seite des Projekts und lade dir das Archiv für Linux herunter.

# wget https://github.com/715209/nginx-obs-automatic-low-bitrate-switching/releases/download/v2.8.0/noalbs-v2.8.0-x86_64-unknown-linux-musl.tar.gz

Entpacke das Archiv mit folgendem Befehl:

# tar -xf noalbs-v2.8.0-x86_64-unknown-linux-musl.tar.gz

Wir benennen nun den Ordner um, damit er einfacher zu erreichen ist:

# mv noalbs-v2.8.0-x86_64-unknown-linux-musl noalbs

Nun wechseln wir in den Ordner

# cd noalbs

Wunderbar. Nun ist es an der Zeit ALBS mit unseren Werten einzustellen.
Dazu editieren wir die Datei „config.json“ mit einem Texteditor.

# nano config.json

Folgendes musst du anpassen:
user -> name: Gebe hier deinen Benutzernamen von Twitch an
switcher -> onlySwitchWhenStreaming Wechsel den Wert von true auf false, um alles offline testen zu können
switcher -> triggers -> low Setze hier einen Kilobit-Wert, der als Schwellwert gilt. Wird er unterschritten, bist du „offline“. Standard ist 800(kbit)
switcher -> triggers -> rtt Setze einen Wert, ab wann der Stream wieder als sicher online gilt in Kilobit. Standard ist 2500(kbit)
switchingScenes -> normal Gebe hier deinen Szenennamen in OBS an, wenn du LIVE bis. Also das Kamerabild.
switchingScenes -> low Gebe hier einen Szenennamen an, welcher bei schlechter Verbindung genutzt wird. Somit kannst du deine Zuschauer auf eventuelle Unterbrechungen vorbereiten.
switchingScenes -> offline Gebe hier einen Szenenenamen aus OBS an, wenn deine Internetverbindung weg ist.
streamServer (type NodeMediaServer – NMS) -> enabled Ändere den Wert von true auf false
streamServer (type SrtLiveServer – SLS) -> enabled Ändere den Wert von true auf false
streamServer (type SrtLiveServer – SLS2) -> enabled Ändere den Wert von true auf false
streamServer -> statusUrl Ändere ggf. hier den Port ab, sofern du ihn in der Konfiguration von SRT Live Server geändert hast
streamServer -> publisher Ändere hier die URL auf die Vorgaben des SRT Live Servers ab – Beispiel: live/stream/DeinStreamKey
streamServer (nginx) -> enabled Ändere den Wert von true auf false
software -> host Trage hier die IP-Adresse deines Rechners ein, auf dem OBS läuft
software -> password Gebe hier das WebRTC-Passwort von OBS ein oder überlege dir selbst ein super sicheres Kennwort
software -> port Falls du einen anderen Port als 4455 definiert hast, ändere diesen hier ab
chat -> username Trage hier deinen Twitch-Nutzernamen ein
chat -> admins Trage hier die Benutzernamen deiner Chat-Admins ein
language Wenn alles auf Deutsch laufen soll, trage hier ein de ein

Nach den Anpassungen, speichere alles ab, indem du STRG + X drückst, das ganze mit Y bestätigst und ENTER drückst.

Wir können nun einmal prüfen, ob noALBS sauber starten kann, indem wir das Tool einfach starten.
Führe dazu die launch.sh Datei im Ordner aus:

# ./launch.sh

Es werden wohl Fehlermeldungen erscheinen, dass die Verbindung zu OBS noch nicht hergestellt werden kann.
Das macht nichts. Das machen wir im nächsten Schritt.
Wir wollen nur sicher gehen, dass die Anwendung erst mal ohne Probleme überhaupt starten kann.

Damit noALBS auch automatisch bei Systemstart gestartet wird, legen wir ebenfalls dafür eine SystemD-Datei an.
Öffne deshalb erneut den Editor nano und lege damit eine neue Datei an:

# nano /etc/systemd/system/noalbs.service

Befülle die Datei mit folgendem Inhalt:

[Unit]
Description=nginx RTMP Server
After=network.target
  
[Service]
Type=simple
WorkingDirectory=/pfad/zu/noalbs/
ExecStart=/pfad/zu/noalbs/noalbs
User=root
Group=root
 
Restart=on-failure
RestartSec=10
  
[Install]
WantedBy=default.target

Ändere nun folgende Dinge auf deine Bedürfnisse ab:
WorkingDirectory= Editiere hier den Pfad zu deinem noalbs-Ordner. Beispiel: /root/noalbs/
ExecStart= Editiere hier den Pfad zu deinem noalbs-Ordner, indem sich die noalbs und launch.sh Datei befindet. Beispiel: /root/noalbs-version123456/noalbs
User= Setze hier ggf. einen anderen Nutzernamen ein, wenn du noalbs nicht mit dem Root-Nutzer starten willst
Group= Setze hier ggf. einen anderen Gruppennamen ein, wenn du noalbs nicht mit einem Benutzer der Root-Gruppe starten willst

Speichere die Datei an (STRG + X gefolgt von Y und ENTER).

# systemctl enable noalbs.service

Nun ist es an der Zeit, den Server einmal komplett neu zu starten, damit alle Dienste über SystemD gestartet und gesteuert werden können.
Also schick mal ein reboot ab und warte kurz einen Moment.

5. Die Kamera einrichten

Richte deine Streaming-Software nun so ein, das du zu der virtuellen Maschine / Server streamst.
Hierfür gibt es zwei Wege.
Weg Nr. 1: Über das heimische WLAN
Gebe hierzu einfach die lokale Adresse deiner Maschine an, z.B. srt://192.168.0.17:8280/live/stream/test

Weg Nr. 2: Über das Internet / an einen Server im Rechenzentrum
Gebe hierzu die IP-Adresse oder Domain deines Routers / deines Servers an, z.B. srt://123.123.123.123:8280/live/stream/test

Hier gibt es aber noch ein paar Dinge zu beachten!
– test = Der Stream-Key. Kannst du kein Stream-Key angeben, nutze das Beispiel oben. Kannst du einen angeben, ist deine URL srt://123.123.123.123:8280/live/stream und dein Stream-Key ist test
– Steht deine virtuelle Maschine Zuhause, gebe unbedingt im Router den Port 8280 frei, damit du nach Hause streamen kannst! Hast du ein anderen Port in der SRT-Konfiguration bei „server“ angegeben, musst du diesen freigeben!
– Steht dein Server in einem Rechenzentrum, achte darauf dass der Port 8181 und 8280 in der Firewall freigeschaltet ist! Beide Ports müssen von deinem Stream-Gerät (z.B. Smartphone) und OBS erreichbar sein.
– Denke daran, das sich deine öffentliche IP-Adresse bei deinem Internetanschluss Zuhause alle 24 Stunden ändern kann!

Um alles einfach mal zu testen, ist die Android-App „IRL Pro“ recht empfehlenswert.
Es ist ein Fork von Larix Broadcaster, nur komplett kostenfrei.

6. OBS Studio einrichten

Jetzt ist es endlich an der Zeit, OBS Studio einzurichten.
Das ist nun der leichte Part für dich, denn diesen solltest du bereits kennen.

OBS muss nun mit dem Plugin „WebSockets“ ausgestattet werden.
Es ist mittlerweile in der OBS-Standardinstallation bereits enthalten.

Starte einfach OBS Studio.
Klicke oben auf „Werkzeuge“ und dann auf „WebSockets-Servereinstellungen“.
→ Aktiviere den Server
→ Setze den Port auf 4455
→ Aktiviere die Authentifizierung
→ Gebe das sichere Kennwort aus der ALBS-Config ein
Drücke dann auf Okay.


TIPP: Deaktiviere den Websocket-Server solange du deine Szenen einrichtest, ansonsten wird noALBS dir das Leben nun sehr schwer machen! 😉

Super!

Nun erstelle deine Szenen, die du in der ALBS-Config angegeben hast mit dem korrekten Namen.
Richte also die Szenen für „live“, „verbindungsproblem“ und „offline“ ein.
Schmücke daher erst einmal diene Offline-Szene etwas aus.

Bei beiden Quellen mit Kamera-Inhalt, musst du folgendes tun:
1. Füge eine „Medienquelle“ hinzu
2. Entferne alle automatisch gesetzen Haken
3. Bei „Eingabe“ gebe folgende Adresse ein: srt://IP-ADRESSE_oder-_DOMAIN.DE:PORT/live/stream/DeinStreamKey (Beispiel srt://192.168.0.17:8280/live/stream/sadjkhfjksdahfkjasdhfkjashdfkl)
4. Bei Wiederverbindungsverzögerung reduziere diese auf 1s (1 Sekunde)
5. Setze den Haken bei „Hardwaredecodierung verwenden, falls verfügbar“, um eine bessere Performance zu haben
6. Bestätige die Einstellungen mit OK

Passe eventuell auch noch deine Streamingeinstellugen an.
Also Auflösung, Datenrate, FPS und sonstige Einstellungen.

Nun kann es los gehen!
Starte den Stream in OBS, geh mit deiner Kamera raus und lege los! OBS und ALBS kümmern sich um den Rest!


Noch ein paar Fragen zum Schluss.

Geht das wirklich nicht mit Windows?
Nein. Der SRT-Server kann aktuell nur auf Linux installiert werden.
Ein Linux-System ist ohnehin besser als Windows 😉

Kann ich alles inkl. OBS auf einen Server in einem Rechenzentrum installieren?
Ja das geht, dieser muss aber eine grafische Oberfläche installiert haben und sehr sehr sehr viel Power haben, da in der Regel keine Grafikkarte verbaut ist.
Unter 4 Kernen und 8GB RAM würde ich so etwas nicht anfangen.
8 CPU Kerne sind ehr besser. Solch ein Server kostet aber durchaus 50-60€ pro Monat!

Wie finde ich meine öffentliche IP heraus?
Das habe ich HIER in einem Video gezeigt. Du kannst sie auch einfach HIER abrufen.

Wie gebe ich Ports frei?
Das habe ich anhand einer FritzBox einmal HIER gezeigt. Ich kann es aber nicht für alle Router machen. Zum einen hab ich nicht „alle“ Router und zum anderen hab ich dazu keine Zeit 😉

Kann ich mit dem Smartphone streamen?
Ja, ich habe bisher gute Erfahrungen mit der App Larix Broadcaster für Android gemacht.
Leider nötigt der Entwickler nun die Anwender dazu, ein (meiner Meinung nach) überteuertes Premium-Abo abzuschließen.
Es gibt aber mittlerweile eine Alternative App mit dem Namen “IRL Pro” im Google Play Store.
Ist ein Fork von Larix Broadcaster mit ein paar Zusatzfunktionen.
Was komplett quelloffenes, was auch noch brauchbar ist, habe ich leider bisher nicht gefunden.

Mir SRT kann man doch direkt zu OBS Streamen, warum der Umweg über den Server?
Nur so können wir noALBS in Betrieb nehmen.
Wenn wir direkt zu OBS die Daten senden, kann noALBS nicht ermitteln, wenn die Bandbreite zu niedrig ist / keine Daten mehr ankommen.

Ich habe ein DS-Light-Anschluss, was kann ich tun?
Es gibt zwei Möglichkeiten.
1. Rufe beim Provider an und verlange ein Dual-Stack-Anschluss. Manchmal wird das auch als „Business-Paket“ verkauft.
2. Miete einen Server im Internet an, welcher eine IPv4 und IPv6 Anbindung besitzt. Nutze diesen als Stream-Server und ruf über deinen DS-Light-Anschluss nur den Stream ab.

Was nutzt noALBS, um den Streamzustand zu ermitteln?
SRT-Live-Server generiert automatisch eine Seite mit Statistiken.
Diese kann über den http_port abgerufen werden.
Beispiel-URL: http://192.168.0.30:8181/stats

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.