FFmpeg-Passthrough des MPEG-Transportstreams verursacht Fehler und Störungen im Stream
2547
UnbescholtenerBuerger
Unbescholtener Bürger mit einer weiteren FFmpeg-Frage zurück. Mein Ziel ist es, dass eine Instanz von FFmpeg ausgeführt wird, die einen mpeg-Transportstrom über RTP empfängt, auf dem empfangenen Strom beliebige Operationen wie Transcoding oder Filterung ausführt und den geänderten Transportstrom dann über RTP weiterleitet.
Ich verstehe es jedoch nicht einmal in der einfachsten Konfiguration: Ich habe eine .ts-Datei, die ein einzelnes Programm enthält, das aus einem Video- und einem Audiostrom besteht. Ich verwende eine Instanz von FFmpeg, um diese Datei an localhost zu streamen:
Mit ffplay bestätige ich, dass dies korrekt funktioniert:
ffplay -i rtp://127.0.0.1:5003
Das Ergebnis sieht gut aus, klingt gut und verursacht keine Fehlermeldungen auf der Konsole.
Jetzt versuche ich eine andere FFmpeg-Instanz dazwischen zu setzen und es geht bergab. Ich möchte nur, dass FFmpeg den Stream von Port 5003 nach Port 5005 kopiert, ohne dass er weiter verarbeitet oder umcodiert wird:
Ich bekomme viele wiederkehrende Fehlermeldungen auf dieser Konsole, und wenn ich den Stream an Port 5005 mit ffplay überwache, entstehen viele Artefakte, Störungen und Aussetzer. Die Konsolenausgabe sieht zum größten Teil so aus:
Also ... eine Idee, was schief gelaufen ist und wie man es reparieren kann? Ein Blick auf den Ressourcenmonitor weist nicht auf eine hohe CPU-, Speicher- oder Netzwerklast hin.
Können Sie eine .ts-Datei angeben?
vor 6 Jahren
0
Ich könnte, aber es wäre nicht legal, denke ich. Ich habe Bronski Beat - Smalltown Boy von YT heruntergeladen und mit FFmpeg in .ts konvertiert. Egal, das ist egal, weil ich den Täter tatsächlich gefunden habe.
UnbescholtenerBuerger vor 6 Jahren
0
1 Antwort auf die Frage
0
UnbescholtenerBuerger
Anscheinend war mein Problem also das -reFlag im Befehl, mit dem die Pass-Through-Instanz von FFmpeg gestartet wird.
Wenn ich vorher die offiziellen Unterlagen gelesen hätte, hätte ich diese Frage nicht stellen müssen:
-re (Eingang)
Lesen Sie die Eingabe mit der nativen Framerate. Wird hauptsächlich zum Simulieren eines Greifers oder eines Live-Eingabestreams (z. B. beim Lesen aus einer Datei) verwendet. Sollte nicht mit tatsächlichen Greifgeräten oder Live-Eingabeströmen verwendet werden (wo es zu Paketverlusten kommen kann).