厦门莫格电气自动化有限公司销售ABB IMASO11 ,欢迎来电咨询!
ABB IMASO11
ABB IMASO11
您迈开询价的一小步,我还您成功的一大步。
1). 简介
Gstreamer多媒体开发框架是当前嵌入式Linux设备***为常用的多媒体应用处理平台,关于Gstreamer开发框架的介绍请参考我们过往发表的其他相关文章,这里不再赘述而是直接展示使用C语言基于Gstreamer进行摄像头处理的示例程序开发。
本文所演示的平台来自于Toradex Aaplis iMX6D嵌入式平台,这个平台是基于NXP iMX6系列ARM处理器,支持双核心Cortex-A9。
2). 准备
a). ApalisiMX6D ARM核心版配合ApalisIxora载板,连接调试串口到开发主机,具体操作方法可以参考这里。
b). Apalis iMX6D操作系统使用Toradex LinuxRelease V2.7b2,***和更新方法请参考这里。
c). 连接一个USB Camera到Ixora载板X8靠上的USB接口,这里使用Logitech 720P摄像头。
3). 配置Ubuntu开发主机
a). 安装Toradex提供的交叉编译SDK,可以基于OpenEmbedded环境自行编译,也可以从这里***我们已经编译好的进行测试使用,***后执行下面命令进行安装,并根据提示设置安装目录。
--------------------
$ ./angstrom-glibc-x86_64-armv7at2hf-neon-v2016.12--S
--------------------
b). 本文使用Eclipse IDE进行开发,请参考这里的文章说明在Eclipse配置基本的SDK交叉编译相关设置。
c). 启动Eclipse并创建Gstreamer新项目
./ 在启动Eclipse之前,首先打开Terminal并执行下面命令配置SDK,配置在Terminal关闭时候失效,下次使用要重新配置。
--------------------
$ source SDK Path/environment-setup-armv7at2hf-vfp-neon-angstrom-linux-gnueabi
--------------------
./ 然后在同一Terminal下启动Eclipse IDE
./ 创建新的Cross GCC项目,这里为gstest
d). 设置Gstreamer编译选项
./gstest –> Properties-> C/C++ Build -> Settings –> Tool Settings -> Cross GCC Compiler-> Miscellaneous -> Other flags 添加下面内容
--------------------
`pkg-config --cflags gstreamer-1.0` -fPIC
--------------------
./ ./gstest –> Properties -> C/C++Build -> Settings –> Tool Settings -> Cross GCC Linker ->Miscellaneous -> Linker flags添加下面内容
--------------------
`pkg-config --libs gstreamer-1.0 gobject-2.0 glib-2.0`
--------------------
4). C程序开发示例
a). 本文演示C程序main程序中主要实现三种Gstreamer应用示例,***种是捕获USB摄像头输入图像并显示在桌面上,第二种是捕获USB摄像头输入图像并进行H.264编码后保存为MKV视频文件,第三种是读取上面第二种保存的视频文件并播放显示在桌面上面。
b). 程序完整代码如下,分别说明如下:
https:///simonqin09/gstest/blob/master/gstest.c
./ Main函数首先创建所需要使用的Elements和bus等,然后初始化gstreamer并创建main loop。
./ 然后通过程序输入参数做三个选项,分别对应上面提到的三个子应用。
./ 应用1 - 捕获USB摄像头输入图像并显示在桌面
// 首先在iMX6上面可以通过命令行先测试好要使用的pipeline,如下:
--------------------
$ gst-launch-1.0 imxv4l2src device=/dev/video3 ! 'video/x-raw,width=1280, height=720, format=(string)YUY2' ! videoconvert ! imxv4l2sink overlay-width=640 overlay-height=480
--------------------
// 然后按照上面测试的pipeline在程序中先创建pipeline,然后再分别调用”gst_element_factory_make”函数匹配实际使用的elements,***后创建pipeline message bus和monitor。
// 然后调用”gst_bin_add_many”函数将刚才生成的elements添加到pipeline中。
// ***后调用”gst_element_link_many”函数顺序链接各个elements