我有两个嵌入式摄像机可以传输数据,我想使用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:尚未创建管道
我在做什么错了?