熟悉ffmpeg如何处理UDP上接收的无序MPEGTS数据包的人

熟悉ffmpeg如何处理UDP上接收的无序MPEGTS数据包的人,ffmpeg,udp,mpeg2-ts,Ffmpeg,Udp,Mpeg2 Ts,让我们假设编码器/ffmpeg通过udp推送mpegts。我们还有另一个ffmpeg正在接收这些mpegts数据包。在接收端,由于媒体是通过UDP接收的,所以可能会丢失一些数据包,或者出现故障。我很想知道接收ffmpeg如何处理它 发送过程ffmpeg-re-ixyz.mp4-codec copy-f mpegtsudp://localhost:5011 接收过程-iudp://localhost:5011 output.movMPEG2-TS数据包头CC字段中的不连续性几乎总是仅用于指示TS级

让我们假设编码器/ffmpeg通过udp推送mpegts。我们还有另一个ffmpeg正在接收这些mpegts数据包。在接收端,由于媒体是通过UDP接收的,所以可能会丢失一些数据包,或者出现故障。我很想知道接收ffmpeg如何处理它

发送过程ffmpeg-re-ixyz.mp4-codec copy-f mpegtsudp://localhost:5011


接收过程-iudp://localhost:5011 output.mov

MPEG2-TS数据包头CC字段中的不连续性几乎总是仅用于指示TS级别上丢失的MPEG2-TS数据包。CC字段的4位非常少,以便可靠地处理无序数据包。此外,在传输流级别,您可以接收到数据包,也可以根本不接收数据包,因此处理无序数据包并不考虑传输流本身。

只有在无法保证按顺序接收IP数据包的情况下,重新排序才会成为IP数据报的一个问题。在UDP中,没有允许数据包重新排序的内置机制。如果你想重新排序,你必须使用RTP,或者在UDP之上,或者直接在IP之下。

FFMpeg在内部管理所有这些,所以你不必担心。您只需抓取属于您希望解码的流的数据包,ffmpeg将按顺序返回帧。在查找时,您需要告诉ffmpeg刷新其内部缓冲区。是的,这是期望值。但我试图深入研究mpegts和avio层的代码,以了解它是如何以及在哪里实现的。因为,若你们看,在MPEGTS中,我看到可以使用的连续性计数器。但这只是4位。因此,无序最多可被16个数据包吸收。我看不到一个可以用于订单的确定字段,这与它可能被包装在RTP中不同,在RTP中,seq no可能是有用的、可依赖的确定性度量