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"退出视频播放后,串口调试终端将提示视频输出帧率。
图 65
本案例视频解码的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 ...
随机推荐
- Solution Set - 加训 CF!
加训一些 CF 题,这里写一些简要题解,可能是草稿. 暂定只做 Div.1 的题和 Div.1+Div.2 的后一半题.
- 让.NET 8 支持 Windows Vista RTM
众所周知,从 Windows 的每次更新又会新增大量 API,这使得兼容不同版本的 Windows 需要花费很大精力.导致现在大量开源项目已经不再兼容一些早期的 Windows 版本,比如 .NET ...
- docker 安装 kafka+zookeeper,golang操作kafka
目录 docker-compose.yml go操作kafka producer 消费者 consumer 消费者 结合gin框架操作kafka go-queue操作kafka 环境: centos8 ...
- Splashtop获5000万美元新投资 成为远程桌面行业独角兽
加利福尼亚州圣何塞,2021 年 1 月 27 日 - 下一代远程访问和远程支持领域的新兴领导者 Splashtop Inc. 完成了新一轮的 5000 万美元融资,其估值已超过了 10 亿美元的独角 ...
- Hugging Face 与 Wiz Research 合作提高人工智能安全性
我们很高兴地宣布,我们正在与 Wiz 合作,目标是提高我们平台和整个 AI/ML 生态系统的安全性. Wiz 研究人员 与 Hugging Face 就我们平台的安全性进行合作并分享了他们的发现. W ...
- webapi添加添加websocket中间件
添加位置 我按照MSDN的例子添加了一个复述客户端响应的中间件.需要注意的时,中间件采用那种方式添加,添加在哪. 哪种方式 我选择创建一条管道分支,只要时ws的连接请求,就转到这个分支 因此,我们需要 ...
- LLM实战:当网页爬虫集成gpt3.5
1. 背景 最近本qiang~关注了一个开源项目Scrapegraph-ai,是关于网页爬虫结合LLM的项目,所以想一探究竟,毕竟当下及未来,LLM终将替代以往的方方面面. 这篇文章主要介绍下该项目, ...
- golang select 和外层的 for 搭配
select语句通常与for循环搭配使用,但并不是必须的. 在某些情况下,select可能会直接放在一个独立的goroutine中,没有外层的for循环. 这通常发生在你知道只会有一次或有限次操作的情 ...
- jquery 给表格添加或删除一行
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Android 12(S) MultiMedia Learning(三)MediaPlayer Native
上一篇MediaPlayer中看到实现一个最简单的播放器只需要5个接口,接下来会看看这些接口实现内容 /************************************************ ...