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

时间:2014-09-19 19:33:53

标签: raspberry-pi linux-device-driver gstreamer raspbian v4l2

过去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

Gstreamer在基本" Hello world"命令:

gst-launch-1.0 videotestsrc ! ximagesink

但是,我无法弄清楚如何使用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
    
  • 将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
    

因此上述命令均无效,相机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 ...

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

我的最终目标是让raspicam / gstreamer使用Python / Pyside / Phonon

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

1 个答案:

答案 0 :(得分:6)

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

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

sudo modprobe bcm2835-v4l2 gst_v4l2src_is_broken=1

希望这也可以帮助其他人。