RTMP-Server mit ffmpeg

Ich möchte einen Teradek Cube verwenden, der mit einer Broadcast-Kamera verbunden ist, um auf einen Server zu pushen, auf dem ffmpeg mit einem offenen RTMP-Port ausgeführt wird, und ffmpeg erneut streamen lassen, das mit RTMP oder RTSP an einen Decoder gesendet wird.

Monaserver tut dies, aber ich muss diese Funktionalität mit ffmpeg duplizieren. Ich würde den Cube als Server verwenden, außer dass er überall senden könnte, sodass das Öffnen von Ports an jedem Ort, zu dem die Kamera geht, keine Option ist. Unser Decoder ist ein Teradek Slice. Alle anderen Vorschläge, wie dies zu tun wäre sehr dankbar.

Danke schön!

Antworten (1)

Sie können FFmpeg wie folgt als RTMP-Server verwendenffmpeg -f flv -listen 1 -i rtmp://localhost:1935/live/app -c copy rtsp://YOUR_RTSP_HOST

Anmerkungen:

  • -listen 1lässt FFmpeg als RTMP-Server fungieren, wenn es mit dem RTMP-Protokoll verwendet wird
  • rtmp://localhost:1935/live/appAls RTMP-Server-URL auf der Quelle verwenden
  • Sie können einen beliebigen Wiedergabepfad rtmp://localhost:1935/any/thingund einen beliebigen Port festlegen
  • Der Hauptvorteil bei dieser Methode ist die Einfachheit, der Nachteil ist, dass der Server stoppt, wenn die Quelle stoppt oder Codierungsfehler aufweist
  • Die andere Option ist die Verwendung von nginx mit nginx-rtmp-module
Perfekt, vielen Dank. Wenn ich eine Anwendung wie VLC verwenden möchte, um den Stream vom Server zu empfangen, kann ffmpeg dann auf eine Verbindung warten und auch an den lokalen Port 1935 ausgeben?
Ja, ffmpeg -f flv -listen 1 -i rtmp://localhost:8889/live/app -c copy -f flv -listen 1 rtmp://localhost:1935/live/appeinfach unterschiedliche Ports für Input und Output einstellen
Nochmals vielen Dank, das ist genau das, was ich brauche. Beim Testen habe ich so ziemlich jede Kombination von /live/app auf dem Teradek Cube und verschiedenen iOS-RTMP-Streaming-Video-Apps ausprobiert, um dies zu testen, und ffmpeg reagiert nicht, während Monaserver funktioniert. Ist „app“ der Schlüssel und muss live in der URL des Clients enthalten sein?
Würden Sie erläutern, wie Sie die RTMP-URLs in Cube, iOS-Apps und Monaserver festlegen? öffnen Sie erforderliche Ports? Sie können jeden Playpath /any/thing setzen
Auch der FFmpeg-Eingabeserver startet, wenn er einen Stream empfängt, und die Ausgabe startet, wenn er eine Anfrage erhält
Bei den iOS-Streaming-Apps habe ich nur rtmp://Serveradresse (mit offenen Ports 1935 und 554) eingegeben und monaserver verbunden. Im VLC habe ich mich dann einfach mit der gleichen Adresse verbunden. Einige Apps erforderten ein Streamschlüsselfeld, das standardmäßig live war. Wenn ffmpeg zuhört, reagiert es nicht, egal welche URL als Eingabe eingegeben wird.
@Marware, ist das Doppelte -listen 1in deinem zweiten Kommentar richtig? Der zweite wird auf die Ausgabe-URL angewendet, daher ist es meiner Meinung nach nicht sinnvoll, einen lauschenden Server zu starten ... Vielleicht wird er nur durch Kopieren und Einfügen des Befehls dupliziert?
@Piranna Richtig, es sollte seinffmpeg -f flv -i rtmp://localhost:8889/live/app -c copy -f flv -listen 1 rtmp://localhost:1935/live/app
Können Sie Ihren Kommentar mit der Korrektur aktualisieren?
-listen 1Und wie kommt es, dass Sie sich bei der zweiten statt bei der ersten bewerben ?