Vor kurzem hatte ich das Vergnügen/den Auftrag, mich mit Medienstreams, RTMP und OBS zu befassen. Grundkenntnisse in ffmpeg und Medienkonvertierung hatte ich bereits in meiner Laufbahn erworben.
Ziel war, Medienstreaming von einem Publisher zu einem RTMP-Server einzurichten um den Stream dort wiederum von einem Client abzurufen und in einen Livestream welcher zu YouTube gestreamt wird, einzufügen.
Anfangs stand der Gedanke, zwei Videoquellen mittels ffmpeg unter Windows abzugreifen und per RTMP zum Server zu streamen. Nachdem sich jedoch technische Schwierigkeiten bei der Ansprache der Videoquellen ergaben, insbesondere aufgrund der schwer zu realisierenden Hardwarecodierung mit ffmpeg unter Windows und AMD Vega 11 GPUs (eigentlich APUs), wechselte ich zunächst zu OBS unter Windows und schickte den Stream damit an den RTMP-Server.
Der rudimentär aufgesetzte RTMP-Server mittels nginx und RTMP-Modul erhielt eine einfache Konfiguration und wurde per Paket unter Ubuntu installiert.
apt install libnginx-mod-rtmp
nginx.conf:
# Wichtig, wenn mehr als 1 Nginx-Worker benutzt wird, sonst Probleme beim Streaming
rtmp_auto_push on;
rtmp {
server {
listen 1935;
chunk_size 4096;
allow publish all;
application live {
live on;
record off;
}
}
server {
listen 1936;
chunk_size 4096;
allow publish all;
application live {
live on;
record off;
}
}
}
Hierbei wurden die TCP-Sockets bewusst getrennt um die Streams nach Ports zu trennen. Während des Live-Events kam spontan auch noch ein Dritter Stream hinzu. Meiner Meinung nach macht es Sinn, die Daemons vollständig zu trennen und auf unterschiedlichen Ports laufen zu lassen, dann können einzelnen Kamerasteams unabhängig von den anderen neugestartet oder verändert werden. Technisch kann die Trennung beispielhaft erfolgen durch unterschiedliche Systemd-Units oder durch nginx im Docker-Container.
In OBS wird der Stream zum Server nun wie folgt konfiguriert:
Adresse: rtmp://192.168.1.10/live
Streamschlüssel: stream
Abgerufen kann der Stream dann z. B. mit ffplay, VLC oder einer anderen OBS-Instanz mit dem Link
rtmp://192.168.1.10/live/stream
werden.
Als RTMP-Laie fiel es mir schwer zu verstehen, dass der von OBS zwingend verlangte Streamschlüssel lediglich der letzte Teil der RTMP-Adresse ist.