如何在opencv中为gstreamer设置管道?

时间:2016-11-18 01:53:42

标签: opencv3.0 gstreamer-1.0

背景介绍: 我正在使用gstreamer(版本1.8.2)连接来自IP摄像机的rtsp视频流并将其提供给opencv(版本3.1)。视频流为640x480,10fps。网址如下: rtsp://192.168.0.200:554/1/h264minor

当我使用gst-launch测试视频流时,延迟非常低~300ms。命令如下。我很确定" latency = 0"是实现这种低延迟的最重要因素。 gst-launch-1.0 -v rtspsrc location=rtsp://192.168.0.200:554/1/h264minor latency=0 ! decodebin ! autovideosink

在opencv中,当我使用下面的代码打开rtsp流时,延迟非常大~2.35秒。通过这种方式,我了解gstreamer将使用默认延迟自动设置管道。 VideoCapture cap; cap.open("rtsp://192.168.0.200:554/1/h264minor")

在研究了opencv中的代码 - cap_gstreamer.cpp之后,我发现我们可以为gstreamer设置一个手动管道,类似于我用于gst-launch的管道。通过这种方式,我可以控制延迟设置。所以我改变了我的代码如下。根据cap_gstreamer.cpp中的评论,appsink的名称可能是" appsink0"或" opencvsink"。但它始终无法设置此管道,我无法获得视频流。

VideoCapture cap;
cap.open("rtspsrc location=rtsp://192.168.0.200:554/1/h264minor latency=0 ! decodebin ! appsink name = appsink0")`

错误消息如下:

GStreamer插件:嵌入式视频播放暂停;模块udpsrc1报告:内部数据流错误。 OpenCV错误:未指定错误(GStreamer:无法启动管道 )在cvCaptureFromCAM_GStreamer中,文件/opencv-3.1.0/modules/videoio/src/cap_gstreamer.cpp,第826行

我的问题是:

  1. 在opencv中获取rtsp流的正确gstreamer管道是什么?
  2. 或任何其他方法来传递"延迟"从opencv到gstreamer的参数?
  3. 我花了四天时间了解opencv如何使用gstreamer,我知道这还不够。但是,我想从opencv / gstreamer专家那里获得一些指导。欢迎任何提示/建议。 提前谢谢!

0 个答案:

没有答案