一、背景:
【软件】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