管道 Gstreamer RTSP 文件下沉,延迟大

Pipeline Gstreamer RTSP file sinking with big delay

我在RTSP 上用Gstremer 准备了一个IP 摄像头,它似乎是在线和实时的,使用命令:

gst-launch-1.0 rtspsrc location=rtsp://192.168.1.138:554/axis-media/media.amp ! rtph264depay ! decodebin ! videoconvert ! autovideosink sync=false

非常好,延迟显示大约 40 ms(毫秒)

如果我删除 autovideosinksync=false 结尾,它会以 2 秒 延迟显示。

现在我想在文件上同步 RTSP 流。起初我通过 mkfifo file.ts/tmp 中创建了一个管道,然后使用:

gst-launch-1.0 rtspsrc location=rtsp://192.168.1.138:554/axis-media/media.amp ! rtph264depay ! mpegtsmux ! filesink location=file.ts

它可以正常工作并使用 ts 格式和 h264 编解码器正确同步 RTSP。我可以用 mplayer file.tsgst-play-1.0 file.ts 成功播放,但有 2 秒 延迟!

我尝试使用 sync=falseautovideosink,但出现错误或无效。

如何减少文件下沉的延迟?
谢谢

经过大量搜索我发现了问题 Gstreamer 官方文档中抖动缓冲区的默认值是 200 毫秒,但实际上是 2 秒。

“latency” guint The maximum latency of the jitterbuffer. Packets will be kept in the buffer for at most this time. Flags : Read / Write Default value : 200 Here

所以我可以使用命令将延迟增加到 400 毫秒:

gst-launch-1.0 rtspsrc latency = 0 location=rtsp://192.168.1.138:554/axis-media/media.amp ! rtph264depay ! mpegtsmux ! filesink  location=file.ts

mkfifo 也有 400 毫秒的延迟,因此命名管道不是实时应用的好解决方案。