我的流水线如下(我通过RTP接收MPEG TS H264视频)。
gst-launch-1.0 -v udpsrc address=127.0.0.1 port=1200 ! decodebin ! rtpvrawpay ! rtpbin ! udpsink host=127.0.0.1 port=2250
启动后,视频传输确定了几秒钟,但随后出现了一个错误。
tsdemux.c:2413:gst_ts_demux_queue_data: CONTINUITY: Mismatch packet 2, stream 6
随后出现错误:
libav gstavauddec.c:628:gst_ffmpegauddec_drain:<avdec_mp2float0> send packet failed, could not drain decoder
之后,没有更多的正常播放是可能的,我需要重新启动管道。是什么原因导致的错误,如何解决?
原来问题出在发送器上,因为某些原因没有发送关键帧。这可能也是由UDP连接问题引起的 - 它有时可能会错过数据包。
然而,VLC播放原始流的罚款,所以这应该是可以实现与gtsreamer以及(通过播放流与udp:/@:1200地址)。
我设法解决这个问题,通过增加缓冲区大小到100兆字节,如下所示(我还提供了测试播放视频从流检查它的工作正常)。
gst-launch-1.0 udpsrc address=127.0.0.1 port=1200 buffer-size=100000000 ! tsdemux parse-private-sections=TRUE ! h264parse ! avdec_h264 ! autovideosink sync=false