Gstreamer1.0+arm多路视频输入输出开发

一、背景:

      【软件】ARM使用Imx6q,kernel使用4.9.88内核版本,从nxp官网获取yocto来编译整个BSP工程。rootfs使用包含qt5的版本,gstreamer1.0版本是1.12.2.

NXP提供的yocto均为免费,其中我使用的是 -b imx-linux-rocko -m imx-4.9.88-2.0.0_ga.xm这个版本的BSP。

Imx6q支持的硬件IPU/VPU功能,在gstreamer中已经以插件和补丁形式提供支持。可以直接搜索:gst-inspect-1.0 |grep imx,可以看到有视频转换、视频编解码、音频编解码相关的插件。

      【硬件】arm的imx6q的cpu;

                    2路摄像头输入:1路mipi ov5640可见光摄像头,1路dvp 红外摄像头;

                    2路摄像头输出:1路RGB24的LCD液晶屏,1路HDMI高清输出;

      【驱动】可见光摄像头驱动为ov5640的驱动,一般内核自带(配置好dts里面i2c的地址就OK);

                      红外摄像头驱动:自己写的一个v4l2标准驱动,摄像头那边接口为DVP-8bits接口,数据格式为自定义原始数据;

       【应用】使用gstreamer1.0框架,我们实现了一个无界面的demon工具,可以实现对2路摄像头数据的2路输出显示。

                      具体功能包括:2路视频分别显示;视频数据帧提取与修改;LCD与HDMI分别输出;视频硬件编码;视频硬件转码;视频文件存储。

                      使用到的gstreamer1.0的插件:

                          软件插件:appsink\appsrc\avimux\mp4mux

                          硬件插件:imxv4l2src\imxv4l2videosrc\overlaysink\imxvideoconvert_ipu\vpuenc_jpeg\vpuenc_h264\vpuenc_mpeg4

        【视频流】

                         可见光:camera1->imxv4l2src->overlaysink->LCD/HDMI

                          红外光:camera0->imxv4l2videosrc->appsink ->[数据处理] ->appsrc->overlaysink->LCD/HDMI

         【效果】使用gstreamer1.0作为视频流开发框架,非常方便。同时使用硬件插件来实现硬件编解码、硬件转码与显示,节约CPU资源。

                      经过测试,可以发现,单独显示可见光或者红外,CPU占用率非常低,不到10%。

         【扩展1】:伪彩色显示

                         我们已经支持了灰度图像的伪彩色添加功能;

         【扩展2】:视频融合

                         使用gstreamer1.0的插件videomixer实现视频融合||添加自己的视频处理算法融合

        【扩展3】:qt界面

                       该说明内容比较多,放在下一节介绍。

          【代码】:https://github.com/tttg/Demon_gstreamer1.0

你可能感兴趣的:(视频处理,linux)