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 ...
随机推荐
- Surge多配置文件聚合配置方法
目录 摘要 1. Surge配置原理 2. Surge托管配置 3. Surge多配置文件聚合配置 (1)找到配置文件 (2)编辑配置文件 参考 摘要 Surge 是一个在 macOS 和iOS 平台 ...
- docker-compose 安装 mysql:5.7.31
目录 一.新建一个启动服务的目录 二.新建文件docker-compose.yml 三.新建角本文件 init-mysql.sh 四.实使化目录和配置文件 启动服务 登陆mysql 其它操作 参考文档 ...
- Ubuntu中安装OpenSSL
一.前期准备 1.1 压缩包下载 在安装openssl之前,我们需要下载对应的压缩包 https://www.openssl.org/source/openssl-3.0.1.tar.gz 此压缩包可 ...
- C语言:卖鸭子问题---递归法实现
1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只.这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子? 代码: #include<st ...
- PageOffice实现文件在线安全预览——禁止编辑、下载、复制等
实际应用中,很多时候不仅需要在线编辑文件,还需要在线安全预览文件,要求不能复制.下载.另存到本地等情况.pageoffice可以实现文件在线安全预览,禁止:编辑.复制.粘贴.右键菜单.选择.下载.另存 ...
- sass的几种输出格式,你都知道吗
输出格式说明 Sass编译输出的CSS格式可以自定义. 有4种输出格式: :nested – 嵌套格式 :expanded – 展开格式 :compact – 紧凑格式 :compressed – 压 ...
- Python 多线程、线程池、协程 爬虫
多线程生产者消费者模型爬虫 import queue import requests from bs4 import BeautifulSoup import threading import tim ...
- 为什么下载程序的时候会提示win-amd64.exe
- golang kmp算法实现
// 不多逼逼直接上代码.原理的话可以参考下面的链接.讲的非常清晰package main import "fmt" func genNext(s string) []int { ...
- EndNote里参考文献的期刊名显示错误怎么办?
本文介绍EndNote文献管理软件导入文献引用时,期刊名称带有%J前缀从而不能正常显示的解决方法. 前期的文章中,我们多次介绍了文献管理软件EndNote的具体使用方法与技巧.而在使用EndN ...