NXP i.MX 8M Mini的视频开发案例分享 (下)
本文主要介绍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 .


GigE工业相机上电,通过网线将PC机和GigE工业相机连接至相同路由器,并执行如下命令运行IpConfigurator工具,配置IP地址获取方式。
Host# cd pylon5/bin/
Host# ./IpConfigurator

在IpConfigurator界面中,点击Refresh刷新并识别GigE工业相机。由配置界面可看到GigE工业相机支持静态IP(Static IP)和动态IP(DHCP)两种模式。本次采用动态IP模式进行测试,选择DHCP选项,点击Save保存,测试获取的IP地址为192.168.0.165。

关闭IpConfigurator工具窗口,执行如下命令运行PylonViewerApp工具,配置采集帧率等参数。
Host# ./PylonViewerApp

在PylonViewerApp界面中双击选中GigE网络相机设备,User Level选择Expert,点击打开相机配置栏目,如下所示。

点击打开“Configuration Sets”栏目,并按照下图内容进行初始化。
设置“Configuration Sets”栏目下的“User Set Selector”选项和“Default Startup Set”选项为“Default User Set”。

点击打开“Transport Layer”栏目,设置相机网络包配置。
设置“Transport Layer”栏目下的“Packet Size”设置为1500。“Inter-Packet Delay”设置为4500。“Inter-Packet Delay”参数值会影响采集帧率,请根据实际情况进行修改。
点击菜单栏 按钮进行连续采集,即可通过PylonViewerApp查看GigE网络相机采集到的图像。

可设置“Acquisition Controls”栏目下的“Exposure time”数值调节相机曝光时间,数值越大,帧数越低,测试使用相机默认值3000us,对应帧率为274fps。

可在“AOI Controls”栏目设置相机采集图像大小,默认大小为720x540。

3.2 图像采集测试
通过网线将评估板RGMII ETH接口和GigE工业相机连接至相同路由器,评估板默认支持HDMI显示,请先正确连接HDMI显示屏。
备注:如GigE工业相机配置为静态IP,则需通过网线将评估板和GigE工业相机直连,并设置评估板和GigE工业相机为同一网段。

将“gige_capture\lib\”目录下的库文件压缩包libpylon_arm64.tar.gz拷贝至评估板文件系统任意目录,并进入压缩包所在目录执行如下命令将其解压至“/usr/lib/”目录。
Target# tar -xvf libpylon_arm64.tar.gz -C /usr/lib

GigE工业相机上电,进入评估板文件系统,请将bin目录下的可执行文件gige_capture拷贝至评估板文件系统任意路径下。在gige_capture可执行文件所在目录下执行如下命令查看程序参数说明。
Target# ./gige_capture --help

执行如下命令扫描局域网内的GigE工业相机,并测试GigE工业相机图像采集帧率。
Target# ./gige_capture -m scan

并执行如下命令关闭Weston界面,将GigE工业相机采集的图像显示到显示屏上。若图像显示不清晰,请旋转旋钮调节相机镜头光圈和焦距,GigE工业相机会以设置的分辨率720x540进行实时采集,本次实测采集并显示的处理帧率为138fps,进行采集并显示的帧率会受硬件性能和网络环境的影响有一定的波动。
Target# systemctl stop weston@root.service
Target# ./gige_capture -m display -o /dev/fb


本次测试的CPU占用率如下所示。

执行如下命令,将GigE工业相机采集的图像以gray8的格式保存至指定路径的文件中。采集并存储的帧数会受设备的读写速率影响,本次实测为31fps。
Target# ./gige_capture -m save -o /home/root/test.gray8

将保存的文件拷贝至Windows下,使用“gige_capture\tools\yuvplayer.exe”程序打开test.gray8文件,点击“Size -> Custom”,设置图像格式Width为720,Height为540,点击“Color -> Y”,点击播放按钮即可显示图像,如下所示。



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

编译完成后,将在当前目录下生成可执行文件。

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原始格式)视频文件。

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

HDMI显示效果如下。播放结束或按"Ctrl + C"退出视频播放后,串口调试终端将提示视频输出帧率。


本案例视频解码的Pipeline工作流程如下所示。

该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。

图 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

本案例视频与音频同时解码的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

HDMI显示效果如下。播放结束或按"Ctrl + C"退出视频播放后,串口调试终端将提示视频输出帧率。


命令参数解释:
(1) filesrc:读取文件。
(2) qtdemux:解析MP4文件,提取数据。
(3) queue:缓存数据。
(4) h265parse:使用H.265解释器。
(5) vpudec:使用VPU解码器解码H.265视频文件。
(6) waylandsink:选择显示设备并进行输出,设置输出分辨率为1920 x 1080。
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"退出视频播放后,串口调试终端将提示视频输出帧率。

参数解释:
(1) filesrc:读取文件。
(2) queue:缓存数据。
(3) h265parse:使用H.265解释器。
(4) vpudec:使用VPU解码器解码H.265视频文件。
(5) waylandsink:选择显示设备并进行输出,设置输出分辨率为1920 x 1080。
如果你还想了解更多嵌入式应用的相关知识,欢迎关注Tronlong创龙科技~
NXP i.MX 8M Mini的视频开发案例分享 (下)的更多相关文章
- 基于Flink的视频直播案例(下)
目录 直播数字化运营 结果写入Elasticsearch 第二种思路 Flink实现总结 Elasticsearch部分 Kibana部分 直播数字化运营 业务目标 全站观看直播总人数以及走势 房间直 ...
- 「含源码」关于NXP IMX8 Mini的图形开发指南(GPU)案例分享!
前言 Graphical Demo框架提供了对平台相关依赖的抽象.Graphical应用的通用封装,如模型加载.纹理加载.着色器编译等,以及其它一些通用的应用逻辑处理的封装,使得使用框架的开发人员(以 ...
- CrazyBingo mini VIP 2.0 视频开发板 NIOS移植例程(原创)
创建一个NIOS环境 注意事项 前言:(先了解下硬件) 本板卡目前主要适合以下几类人: (1)对FPGA 逻辑开发有强烈的兴趣,并且有一定的HDL基础 (2)计划采用FPGA图像架构,学习并研究图像算 ...
- Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Android IOS WebRTC 音视频开发总结(八十二)-- VP8对VP9,质量还是码率?
本文主要介绍VP9(我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blacke ...
- 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识
驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...
- 浅谈iOS视频开发
浅谈iOS视频开发 这段时间对视频开发进行了一些了解,在这里和大家分享一下我自己觉得学习步骤和资料,希望对那些对视频感兴趣的朋友有些帮助. 一.iOS系统自带播放器 要了解iOS视频开发,首先我们从 ...
- Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会
文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...
- Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验
前段时间在搞webrtc iOS开发,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面都是开发过程中的经验总结,转载请说明出处(博客园RTC.Blacker): 1. IO ...
随机推荐
- Competition Set - 模拟赛 I
HNOI2017 Day2 2023-06-10 注:Day2T2换为BJOI2017Day2T1,以匹配学习进度 A.大佬 B.抛硬币 C.喷式水战改 A 大佬 你需要用 \(n\) 天挑战一名大佬 ...
- 【OpenVINO™】在 C# 中使用OpenVINO™ 部署PP-YOLOE实现物体检测
前言 OpenVINO C# API 是一个 OpenVINO 的 .Net wrapper,应用最新的 OpenVINO 库开发,通过 OpenVINO C API 实现 .Net 对 OpenV ...
- CentOS7部署Redis(离线单机)
一.检查是否安装 ## 检查是否安装了Redis [root@localhost /]# ps -ef | grep redis ## 存在就删除 [root@localhost /]# sudo y ...
- 5G MEC 之本地分流实现方式
目录 文章目录 目录 前言 LADN ULCL IPv6 Multi-homing(BP) 典型应用场景 前言 最近同事发表了一片非常棒的文章,笔者在此之上进行了补充,转发至此与大家分享. 本地分流作 ...
- 用 C 语言开发一门编程语言 — 条件分支
目录 文章目录 目录 前文列表 条件分支 排序函数 等于函数 if 函数 递归函数 源代码 前文列表 <用 C 语言开发一门编程语言 - 交互式解析器> <用 C 语言开发一门编程语 ...
- 训练营 |【AIRIOT大学计划暑期训练营】第三期即将开营,报名从速!
培养新生力量,聚焦产业融合.为了促进物联网产业的纵深发展和创新,推进教育链.产业链与创新链的有机衔接,提高学生理论.实践和创新能力,为行业培养更多优秀人才,航天科技控股集团股份有限公司将于2023年7 ...
- docker安装Kafka(windows版)
windows环境安装docker参考安装docker桌面版(Windows) 这一步如果出现报错的话可以直接输入wsl -l -v命令来查看当前Ubuntu的wsl版本 安装Kafka需要先安装 z ...
- Cmockery学习
什么是cmockery? 是一个轻量级的C语言单元测试框架 什么是单元测试? 单元测试就是测试一个系统的最小实现单元,往往是函数 示例解析 #include <stdarg.h> #inc ...
- 8.18考试总结(NOIP模拟43)[第一题·第二题·第三题·第四题]
愿你和重要的人,在来日重逢. 前言 题目名字起的很随意... 这天 Luogu 的运势好像是大凶(忌:打模拟赛,注意报零). 但是考得还不错,拿到了这么多场模拟赛以来第二三个场上AC. 所以说,我爱大 ...
- kettle从入门到精通 第四十七课 ETL之kettle mongo output 写入
1.上一节课我们学习了mongo input读取步骤,本节课我们一起学习下mongo out 写入步骤,该步骤可以将数据写入到mongo中,如下图所示. 2. 配置mongo连接,有两种方式,如截图所 ...