首页 > 解决方案 > 来自应用程序的 OpenCv + Gstreamer,初始延迟 30 秒

问题描述

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

管道定义为:

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将帧发布到流中?

标签: opencvgstreamervlcrtsprtp

解决方案


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

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


推荐阅读