本文主要介绍i.MX 8M Mini的视频开发案例,包含基于GStreamer的视频采集、编解码、算法处理、显示以及存储案例,GigE工业相机测试说明,H.265视频硬件解码功能演示说明等。
注:本案例评估版采用的是创龙科技TLIMX8-EVM,它是基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高性能评估板,
由核心板和评估底板组成。ARM Cortex-A53(64-bit)主处理单元主频高达1.6GHz,ARM Cortex-M4实时处理单元主频高达400MHz。处理器采用14nm最新工艺,支持1080P60 H.264视频硬件编解码、1080P60 H.265视频硬件解码、GPU图形加速器。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。正面外观如下图:
3 gige_capture案例
本案例通过评估板千兆网口接入GigE工业相机实现图像采集、图像显示和图像保存的功能。相机型号:acA720-290gm,品牌:Basler,分辨率可配置最大为720x540,帧率可达291fps。相机详细信息见官网链接:www.baslerweb.com/cn/products/cameras/area-scan-cameras/ace/aca720-290gm。
本案例实测帧率为:采集并显示为720x540@138fps,采集并保存为720x540@31fps。
测试案例gige_capture位于产品资料“4-软件资料\Demo\base-demos\”路径下。为方便测试,产品资料中提供了经过验证的测试程序可执行文件,位于gige_capture的bin目录下,源码位于gige_capture的src目录下。
3.1 GigE工业相机配置
本小节使用Basler官方提供的pylonSDK开发包,在PC机Ubuntu中对GigE工业相机进行IP地址获取方式、采集帧率等参数配置。
将“gige_capture\pylonSDK\x86_64\”目录下的pylonSDK-5.1.0.12682-x86_64.tar.gz压缩包拷贝至Ubuntu任意路径,并进入压缩包所在目录执行如下命令将其解压至当前目录下。
Host# tar -xvf pylonSDK-5.1.0.12682-x86_64.tar.gz -C .
图 40
图 41
GigE工业相机上电,通过网线将PC机和GigE工业相机连接至相同路由器,并执行如下命令运行IpConfigurator工具,配置IP地址获取方式。
Host# cd pylon5/bin/
Host# ./IpConfigurator
图 42
在IpConfigurator界面中,点击Refresh刷新并识别GigE工业相机。由配置界面可看到GigE工业相机支持静态IP(Static IP)和动态IP(DHCP)两种模式。本次采用动态IP模式进行测试,选择DHCP选项,点击Save保存,测试获取的IP地址为192.168.0.165。
图 43
关闭IpConfigurator工具窗口,执行如下命令运行PylonViewerApp工具,配置采集帧率等参数。
Host# ./PylonViewerApp
图 44
在PylonViewerApp界面中双击选中GigE网络相机设备,User Level选择Expert,点击打开相机配置栏目,如下所示。
图 45
点击打开“Configuration Sets”栏目,并按照下图内容进行初始化。
设置“Configuration Sets”栏目下的“User Set Selector”选项和“Default Startup Set”选项为“Default User Set”。
图 46
点击打开“Transport Layer”栏目,设置相机网络包配置。
设置“Transport Layer”栏目下的“Packet Size”设置为1500。“Inter-Packet Delay”设置为4500。“Inter-Packet Delay”参数值会影响采集帧率,请根据实际情况进行修改。
点击菜单栏 按钮进行连续采集,即可通过PylonViewerApp查看GigE网络相机采集到的图像。
图 47
可设置“Acquisition Controls”栏目下的“Exposure time”数值调节相机曝光时间,数值越大,帧数越低,测试使用相机默认值3000us,对应帧率为274fps。
图 48
可在“AOI Controls”栏目设置相机采集图像大小,默认大小为720x540。
图 49
3.2 图像采集测试
通过网线将评估板RGMII ETH接口和GigE工业相机连接至相同路由器,评估板默认支持HDMI显示,请先正确连接HDMI显示屏。
备注:如GigE工业相机配置为静态IP,则需通过网线将评估板和GigE工业相机直连,并设置评估板和GigE工业相机为同一网段。
图 50
将“gige_capture\lib\”目录下的库文件压缩包libpylon_arm64.tar.gz拷贝至评估板文件系统任意目录,并进入压缩包所在目录执行如下命令将其解压至“/usr/lib/”目录。
Target# tar -xvf libpylon_arm64.tar.gz -C /usr/lib
图 51
GigE工业相机上电,进入评估板文件系统,请将bin目录下的可执行文件gige_capture拷贝至评估板文件系统任意路径下。在gige_capture可执行文件所在目录下执行如下命令查看程序参数说明。
Target# ./gige_capture --help
图 52
执行如下命令扫描局域网内的GigE工业相机,并测试GigE工业相机图像采集帧率。
Target# ./gige_capture -m scan
图 53
并执行如下命令关闭Weston界面,将GigE工业相机采集的图像显示到显示屏上。若图像显示不清晰,请旋转旋钮调节相机镜头光圈和焦距,GigE工业相机会以设置的分辨率720x540进行实时采集,本次实测采集并显示的处理帧率为138fps,进行采集并显示的帧率会受硬件性能和网络环境的影响有一定的波动。
Target# systemctl stop weston@root.service
Target# ./gige_capture -m display -o /dev/fb
图 54
图 55
本次测试的CPU占用率如下所示。
图 56
执行如下命令,将GigE工业相机采集的图像以gray8的格式保存至指定路径的文件中。采集并存储的帧数会受设备的读写速率影响,本次实测为31fps。
Target# ./gige_capture -m save -o /home/root/test.gray8
图 57
将保存的文件拷贝至Windows下,使用“gige_capture\tools\yuvplayer.exe”程序打开test.gray8文件,点击“Size -> Custom”,设置图像格式Width为720,Height为540,点击“Color -> Y”,点击播放按钮即可显示图像,如下所示。
图 58
图 59
图 60
3.3 案例编译
将gige_capture整个目录拷贝至Ubuntu任意路径,请确保"pylonSDK\arm64\"目录下的pylonSDK-5.1.0.12682-arm64.tar.gz已解压,进入案例src目录执行如下命令加载SDK环境变量并编译。
Host# source /home/tronlong/SDK/environment-setup-aarch64-poky-linux
Host# make
图 61
编译完成后,将在当前目录下生成可执行文件。
图 62
4 H.265视频硬件解码功能演示
i.MX 8M Mini处理器内部含有VPU(Video Processing Unit) G2解码器,可硬件解码H.265视频文件,最高支持1080P60。
本章节主要演示i.MX 8M Mini基于Gstreamer框架,使用VPU G2解码器解码H.265视频文件,包含MKV(HEVC)、MP4(HEVC)视频文件,以及HEVC(H.265原始格式)视频文件。
图 63
i.MX 8 Gstreamer官方参考文档为产品资料“6-开发参考资料\NXP官方参考文档\i.MX 8 GStreamer User Guide.pdf”。文档介绍了部分Gstreamer常用的插件(Plugins)、i.MX 8的专用插件,以及编解码示例。
4.1 解码MKV视频文件
请将评估板HDMI OUT接口连接HDMI显示屏,并将产品资料“4-软件资料\Tools\Video\”目录下的bbb-1920x1080-cfg02.mkv(1080P60带音频)视频文件拷贝至评估板文件系统。进入视频文件所在路径,执行如下命令进行解码,即可在HDMI显示屏显示MKV解码视频。
Target# gst-launch-1.0 -v filesrc location=./bbb-1920x1080-cfg02.mkv ! matroskademux name=demux demux.video_0 ! queue ! h265parse ! vpudec ! queue ! waylandsink window-width=1920 window-height=1080
图 64
HDMI显示效果如下。播放结束或按"Ctrl + C"退出视频播放后,串口调试终端将提示视频输出帧率。
图 65
图 66
本案例视频解码的Pipeline工作流程如下所示。
图 67
该Pipeline由6个Element(Plugins)构成,每个Element实现各自的功能。
(1) filesrc:读取文件。
(2) matroskademux:解析MKV文件,提取数据。
(3) queue:缓存数据。
(4) h265parse:使用H.265解释器。
(5) vpudec:使用VPU解码器解码H.265视频文件。
(6) waylandsink:选择显示设备并进行输出,设置输出分辨率为1920 x 1080。
图 68
图 69
bbb-1920x1080-cfg02.mkv为带音频的视频文件,如需同时播放视频和音频,请将创龙科技TL3106音频模块插至J10接口,并将模块的LINE OUT接口连接耳机或音箱。
图 70
进入评估板文件系统执行如下命令,在命令中增加音频解码与播放参数,即可同时播放视频和音频。
Target# gst-launch-1.0 -v filesrc location=./bbb-1920x1080-cfg02.mkv ! matroskademux name=demux demux.audio_0 ! queue ! decodebin ! audioconvert ! audioresample ! autoaudiosink demux.video_0 ! queue ! h265parse ! vpudec ! queue ! waylandsink window-width=1920 window-height=1080
图 71
图 72
本案例视频与音频同时解码的Pipeline工作流程如下所示。
图 73
4.2 解码MP4视频文件
请将评估板HDMI OUT接口连接HDMI显示屏,并将产品资料“4-软件资料\Tools\Video\”目录下的Elecard_about_Tomsk_part1_HEVC_1080p.mp4(1080P25)视频文件拷贝至评估板文件系统。进入视频文件所在路径,执行如下命令进行解码,即可在HDMI显示屏显示MP4解码视频。
Target# gst-launch-1.0 -v filesrc location=./Elecard_about_Tomsk_part1_HEVC_1080p.mp4 ! qtdemux name=demux demux.video_0 ! queue ! h265parse ! vpudec ! queue ! waylandsink window-width=1920 window-height=1080
图 74
图 75
HDMI显示效果如下。播放结束或按"Ctrl + C"退出视频播放后,串口调试终端将提示视频输出帧率。
图 76
图 77
命令参数解释:
(1) filesrc:读取文件。
(2) qtdemux:解析MP4文件,提取数据。
(3) queue:缓存数据。
(4) h265parse:使用H.265解释器。
(5) vpudec:使用VPU解码器解码H.265视频文件。
(6) waylandsink:选择显示设备并进行输出,设置输出分辨率为1920 x 1080。
图 78
4.3 解码HEVC视频文件
请将评估板HDMI OUT接口连接HDMI显示屏,并将产品资料“4-软件资料\Tools\Video\”目录下的sample_1920x1080.hevc(1080P30)视频文件拷贝至评估板文件系统。进入视频文件所在路径,执行如下命令进行解码,即可在HDMI显示屏显示HEVC(H.265原始格式)解码视频。
Target# gst-launch-1.0 -v filesrc location=sample_1920x1080.hevc ! queue ! h265parse ! vpudec ! queue ! waylandsink window-width=1920 window-height=1080
图 79
HDMI显示效果如下。播放结束或按"Ctrl + C"退出视频播放后,串口调试终端将提示视频输出帧率。
图 80
图 81
参数解释:
(1) filesrc:读取文件。
(2) queue:缓存数据。
(3) h265parse:使用H.265解释器。
(4) vpudec:使用VPU解码器解码H.265视频文件。
(5) waylandsink:选择显示设备并进行输出,设置输出分辨率为1920 x 1080。
如果你还想了解更多嵌入式应用的相关知识,欢迎关注Tronlong创龙科技~