如何同时获取两个立体摄像机图像?

时间:2019-06-25 04:58:48

标签: gstreamer

亲爱的

我想在gstreamer上使用以下立体摄像机。

https://www.amazon.com/dp/B07C2NTMRC/

・项目名称:SVPRO 720p HD网路摄影机

・ USB端口类型:USB 2.0

・分辨率:1080x720

我同时设置了两个外壳,以便同时从立体声相机获取两个图像。

我尝试分别使用以下代码同时获取左右两边的摄像机图像。

###Stereo_Camera_Left###

#!/bin/bash
gst-launch-1.0 -e \
v4l2src device="/dev/video0" \
! decodebin \
! videoscale \
! videorate \
! capsfilter caps="video/x-raw,width=80,height=60,framerate=\(fraction\)2/1" \
! videoconvert \
! autovideosink


###Stereo_Camera_Right###

#!/bin/bash
gst-launch-1.0 -e \
v4l2src device="/dev/video1" \
! decodebin \
! videoscale \
! videorate \
! capsfilter caps="video/x-raw,width=80,height=60,framerate=\(fraction\)2/1" \
! videoconvert \
! autovideosink

但是,左摄像机或右摄像机显示以下错误。 只能获取一张图像。

libv4l2: error turning on stream: No space left on device
0:00:05.092236993  6216      0x1202940 ERROR         v4l2bufferpool gstv4l2bufferpool.c:635:gst_v4l2_buffer_pool_streamon:<v4l2src0:pool:src> error with STREAMON 28 (No space left on device)
0:00:05.092283101  6216      0x1202940 WARN          v4l2bufferpool gstv4l2bufferpool.c:1054:gst_v4l2_buffer_pool_poll:<v4l2src0> error: poll error 1: No space left on device. (28)
0:00:05.092331654  6216      0x1202940 WARN                 v4l2src gstv4l2src.c:884:gst_v4l2src_create:<v4l2src0> error: Failed to allocate a buffer
0:00:05.092354187  6216      0x1202940 WARN                 basesrc gstbasesrc.c:2948:gst_base_src_loop:<v4l2src0> error: Internal data flow error
0:00:05.092362693  6216      0x1202940 WARN                 basesrc gstbasesrc.c:2948:gst_base_src_loop:<v4l2src0> error: streaming task paused, reason error (-5)
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Could not read from resource
Additional debug info:
gstv4l2bufferpool.c(1054): gst_v4l2_buffer_pool_poll (): /GstPipeline:pipeline

是否可以同时获取此立体摄像机的两个图像?

2 个答案:

答案 0 :(得分:0)

这里有两种可能的方法:

1)BASH逻辑。最后通过&在后​​台运行第一个命令,然后启动第二个命令。

gst-launch-1.0 -e v4l2src device="/dev/video0" ! decodebin ! videoscale ! videorate ! capsfilter caps="video/x-raw,width=80,height=60,framerate=\(fraction\)2/1" ! videoconvert ! autovideosink &
gst-launch-1.0 -e v4l2src device="/dev/video1" ! decodebin ! videoscale ! videorate ! capsfilter caps="video/x-raw,width=80,height=60,framerate=\(fraction\)2/1" ! videoconvert ! autovideosink

2)推荐的“更正确”方法-将所有逻辑整合到一个管道中:

gst-launch-1.0 -e v4l2src device="/dev/video0" ! decodebin ! videoscale ! videorate ! capsfilter caps="video/x-raw,width=80,height=60,framerate=\(fraction\)2/1" ! videoconvert ! autovideosink v4l2src device="/dev/video1" ! decodebin ! videoscale ! videorate ! capsfilter caps="video/x-raw,width=80,height=60,framerate=\(fraction\)2/1" ! videoconvert ! autovideosink

答案 1 :(得分:0)

我在使用类似的立体相机时遇到了类似的问题-设备上没有剩余空间。我试图以640x480的分辨率捕获视频。将两个摄像头的捕获宽度和高度降低到320x240,就解决了这个问题,我能够从立体声摄像头获取同步视频。

我认为该错误可能是设备USB带宽的限制。