|  | 
 
| 
本帖最后由 dragongfly 于 2022-9-26 16:23 编辑 $ v* ~: Q0 [5 F
x
EDA365欢迎您登录!您需要 登录 才可以下载或查看,没有帐号?注册  / W) o2 J( b; ~
 在研究华为海思 hi3516A进行视频编码压缩的过程中,针对其压缩码流仅支持本地保存和网络流媒体应用的局限性,提出了一种基于 FPGA 和以太网接口的 H.264码流实时传输方案;Hi3516A 视频编码端采用 RAW_SOCKET 原始套接字协议构建 UDP帧,通过网口传输 H.264 压缩码流到 FPGA平台;FPGA使用一片 2 Gbit 的 DDR3作为数据缓存介质,保证网口速率的匹配和一次传输的 H.264 Nalu包的完整性;利用USB2.0接口回传码流到 PC进行功能测试;从模拟传输本地文件和实际传输视频两方面对系统功能进行测试;模拟传输本地文件测试中,PC端网口发送55,844,864字节本地文件到本系统,USB上位机接收的系统返回数据大小与发送数据大小相同,证明数据传输完整;实际传输视频测试中,MilkPlayer软件播放 USB上位机保存的码流文件,画面流畅,无卡顿及明显丢帧,使用ffmpeg软件解码码流文件,测试表明,数据压缩比均值达143∶1,与系统设定值相比,存在 4%左右的误差,USB上位机12h和 24 h保存接收码流测试中,数据量分别达到 22.3GB和43.5GB,码流文件播放效果良好;因此,此系统能实现 H.264 码流的实时传输,满足设计要求,具有很好的实用价值。/ y3 ^6 w! |* i
 
 3 M& H! G; x: f# S1、方案设计
 & y: _* a1 u- |) {本系统主要由 H.264 码流生成源 Hi3516A平台、网口模块、DDR3模块、USB2.0模块和 USB上位机软件组成,系统框图如图1所示。
 9 H0 C8 T+ R7 }9 W; m
  6 E- b" J  h8 A6 Q( l( F 系统主控制器选择赛灵思公司 spartan6 xc6slx45,此芯片含有43 661个逻辑单元,54 576个触发器,116 个18 kB 块 RAM,最大用户 IO 可 达 358 个,且集成有 GTP、PCIE、MCB等高速硬件控制器,在电子工程领域应用广泛,因此足以支持本设计的资源需求。Hi3516A 平台负责采集 HDMI摄像头数据,采用 H.264算法进行编码压缩,平均码流速率控制在 4 Mbps;生成的码流由 FPGA平台网口模块接收,该模块实现 UDP协议;系统选用1片2 Gbit DDR3 芯片作为缓存介质,以解决速率匹配和数据缓存问题;系统功能的验证由 USB2.0模块将码流数据 PC回传,上位机软件接收并本地保存,而后线下进行数据完整性、视频播放流畅性等系统功能测试分析。
 , {1 C5 `/ ^4 p6 w
 ( r9 J  f( K  c1 E2、H.264 码流源生成模块介绍
 ( y6 ]7 H% M% \: g% G5 O. hHi3516A 是华为海思半导体公司推出的一款多功能通信媒体处理芯片,旨在提供新一代HDIP摄像机 SOC方案,其内部集成 ARMCortex一A7处理器内核及 H.264、H.265、MJPEG、JPEG等硬件编码器,主频可达 600 MHz;具有多路视频实时编码能力,支持的最大输入分辨率可达 5 M Pixel;输入时序为 8/10/12/14 bit RGB Bayer DC时序,BT.601、BT.656、BT.1120和 MIPI、LVDS/Sub一LVDS、HiSPi等;支持 RGMII/GMII 网口输出。此芯片能满足监控领 域的各种场景需求。Hi3516A 采用 ARM 十H.264/AVC硬件编码器的方案实现 H.264 编码,内部各硬件模块和控制器之间采用 ARM 公司先进微控制器总线结构 AMBA3.0实现高速互联,性能强大。( ]1 W. M; X( l' ^
 本设计选用Hi3516A作为 HDMI高清摄像头数据压缩编码平台,利用网口输出编码码流来为系统提供 H.264 码流源。软件工作流程如图2所示。( h+ \( A8 M8 _/ ^5 g
 
   ! P4 m( T9 Y+ \. u5 o鉴于 H.264码流接收端采用FPGA 作为主控制器这一场景,以太网帧的构建从前导码、帧开始符、Mac 帧头、IP层到 UDP层均需用户一一实现,且开始接收以太帧的判定逻辑是识别 Mac 帧头的目的 Mac地址是否为用户所设定的。如此,在 Hi3516A Linux 嵌入式环境下编程实现普通socket协议难以满足该场景需求,普通socket 协议是以用户IP地址为网络通信基础的。与 Linux系统可实现复杂的网络协议栈相比,FPGA仅实现简单的 UDP 协议。为避免Linux 系统和FPGA平台对接时与数据传输无关的其他协议对系统产生干扰,在此 Hi3516A嵌入式平台使用 RAW_SOCKET协议实现 UDP 编程,用户指定目的 Mac 地址使FPGA能准确接收 UDP数据包。结果表明,此种方式成功解决了Hi3516A和FPGA平台的对接问题。) G2 u, @2 k' t; y1 k$ t) x2 p; y
 
 % T2 p# P: \* m( q7 Q$ Y3、FPGA控制逻辑设计1 h7 q- `' t: M  L" @7 I! F0 A$ e
 系统由以太网控制模块,DDR3 控制模块和 USB接口控制模块组成,以太网控制模块完成 H.264 码流的接收,DDR3完成速率匹配和数据缓存功能,USB2.0模块完成数据# q  G4 z- G3 R$ ~& I7 V
 PC回传以便系统功能的测试分析。
 # T  ]/ x2 `% G$ P/ S  G# O5 c# y3.1 以太网接收控制逻辑# r. G; _; s6 k) r
 UDP,即用户数据报协议,适用于图像视频传输及网络监控数据交换等对传输速度要求较高的场合,UDP协议自带寻址信息,只提供端到端的数据传输服务。与TCP的复杂性相比,UDP 协议在FPGA平台具有更高的可实现性。
 & F' O  R' u5 g$ `; f4 X- Z- ]$ ?, r7 M. i9 H. k* @1 B1 L" f4 b& k
 $ _/ C6 A! ^! G/ \% q
 
 | 
 |