来自应用程序的 OpenCv + Gstreamer,初始延迟 30 秒

OpenCv + Gstreamer from an app, getting initial 30s delay

所以我的应用程序使用 new VideoWriter(pipeline-definition);

公开 RTP 流

管道定义为:

appsrc is-live=1 do-timestamp=1 format=3 stream-type=0 min-latency=0 max-latency=500000000 ! queue leaky=2 max-size-time=500000000 ! videoconvert ! video/x-raw ! x264enc ! h264parse ! rtph264pay config-interval=10 pt=96 ! udpsink host=127.0.0.1 port=9000

我遇到的问题是在 VLC 中查看流时延迟 30 秒。无论我做什么,VLC 总是落后 29-30 秒。似乎是 appsrc 造成的,因为与 videotestsrc 相同的管道根本没有延迟。

有什么想法可以让 appsrc 立即将帧发布到流中吗?

似乎 VideoWriter 有一个内部缓冲区可以缓存 30 秒的镜头。在我的例子中,我在内存中保留了一个单例,并依靠它足够快地刷新到管道。实际上,我最终不得不通过释放数据来强制 VideoWriter 刷新数据。

我不建议将此作为问题的解决方案,但在我的情况下它起作用了,因为我仅在定义 DEBUG 时才需要此管道。