以上是我目前的程序,问题是目前程序gst_state在ready的状态下才能正常推流,但是我的算法程序进不去;在gst_state是playing状态下,算法程序可以进去,但是用vlc获取流地址会报错queue basy,求指导,希望能实现算法处理后将视频数据正常推流出去。万分感谢!
gstreamer+opencv,想gstreamer采视频数据后用opencv处理后再将处理后的数据推流出去
以上是我目前的程序,问题是目前程序gst_state在ready的状态下才能正常推流,但是我的算法程序进不去;在gst_state是playing状态下,算法程序可以进去,但是用vlc获取流地址会报错queue basy,求指导,希望能实现算法处理后将视频数据正常推流出去。万分感谢!
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
21条回答 默认 最新
关注 获得0.40元问题酬金 引自免费微信小程序:皆我百晓生
为了实现GStreamer采集视频数据后用OpenCV处理,然后再将处理后的数据推流出去,你需要在现有的GStreamer管道中插入一个自定义的OpenCV处理元素。这个元素可以通过
opencv-gstreamer
插件或者创建一个自定义的GStreamer插件来实现。下面是一个概念性的解决方案:
-
首先,确保你已经安装了
opencv4
和相关的opencv-gstreamer
插件(如果存在的话)。 -
修改你的GStreamer管道字符串,在原始视频源和编码器之间添加一个 OpenCV 处理元素。例如,可以使用
opencvfilter
元素(这可能需要你自己编写或找到已存在的类似插件),如下所示:
std::string pipeline_str = g_strdup_printf( "v4l2src device=/dev/video%d ! video/x-raw,format=NV12,width=1920,height=1080 ! " "tee name=t ! clockoverlay halignment=left valignment=top text=\"网络监控:192.168.1.23\" font-desc=\"Sans Serif, 8\" ! " "queue ! videoconvert ! video/x-raw,format=BGR ! opencvfilter ! " "videoconvert ! videoscale ! video/x-raw,width=1280,height=1280 ! " "queue ! mpph264enc ! queue ! h264parse ! rtph264pay name=pay0 pt=96", n_videonum); // 假设opencvfilter是自定义的OpenCV处理插件
-
如果没有现成的
opencvfilter
元素,你可以创建一个自定义的GStreamer插件,该插件内部调用OpenCV函数进行图像处理。这个步骤相对复杂,涉及到C++编程以及对GStreamer插件开发的理解。 -
在自定义的OpenCV处理插件中,你需要重写必要的方法,以便在接收到每个buffer时对其进行处理,并将处理后的buffer发送至下一个pipeline元素。
-
确保你的pipeline状态切换正确,算法程序能够在播放状态下正常工作。对于报错“queue busy”,通常意味着某个队列元素未能及时处理数据,可能是由于处理速度跟不上帧率导致的。在这种情况下,调整OpenCV处理部分的性能或者增加适当的缓冲机制以适应实时性要求。
总结来说,关键在于如何在GStreamer管道中无缝集成OpenCV处理部分,这可能需要通过自定义插件来实现。如果你选择编写自定义插件,请查阅GStreamer官方文档了解如何创建一个新的插件,并参考OpenCV API进行图像处理。
解决 无用评论 打赏 举报 编辑记录-
悬赏问题
- ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
- ¥20 关于URL获取的参数,无法执行二选一查询
- ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
- ¥15 marlin编译错误,如何解决?
- ¥15 有偿四位数,节约算法和扫描算法
- ¥15 VUE项目怎么运行,系统打不开
- ¥50 pointpillars等目标检测算法怎么融合注意力机制
- ¥20 Vs code Mac系统 PHP Debug调试环境配置
- ¥60 大一项目课,微信小程序
- ¥15 求视频摘要youtube和ovp数据集