NGINX (Multi-) Streaming Server
Dies ist ein Tutorial. Dieses und die dazugehörigen Skripte wurden urspünglich in einem Gist Veröffentlicht und vereinfachen die Installation eines eigenen RTMP-Servers mithilfe von NGINX.
Dieser Streaming-Server kann nicht nur Streams an mehrere Dienste wie Youtube, Twitch oder Facebook gleichzeitig streamen, sondern kann auch genutzt werden um "Lokale Wiedergabemöglichkeiten" also Empfänger in anderen Räumlichkeiten der gleichen Liegenschaft zu bedienen.
Dies bedingt oft möglichst niedrige Latenzen, welche mit den üblichen Multi-Streaming Anbietern in der Cloud nicht erreicht werden können, sodass eine Topologie mit einem "lokalen" Multi-Streaming Dienst nötig wird.
Die mit diesen Skripten und Anleitungen hergestellte Lösung ist auf einem kostengünstigen Raspberry Pi 4 vollfunktionsfähig, der einzige Flaschenhals ist dann die (Gigabit) Netzwerkanbindung!
Beispiel-Topologie eines RTMP Servers auf Basis dieser Anleitung.
NGINX mit RTMP-Modul kompilieren und Multi-Streaming einstellen
Diese Skripte werden NGINX mit dem RTMP Modul installieren, dabei werden die "normalen" Ordner genutzt, wie auch bspw. von apt-get.
Der RTMP-Server den Sie damit erhalten kann für eins oder mehr der folgenden Dinge genutzt werden:
- Streams im localen Netzerk bereitstellen
- RTMP Streams in HLS-Video umwandeln
- Streams an ein oder mehrere Webseiten wie z.B. Youtube senden
- Streams auf Festplatte speichern
- vieles, vieles mehr: Schau mal in die Offizielle Doku: Nginx RTMP-Module
Und es läuft problemlos auf einem Raspberry Pi 4!
Installation
Wenn noch kein Git vorhanden ist, installiere es: Download Git
Hole die Skripte:
git clone https://gist.github.com/489c5c0cf5a561a32f757d7513465344.git install_nginx
Wechsel in das Ziel-Verzeichis:
cd install_nginx
Führe das Haupt Installationsskript aus:
sudo install install_nginx.sh
Streame auf deinen neuen RTMP-Server:
Starte einen Stream von OBS oder eines anderen Streaming-Gerätes auf folgende URL (Hostname ist hier die IP oder der Name deines Servers):
rtmp://hostname:1935/live
Wenn du einen API-Key z.B. von Youtube hast, stelle ihn in OBS ein oder verändere die URL wie folgt:
rtmp://hostname:1935/live/your-api-key
Erklärung und Optionen:
Dieses Skript installiert eine RTMP-Configuration welche Livestreams annimt und an CLient-Verbindungen verteilt.
Standardmäßig sind folgende Optionen deaktiviert aber können, bei Bedarf, in der Konfigurations-Datei `/etc/nginx/nginx.conf` aktiviert werden:
Veröffentlichen zu einem Streaming-Service (z.B. Youtube):
Wenn du die Push Option aktivierst, wird jeder ankommende Stream auf die genannte URL weitergeleitet, standardmäßig Youtube.
Lokale VLC Wiedergabe (z.B. auf einem Raspberry Pi):
Diese Option ist sehr Hilfreich wenn du in das Internet Livestreamen möchtest aber auch in einen Lokalen Raum Streamen möchtest.
Der Befehl nach exec_publish wird zu beginn eines neuen Livestreams ausgeführt und nach beendigung desselben beendet.
VLC Wiedergabe auf anderem Linux-Gerät
Der VLC-Befehl kann abgewandelt werden um VLC-Fenster auf einem anderen Gerät zu starten, via SSH.
Um das ans laufen zu bekommen müssen wir ein paar Vorbereitungen treffen. Ersetze `username` und `remote-client` durch die richtigen Werte.
Hier wird ein neuer SSH-Key generiert:
sudo -u www-data ssh-keygen -t rsa -b 4096
sudo -u www-data ssh-copy-id username@remote-client
Danach kann eine Option ähnlich wie die Folgende eingestellt werden:
ssh -o "StrictHostKeyChecking no" user@remote-client "export DISPLAY=:0.0 &&
vlc -f --video-on-top --no-video-title-show --mouse-hide-timeout 1 rtmp://localhost/live/$name";