2017-04-25 3 views
1

Nehmen wir einen Encoder/ffmpeg an, der mpegts über UDP pusht. Und wir haben einen anderen ffmpeg, der diese mpegts-Pakete empfängt. Da auf dem Empfängerende Medien über UDP empfangen werden, ist es wahrscheinlich, dass einige Pakete verloren gehen oder nicht in Ordnung sind. Ich bin daran interessiert zu erfahren, wie es von ffmpeg gehandhabt wird.Jeder, der damit vertraut ist, wie ffmpeg handhabt Außer Ordnung MPEGTS-Pakete empfangen auf UDP

Senden Prozess ffmpeg -re -i xyz.mp4-Codecs kopieren -f mpegts udp: // localhost: 5011

Empfangen Prozess -i udp: // localhost: 5011 output.mov

+0

FFMpeg verwaltet all das intern, sodass Sie sich keine Sorgen machen müssen. Alles, was Sie tun müssen, ist die Pakete, die zu den Streams gehören, die Sie dekodieren möchten, und ffmpeg wird Ihnen die Frames in der Reihenfolge zurückgeben. Beim Suchen müssen Sie ffmpeg mitteilen, dass die internen Puffer gelöscht werden sollen. – WLGfx

+0

Yeah WLGfx, das ist die Erwartung. Aber ich habe versucht, den Code von mpegts und avio layer aufzuschlüsseln, um * wie * und * wo * es zu verstehen. Weil, wenn man sich das anschaut, ich in MPEGTS einen Continuity Counter sehe, der benutzt werden könnte. Aber das ist nur 4 Bit. So kann eine Fehlordnung von höchstens 16 Paketen absorbiert werden. Ich sehe kein bestimmtes Feld, das für die Reihenfolge verwendet werden könnte, anders als es in RTP verpackt sein könnte, wo seq no nützlich und deterministische Metrik sein könnte, auf die man sich verlassen kann – Rupesh

Antwort

1

A Diskontinuität in dem MPEG2-TS-Paketkopf-CC-Feld wird fast immer nur verwendet, um verlorene MPEG2-TS-Pakete auf der TS-Ebene anzuzeigen. Die 4 Bits des CC-Felds sind zu wenig, um eine zuverlässige Handhabung von Paketen außerhalb der Reihenfolge zu ermöglichen. Auch auf der Transportstream-Ebene erhalten Sie entweder ein Paket oder Sie erhalten es überhaupt nicht, so dass die Behandlung von Paketen außerhalb der Reihenfolge den Transportstrom selbst nicht berücksichtigt.
Das Umordnen wird nur zu einem Problem für IP-Datagramme, bei denen der Empfang von IP-Paketen in der richtigen Reihenfolge nicht garantiert werden kann. In UDP gibt es keinen eingebauten Mechanismus, der das Neuordnen von Paketen erlaubt. Wenn Sie die Reihenfolge ändern möchten, müssen Sie RTP verwenden, entweder über UDP oder direkt unter IP.

Verwandte Themen