如何让Gstreamer1.0与v4l2 raspicam驱动程序一起使用

Ber*_*_zg 4 linux-device-driver gstreamer v4l2 raspberry-pi raspbian

在过去的4天里,我试图让gstreamer1.0与v4l2驱动程序一起使用Raspberry Pi相机,但没有成功.

我正在运行最新的Raspbian图像(从19.9.2014.),启用了raspicam.Raspicam bcm2835_v4l2驱动程序是使用modprobe命令启动并成功测试的,都使用qv4l2 gui接口(预览工作正常),并直接从设备使用dd命令:

dd if=/dev/video0 of=test.jpeg count=1 bs=11M
Run Code Online (Sandbox Code Playgroud)

Gstreamer也可以使用基本的"Hello world"命令正常工作:

gst-launch-1.0 videotestsrc ! ximagesink
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何使用Gstreamer从v4l2 raspicam源成功显示视频预览(使用ximagesink或autovideosink等基本接收器).

以下管道都没有工作(对不起,如果其中一些是完全废话,我是一个gstreamer新手):

  • 将v4l2-ctl像素格式设置为H264(这就是"v4l2-ctl -V"命令返回的内容)我试过:

    gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-h264,width=640,height=480,framerate=25/1' ! h264parse ! omxh264dec ! videoconvert ! ximagesink
    gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-h264,width=640,height=480,framerate=25/1' ! h264parse ! omxh264dec ! videoconvert ! autovideosink
    
    Run Code Online (Sandbox Code Playgroud)
  • 将v4l2-ctl像素格式设置为YU12(4:2:0,压缩YUV)我试过:

    gst-launch-1.0 v4l2src device=/dev/video0 ! autovideosink
    gst-launch-1.0 v4l2src device=/dev/video0 ! ximagesink
    
    Run Code Online (Sandbox Code Playgroud)

因此以上命令都不起作用,相机LED无法打开并且gstream返回:

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GetSystemClock
glGetError 0x505
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data flow error
Additional debug info:
gstbasesrc.c(2865): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: 
streaming task paused, reason error (-5) 
Execution ended after 0:00:16.843337147 
Setting pipeline to PAUSED ... 
Setting pipeline to READY ... 
Setting pipeline to NULL ... 
Freeing pipeline ...
Run Code Online (Sandbox Code Playgroud)

请告诉我通过Gstreamer进行基本预览的正确方向.

我的最终目标是让raspicam/gstreamer与Python/Pyside/Phonon一起工作

编辑:"xvinfo"命令告诉我"没有适配器存在",xvimagesink从一开始就不起作用.我不确定这是否与问题有关.Raspbian正在运行X.Org版本1.12.4

Ber*_*_zg 6

在raspicam v4l2驱动程序和gstreamer之间同意支持的解决方案似乎存在一个错误.您可以在官方RasPi论坛上找到更多信息.感谢Raspberry Pi Foundation的优秀开发人员,还有一个解决方法/修复方法.

加载驱动程序时,只需添加"gst_v4l2src_is_broken = 1"标志,如下所示:

sudo modprobe bcm2835-v4l2 gst_v4l2src_is_broken=1
Run Code Online (Sandbox Code Playgroud)

希望这也会帮助其他人.