(中北大学 电子测试技术国家重点实验室,太原 030051)
伴随着移动通信技术标准从1 G~4 G,再到5 G的迭代更新,数字视频质量也从标清,高清,全高清到超高清发生了翻天的改变[1],随之而来的是海量的视频数据和传输过程中的带宽压力。多媒体处理技术的发展产生诸多对庞大原始视频数据的视频压缩编码算法,应用比较广泛的有H.264、H.265、JPEG、MJPEG等,不同的编码算法适用于不同的场合,从软件处理到硬件编码,实现方式也不尽相同[2-3]。国内可查的使用嵌入式平台进行视频编码的有中北大学仪器科学与动态测试教育部重点实验室,该实验室以TMS320C6678 DSP平台实现的HEVC硬件H.265视频压缩算法,压缩后视频数据减少大约 39~74%[1],效果较好。不少学者利用计算机软件进行编码算法研究,如电子科技大学的朱艳玲提出的基于H.264宏块编解码算法的研究[4]。为了响应国家对集成电路行业的扶持政策,本设计选用华为海思半导体的Hi3516A平台,此平台支持H.264、H.265、MPEG等编码算法,综合考虑编码效率、容错能力、网络亲和性等因素,选择H.264算法进行硬件编码。海思平台应用于安防监控领域的多种场景,侧重IP摄像机的系统布局[5-6]。但面对摄像头采集的视频数据生成的编码码流远距离传输问题,海思平台就显得捉襟见肘[7],因此本系统利用海思平台网络接口创造性地使用RAW_SOCKET协议将编码码流传输至FPGA平台[8-9],FPGA平台能很好地实现较于TCP(transmission control protocol)协议相对简单的UDP(user datagram protocol)协议,可成功对接海思平台,完成H.264码流的接收。本文着重于介绍如何利用FPGA进行H.264码流传输,最后介绍系统功能的测试。
本系统主要由H.264码流生成源Hi3516A平台、网口模块、DDR3模块、USB2.0模块和USB上位机软件组成,系统框图如图1所示。
图1 系统总体框图
系统主控制器选择赛灵思公司spartan6 xc6slx45,此芯片含有43 661个逻辑单元,54 576个触发器,116个18 kB块RAM,最大用户IO可达358个,且集成有GTP、PCIE、MCB等高速硬件控制器,在电子工程领域应用广泛,因此足以支持本设计的资源需求[10-11]。Hi3516A平台负责采集HDMI摄像头数据,采用H.264算法进行编码压缩,平均码流速率控制在4 Mbps;生成的码流由FPGA平台网口模块接收,该模块实现UDP协议;系统选用1片2 Gbit DDR3芯片作为缓存介质,以解决速率匹配和数据缓存问题;系统功能的验证由USB2.0模块将码流数据PC回传,上位机软件接收并本地保存,而后线下进行数据完整性、视频播放流畅性等系统功能测试分析。
Hi3516A是华为海思半导体公司推出的一款多功能通信媒体处理芯片,旨在提供新一代HD IP摄像机SOC方案,其内部集成ARM Cortex-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网口输出。此芯片能满足监控领域的各种场景需求[12-13]。Hi3516A采用ARM+H.264/AVC硬件编码器的方案实现H.264编码,内部各硬件模块和控制器之间采用ARM公司先进微控制器总线结构AMBA3.0实现高速互联,性能强大[14-15]。
本设计选用Hi3516A作为HDMI高清摄像头数据压缩编码平台,利用网口输出编码码流来为系统提供H.264码流源。软件工作流程如图2所示。
图2 Hi3516A软件实现流程图
鉴于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平台的对接问题。
系统由以太网控制模块,DDR3控制模块和USB接口控制模块组成,以太网控制模块完成H.264码流的接收,DDR3完成速率匹配和数据缓存功能,USB2.0模块完成数据PC回传以便系统功能的测试分析。
UDP,即用户数据报协议,适用于图像视频传输及网络监控数据交换等对传输速度要求较高的场合,UDP协议自带寻址信息,只提供端到端的数据传输服务。与TCP的复杂性相比,UDP协议在FPGA平台具有更高的可实现性。综合考虑,系统选用UDP协议来完成码流接收。完整的以太网帧结构层次和UDP接收数据状态转换逻辑如图3~4所示。
图3 以太网帧结构层次
图4 UDP接受数据状态转换逻辑
硬件上选用Micron公司2Gbit容量的DDR3-SDRAM存储芯片MT41J128M16LA-187E作为缓存介质,赛灵思公司ISE开发软件提供MIG(Memory Interface Generator) IP核来为xc6slx45生成DDR3控制器设计模块,MIG IP核其逻辑框图如图5所示[16]。此种方式屏蔽DDR3[17]复杂的接口时序设计,简化为简单命令FIFO和数据FIFO的操作,用户可通过USER Logic来灵活快速地设计自己的DDR控制逻辑。
图5 MIG IP核逻辑功能示意图
本系统将MIG IP核配置为双端口实现码流的边写边读功能,端口Port 0和Port 1均为64 bit宽度,时钟速率为312.5 MHz。DDR3写FIFO时有数据64 bit对齐要求,此模块将以太网模块接收的H.264码流字节组成64 bit宽度,以突发写模式连续写进DDR3中,突发长度1。DDR3的读取控制信号由USB 2.0模块产生,以突发读模式读取DDR3中数据,突发长度为64,即一次读取512字节(64*64 bit/8)的数据块。为保证每次读DDR信号到来时读FIFO中有足够的有效数据,本模块设计了写计数变量receive_counter和读计数变量read_counter,只有当写计数大于读计数时才生成有效的读命令信号。图6为DDR读写数据流模式,图7为DDR读写时chipscope抓取到的H.264码流I帧Nalu单元起始码(00 00 00 01)。
图6 DDR读写数据流模式
图7 DDR读写过程抓取Nalu起始码
采用Cypress公司EZ-USB FX2LP系列的CY7C68013A作为USB接口芯片,此芯片内部集成8 051微控制器,可支持的时钟为48 MHz,24 MHz,12 MHz,且含有小容量片上RAM,满足其固件程序的运行。该芯片自带的4 kB FIFO足以支持其在Master模式或Slave模式下所有数据传输应用场合[18-19]。
本模块通过配置FX2固件程序使该芯片工作在Slave FIFO异步读写模式,EP2输出端点和EP6输入端点各配置2个512 B的FIFO,其中一个FIFO写满或读空的情况下会转向另一个FIFO的读写。FX2固件相关寄存器配置如表1所示。
通过修改FX2官方提供的上位机源码添加接收数据的本地保存功能,此上位机可实现接收成功时数据自动保存到本地文件功能,输入输出端口选择功能,USB设备选择功能,传输数据块大小选择功能(仅支持512倍数的数据块大小),数据接收成功失败计数功能(以512 B或kB为单位)。界面如图8所示。
表1 FX2固件相关寄存器配置
图8 USB上位机界面
系统功能的测试从模拟传输本地文件和实际传输Hi3516A编码生成的H.264码流两方面进行。模拟本地文件传输示意图如图9所示,PC端使用RAW_SOCKET编程实现UDP协议,将本地8 023-2 015.pdf文件(55 844 864字节)通过PC端网口发送到此H.264码流传输系统。
图9 模拟本地文件传输示意图
通过对比原始文件和上位机接收到的数据文件来测试系统传输数据的完整性。使用UltraEdit软件打开原始文件和接收到的数据文件,对比结果如图10所示。
图10 上位机接收文件和原始本地文件数据对比
可发现经系统传输后接收文件从开始到最后地址0x03541ff0和原始文件数据相匹配,数据大小皆为55 844 864字节,因此可得出数据传输完整的结论。
H.264码流传输实物图如图11所示。
图11 系统实物图
HDMI摄像头,Hi3516A,FPGA依次上电,系统稳定3 s后,在Hi3516A终端串口输入命令./sil9135_test,测试HDMI摄像头是否成功识别,如图12所示。
图12 HDMI摄像头视频输入测试
串口打印结果mode:progressive表示视频为逐行扫描格式,w:1920表示视频分辨率为1 920*1 080。终端输入./Hi3516A_hdmi_rawsocket命令启动系统编码,2 s等待编码延迟后,启动USB上位机接收码流数据,上位机显示接收数据量大于51 200,即50 MB字节时,停止接收数据。
通过MilkPlayer软件播放保存的码流文件,系统传输后码流文件播放和摄像头原始图像显示对比如图13所示。
图13 码流文件播放图像和摄像头原始图像对比效果
由图13可知,画面显示完整,细节清晰,播放流畅,无明显卡顿及花屏绿屏等丢帧乱码现象。
利用FFmpeg软件[20]解码上位机接收到的码流文件为YUV4:2:0格式,解码命令为ffmpeg -i MJTST.h264 -vcodecrawvideo-an MJTST.yuv。参数i指定输入文件,vcodec指定解码对象为视频文件,rawvideo指定解码为原始yuv格式视频数据。如图14所示。
图14 FFmpeg解码H.264码流文件
如图14所示,从解码结果中可提取视频时长、图像大小、比特率、帧率、帧数、文件大小等信息,统计结果如表2所示。
表2 FFmpeg解码H.264码流文件结果统计
其中,平均码率为H.264文件大小与视频时长的比值,帧率为帧数与视频时长的比值,压缩比为解码后YUV文件大小与H.264文件大小的比值。由表2统计结果可知图像大小为1 920*1 080,视频帧率为25 fps,符合编码设定参数,由5组数据可计算平均码率为4 261.6 kbps,与设定的码率4 096相比,有(4 261.6-4 096)/4 096=4%的误差,平均压缩比为143,编码效果良好。
经测试,系统在12 h左右本地保存数据量达22.3 GB,24 h左右数据量达43.5 GB,且播放存在部分卡顿现象,2 s左右能自动恢复流畅播放,可认为系统能够完成长时间传输及存储码流的任务。
综合上述分析,可得出系统数据传输完整,编码效果良好,传输及存储码流时长达到设计要求的结论,此系统成功实现了H.264码流实时传输的设计任务。
此设计实现的H.264码流传输系统能成功对接Hi3516A平台的网口,将编码码流通过FPGA进行处理和转发,在海思半导体平台原有IP摄像机和网络流媒体应用方案的基础上,极大拓展了其应用可能性,如在航空航天等一些需要大量图像数据远距离传输的场合,此系统可突破原网络双绞线传输百米的限制,将图像数据从高空到地面远距离回传以进行后续的分析利用。本系统也存在需改进之处,如使用USB2.0接口回传数据,在后续的研究开发中,可将其拓展为已相当成熟的USB3.0接口,此处Hi3516 A 4 Mbps的输出码流速率情况下USB2.0接口也足以满足传输速度需求。另外系统还可使用LVDS、RS485/422等其它接口进行数据的转发处理以增加其多场合实用性。