Multstream + Transcoding mit nginx

Mit dieser Anleitung, werden wir ein Multistream aufsetzen, welcher über nginx läuft.
Zusätzlich findet eine Transcodierung statt, welche das eigentliche Auflösung und Datenrate senkt.
In dieser Anleitung werden wir folgendes erreichen:
Wir streamen ein FullHD-Bild (1920x1080p), mit 5000kbps, 30FPS und einer Audioqualität von 160kbps (Stereo) im ACC-Codec zu einem nginx-Server.
Dieser leitet den Stream an verschiedene Plattformen direkt weiter. Eine Plattform allerdings, wird nur ein HD-Bild (1280x720p), mit 3500kbps, 30FPS und einer Audioqualität von 160kbps (Stereo) im ACC-Codec erhalten.
(Auf Wunsch, können auch mehrere Plattformen mit anderen Qualitäten versorgt werden.
Was brauchen wir?
Zum einen benötigen wir einen nginx-Server, welcher das RTMP-Modul installiert hat.
Ein kompletter Server mit Modul findest du HIER.
Du kannst dir auch die neusten Versionen selbst aus dem Netz laden.
Zusätzlich benötigen wir FFMPEG.
Das bekommst du HIER her. Dies gibt es für Windows, Linux und Mac.
Was ist zu beachten?
Das einfache weiterleiten des Streams, benötigt nur Bandbreite.
Das Transcodieren, benötigt jedoch viel CPU-Leistung. Daher sollte ein extra Streamrechner / Streamserver genutzt werden, um die CPU des eigentlichen Stream-PCs nicht zu überlasten.
Fangen wir als erstes mit dem FFMPEG-Codec an.
Dieser muss bei Windows eingebunden werden, damit er direkt angesprochen werden kann.

  1. Downloade FFMPEG für Windows.
  2. Entpacke das Archiv an einen Ort. (Zu empfehlen ist, das C-Laufwerk.)
  3. Gehe in die …\r\nWin7, Win8, Win8.1: Systemsteuerung -> System und Sicherheit -> SystemWin10: Einstellungen -> System -> Info -> Systeminfo
  4. Wähle auf der linken Seite “Erweiterte Systemeinstellungen” aus.
  5. Klicke im neuen Fenster ganz unten “Umgebungsvariablen…” aus.
  6. Klicke im Bereich “Benutzervariable für NUTZERNAME” auf “Neu…”
  7. Gebe bei “Name der Variablen:” “PATH” an (Alles groß und ohne Anführungszeichen!)
  8. Gebe bei “Wert der Variablen:” den Pfad zu dem bin-Ordner von FFMPEG an. (Als Beispiel: C:\ffmpeg\bin)
  9. Drücke auf OK


Das wars! Jetzt kannst du FFMPEG direkt im System nutzen.
Als test, kannst du ein CMD-Fenster öffnen und einfach mal “ffmpeg” eingeben. Sollte sich FFMPEG melden, hast du alles richtig gemacht.

Nun kümmern wir uns um nginx.
Entpackt alle Daten an einem beliebigen Ort. Solltet ihr nginx selbst in einer aktuellen Version geladen haben, installiert noch das RTMP-Modul.
Nun passen wir erst mal die Config an.
Dazu erstellt ihr eine nginx.conf-Datei im “conf”-Ordner von nginx.
Kopiert nun die folgenden Einstellungen dort hinein:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 2048;
}
rtmp {
server{listen 1935;chunk_size 2048;napplication live {live on;record off;push rtmp://Twitch-Server.tv/DeinStreamKey;push rtmp://HitBix-Server.tv/DeinStreamKey;push rtmp://YouTube-Server.com/DeinStreamKey;}
}
}

Doch was genau wird in der Config getan?
rtmp: Damit sprechen wir das RTMP-Modul an.
listen 1935: Hier setzen wir den Port, auf dem nginx hört, auf den Port 1935. Diest ist der Standartport für Livestreams. Diesen solltet ihr nicht ändern, es sei denn, ihr braucht einen anderen.
chunk_size: Ein Zwischenpuffer von 2048KB.
push: Dieser Befehl, leitet den empfangenen Stream direkt an Plattformen weiter.
Anschließend folgt dort der rtmp-Server der Plattform mit Stream-Key deines Accounts. Dies musst du selbst auf deine Bedürfnisse anpassen. Möchtest du mehr oder weniger Plattformen direkt ansteuern, entferne 1 oder 2 Push-Zeilen oder füge noch welche hinzu.
live on: Damit leitet der nginx-Server direkt weiter.
record off: Damit könntest du deine Streams direkt mit nginx aufzeichnen. Brauchen wir aber nicht.
Speichert nun die Config ab und startet den nginx-Server, indem ihr nginx.exe ausführt.
Es sollte kein Error erstellt werden und im Taskmanager sollte in der Prozessliste nginx zu finden sein.

Nun erstellen wir die Transcoding-Option.
Dazu erstellen wir eine BAT-Datei.
Nennt die z.B. “720p.bat”. Achtet dabei auf die Endung!
Öffnet nun die Datei im Editor. (Ich empfehle Notepad++).Dort fügen wir nun folgenden Code ein:
ffmpeg -i rtmp://127.0.0.1/live/ -vcodec libx264 -preset medium -x264opts nal-hrd=cbr:force-cfr=1:keyint=60 -b:v 3500k -maxrate 3500k -bufsize 3500k -s 1280x720 -sws_flags spline -r 30 -acodec copy -f flv rtmp://EineAnderePlattform.com/DeinStreamKey
pause

und speichert alles ab.
Doch was wird hier getan?
Als erstes empfangen wir den Stream mit rtmp://127.0.0.1/live. Als nächstes folgen einige Optionale Werte, die du je nach belieben Setzen kannst.
-b:v 3500k: Eine Datenrate von 3500kbps für das Bild.
-maxrate 3500k: Eine maximale Datenrate von 3500kbps für das Bild.
-bufsize 3500k: Eine Puffergröße von 3500kbps für das Bild.
-s 1280×720: Hier wird die Auflösung auf 1280x720p gesetzt (also HD).
-acodec copy: Hier wird die Audiospur direkt kopiert. Diese Qualität werden wir nicht ändern.
-f flv rtmp://EineAnderePlattform.com/DeinStreamKey: Hier musst du nun, deine Zielplattform eintragen, zu welcher gestreamt werden soll. Acte auf korrekte rtmp-URL und auf dein Stream-Key!


Weitere Befehele, findest du HIER ausführlich – allerdings auf Englisch – aufgelistet.

Meine Config, ist perfekt für das Streaming, zu Twitch & Co.! Eine Anpassung ist daher nicht unbedingt notwendig.
Speichere anschließend alles ab.
Jetzt kannst du Streamen!

Starte als erstes deine Streamingsoftware und schalte den Stream an!
Stream dazu nicht direkt zu deinen Hostern, sondern zu “rtmp://DeineIPv4-Adresse-Des-Nginx-Servers/live” (also zu dem Rechner, auf dem nginx läuft.)

Läuft der Stream, führe die BAT-Datei aus (Also z.B. 720p.bat).Diese BAT-Datei sollte ein CMD-Fenster öfnnen und dort anfangen zu Konvertieren und zu streamen.

Viel Spaß beim Streamen 🙂

Hier unten hab ich noch zwei Beispiele parat.
Nr. 1: 1080p – 4700kbps Datenrate – 30FPS – 160kbps Audio – Faster => Gestreamt mit Open Broadcaster Software
Nr. 2: 720p – 3100kbps Datenrate – 30FPS – 160kbps – medium => Transkodiert durch FFMPEG und nginx

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.