因最近想通过在FPGA上实现视频的编解码,刚好手上有一个zynqMP开发板,借此机会和大家一起学习一下xilinx官方的VCU IP
制作不易,记得三连哦,给我动力,持续更新!!!
完整工程文件下载:zu7ev实现vcu视频编解码工程 ,包括FPGA、petalinux完整工程
在这篇博文中,我们将深入探索如何在 Xilinx ZynqMP 平台上配置视频编解码单元(VCU),实现高效的视频编解码、DP 显示输出以及通过网络将视频上传至服务器。文章将带领你从零开始,逐步掌握 ZynqMP 上 VCU 的配置与使用,结合 GStreamer 实现硬件级视频压缩。无论你是初学者还是有经验的开发者,这篇手把手教程都将帮助你快速上手,并为你的项目提供强有力的支持。
硬件平台介绍:
vivado:vivado2021.2
petalinux:petalinux2021.2
开发板:zu7ev
视频编码格式:H264/H265
实现预期效果
通过相机采集视频数据,传送到FPGA,然后把视频通过vcu编码,输出到网络服务器并通过DP输出到显示器实时显示。全部操作在linux操作系统进行,可以实现开机自启。
设计框图
本项目大体框图如下
工程设计
工程设计框图
VCU配置
主要配置参数介绍
Coding Standard:选择 AVC 或 HEVC,AVC:H264 HEVC:H265 |
Coding Type:选择要用于编码的 GOP 结构 – Intra Frame Only – 仅限 I 帧 – Intra & Inter Frame – I 帧、 B 帧和 P 帧 只有在选择 Intra 和 Inter Frame 时才能启用编码器的缓存。 |
Resolution:选择以下分辨率之一 – 1280×720 – 1920×1080 – 3840×2160 – 4096×2160 – 7680×4320 |
Frames Per Second:帧率选择,选择 15、 30、 45 或 60 fps。在 7680×4320 分辨率下,只有 15fps 可用。
Color Format:选择以下颜色格式之一 – 4:0:0 – 单色 – 4:2:0 – 4:2:2
Color Depth:选择每通道 8 位或 10 位。
Use Encoder Buffer:选择是否要使用编码器缓存。只有在选择了 Intra 和 Inter Frame 之后才能启用编码器的缓存。编码器缓存通过缓存可编程逻辑中的数据来减少外部存储器的带宽,但它可能会略微降低视频的质量。
Memory Resource Type:选择下列存储器类型选项: – URAM ONLY – BRAM ONLY – COMBINATION – URAM & BRAM
Max Number of Encoder Streams:选择 1 到 8 个流。确定存储器要求 |
仅当“Basic Configuration”标签设置如下时,系统才会启用编码器缓存的高级配置选项: • “Coding Type”是“Intra & Inter Frame” • “Use Encoder Buffer”被选中
“Advanced Configuration”标签上的参数设置如下: • Manual Override:选择此选项可覆盖由 IP 集成器计算的编码器缓存存储器的大小。 • Memory Depth (Kbytes):如果选中“Manual Override”复选框,则可以输入 0 到 7,000 Kbyte 的存储器大小。
• B Frame:选择以下选项之一:
° NONE – 最低时延 ° STANDARD – GOP 配置 IPPP (内部周期为 30 ms)
• Motion Vector Range:决定编码器缓存的大小:
° LOW ° MEDIUM ° HIGH
• CORE Clk (MHz):选择 1 – 667 MHz 的时钟频率
其余部分vivado设计如下所示
接下来编译vivado工程,然后生成xsa硬件文件,导入到petalinux
在petalinux配置好设备树文件,内核,根文件系统
根文件系统配置
增加 packagegroup-petalinux-gstreamer。 gstreamer 是用于驱动 VCU 的软件组件。
增加packagegroup-petalinux-opencv 。用于处理视频数据
增加packagegroup-petalinux-python-modules 。用于处理视频数据
还需要增加一些基础库的group,如xl1、xen。utils等
然后编译petalinux,生成BOOT.bin、内核Image、设备树system.deb等
把BOOT放入FLASH,其余两个放入emmc进行启动。
验证设计
开机登录petalinux,并自启动程序
并且通过DP启动显示器界面
运行程序,启动相机视频采集,并显示到显示器
由于我手头只有单色的senser板卡,如果换为彩色的是一样的,都是通用的
并且在网络服务器也是可以看到视频输出
至此,我们的项目就彻底验证完成了!!
制作不易,记得三连哦,给我动力,持续更新!!!
完整工程文件下载:zu7ev实现vcu视频编解码工程 ,包括FPGA、petalinux完整工程
评论前必须登录!
注册