opencv - 来自应用程序的 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
将帧发布到流中?
解决方案
似乎VideoWriter
有一个内部缓冲区可以缓存 30 秒的镜头。就我而言,我在内存中保留了一个单例,并依靠它足够快地刷新到管道中。实际上,我最终不得不VideoWriter
通过释放数据来强制刷新数据。
我不建议将此作为问题的解决方案,但在我的情况下,它起作用了,因为我仅在DEBUG
定义时才需要此管道。
推荐阅读
- php - 如何正确显示数据库中的图像?
- react-native - EXPO:未捕获的错误:未定义不是对象(评估's.STANDARD_EVENT_ADD_TO_CART')
- javascript - 在页面的特定部分添加块
- php - 获取数组中的最小值并包含重复项
- java - 在 For each 中使用 Lambda 和 Streams 并返回结果
- wordpress - 致命错误:无法在 wordpress 网站的写入上下文中使用函数返回值
- mysql - 有没有办法使用 python 脚本向托管数据库发送/插入值?
- angular - 如何从compodoc生成的json文件中删除源代码
- java - 如果我有一个复杂的响应对象,如何使用 JsonInclude 注释忽略空值
- php - 如何在 PHP PDO 中简单地将一个值绑定到所有参数?