从GStreamer将数据流式传输到OpenCV

时间:2019-11-20 20:41:55

标签: c++ opencv gstreamer

我有两个嵌入式摄像机可以传输数据,我想使用OpenCV进行立体声校准和深度测量。我可以使用以下方法显示来自摄像机的视频:

gst-launch-1.0 rtpbin name=rtpbin udpsrc caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' port=5004 ! rtpbin.recv_rtp_sink_0 rtpbin. ! rtph264depay ! decodebin ! videoconvert ! autovideosink

第二个摄像头位于端口5005上,因此我可以同时显示两个摄像头。我使用此脚本https://github.com/milq/milq/blob/master/scripts/bash/install-opencv.sh构建了OpenCV 3.4.6,并创建了一个SDP文件来打开:

c=IN IP4 127.0.0.1
m=video 5004 RTP/AVP 96
a=rtpmap:96 H264/90000

但是我得到了错误:

  

GStreamer-CRITICAL **:15:26:57.855:gst_element_get_state:断言   'GST_IS_ELEMENT(element)'失败VIDIOC_REQBUFS:不适当的ioctl   用于设备

我更改了构建脚本以添加:

-DWITH_GSTREAMER=ON -DWITH_OPENEXR=OFF

然后尝试:

VideoCapture vid0("udpsrc caps = \"application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, port=5004, payload=(int)96\" ! rtph264depay ! decodebin ! videoconvert ! autovideosink", CAP_GSTREAMER);

但是我得到了

  

GStreamer-CRITICAL **:15:25:54.893:gst_element_get_state:断言“ GST_IS_ELEMENT(元素)”失败

我用OpenCV 4.1.1重建了。有了SDP文件,我得到了:

  

引用了[h264 @ 0x55c6ed66f840]不存在的PPS 0

     

引用了[h264 @ 0x55c6ed66f840]不存在的PPS 0

     

[h264 @ 0x55c6ed66f840] encode_slice_header错误

     

[h264 @ 0x55c6ed66f840]没有框架!

     

引用了[h264 @ 0x55c6ed66f840]不存在的PPS 0

     

引用了[h264 @ 0x55c6ed66f840]不存在的PPS 0

     

[h264 @ 0x55c6ed66f840] encode_slice_header错误

     

[h264 @ 0x55c6ed66f840]没有框架!

使用GStreamer命令,我得到:

  

[WARN:0]全局/home/tom/Documents/opencv/OpenCV/modules/videoio/src/cap_gstreamer.cpp(801)打开OpenCV | GStreamer警告:无法在手动管道中找到应用接收器

     

[WARN:0]全局/home/tom/Documents/opencv/OpenCV/modules/videoio/src/cap_gstreamer.cpp(480)isPipelinePlaying OpenCV | GStreamer警告:GStreamer:尚未创建管道

我在做什么错了?

0 个答案:

没有答案