APP下载

基于H.264的无线局域视频通信终端的研发

2013-10-15沈龙梅李小龙宋占伟

吉林大学学报(信息科学版) 2013年5期
关键词:分片调用嵌入式

马 玉, 沈龙梅, 李小龙, 宋占伟

(吉林大学 电子科学与工程学院, 长春 130012)

0 引 言

随着计算机网络通信技术迅猛发展, 人们对可视产品的高品质、 便携式的需求日益强烈, 如视频交互教学、 视频监控, 国际会议等, 而这些业务的核心就是视频压缩编码技术、 网络多媒体传输技术和嵌入式技术[1]。

流式传输技术其边下载、 边播放的特点, 解决了视频文件下载时间过长的问题, 适应网络化的发展趋势, 对系统缓存容量的需求大大降低, 并能使人们连续欣赏更高品质的视频效果。H.264视频编码标准的编码质量和压缩比原有的视频编码标准都有了明显的提高, 在相同的视觉感知质量上, 编码效率比H.263, MPEG-2和MPEG-4提高了50%左右, 并且其更好的网络友好性适用于嵌入式流媒体终端使用[2-4]。

为解决目前大多数教学系统移动性不强的问题, 笔者通过组建一个无线Ad-Hoc网络, 无需固定基础设施支持, 就能快速简单地实现嵌入式终端之间的无线组网, 从而不受地理环境的限制, 便于使用。将流媒体技术与嵌入式无线技术相结合, 实现了C/S架构下H.264视频传输, 同时在局域网内运行良好, 具有广阔的应用空间。

1 系统设计

系统主要以UT-S3C6410开发板为嵌入式硬件平台核心, 外围配以腾达的Tenda W541U V2.0无线网卡(Wi-Fi), 从而搭建起整个硬件平台。图1描述了C/S架构下系统整体框图。其工作流程如下: 一个视频帧经过ARM11处理器的内部硬件编解码模块MFC(Multi Format Codec)进行H.264标准的硬编码; 要进行RTP(Real-time Transport Protocol)载荷打包, 封装成适合网络传输的数据格式; 然后以无线网络为媒介, 将编码后的视频信息按照RTP/RTCP(Real-time Transport Control Protocol)发送给接收终端。视频交互模式下, 在两个终端都要同时执行发送和接收的工作过程。

图1 系统整体框图

1.1 实时流媒体环境的建立

目前流媒体传输技术主要有两种: 顺序流传输和实时流传输。顺序流传输中客户端的观看与服务器的传输不同步进行, 需要实时看到视频信息, 因而采用实时流传输。实时传输协议是目前解决流媒体实时传输问题的最好办法, 利用它能实现流媒体数据的实时传输, 而且同时支持一对一(单播)和一对多(多播)通信。整个RTP协议由两部分组成: RTP和RTCP。RTP负责封包和传输, RTCP负责服务质量控制或网络状况诊断[5-6]。

在Linux平台上采用RTP协议进行流媒体编程, 可采用开放源码的RTP库, JRTPLIB是一个面向对象的RTP库, 封装好, 功能强, 因而该系统采用此库实现实时流媒体视频传输[7-9]。

JRTPLIB是一个高度封装后的RTP库, 它对RTCP数据报的发送和接收进行了封装。在使用时, 只需调用SendPacket()方法进行发送, JRTPLIB就能自动对到达的RTCP数据报进行处理, 并且还会在需要时发送RTCP数据报, 从而能确保整个RTP会话过程的正确性。

1.2 H.264硬件编码

为提高视频数据编码速度, 系统采用ARM11处理器的内部硬件编码模块MFC进行H.264硬编码, 硬编码具有不占用CPU资源, 运算速度快等优点, 更加适合视频实时通信。

图2 H.264编码MFC API接口

要实现视频数据的H.264硬件编码, 就要实现S3C6410内部编码库提供的API(Application Programming Interface)接口(见图2)[10,11]。H.264硬件编码的具体实现过程如下。

1) 设置编码器参数。调用handle=SsbSipH264EncodeInit(width, height, frame_rate, bitrate, gop_num); 创建实例, 其中参数分别表示: 图像的宽度、 高度、 帧率、 比特率和两个相邻的关键帧含多少帧(B帧或P帧)。

2) 初始化H.264编码结构。调用SsbSipH264EncodeExe(handle)。

3) 获取输入(YUV420)缓冲区首地址。调用

p_inbuf=(unsigned char*)SsbSipH264EncodeGetInBuf(handle,0)。

4) 对输入帧进行循环编码。

① 将YUV420视频流放入MFC的输入缓冲区: memcpy(p_inbuf, yuv_buf, frame_size)。

② 通知MFC开始H.264编码: 调用SsbSipH264EncodeExe(handle)。

③ 获得解码后的数据: 调用(unsigned char*)SsbSipH264EncodeGetOutBuf(handle, size)。

④ 开始编码下一帧。

5) 关闭编码器: SsbSipH264EncodeDeInit(handle)。

1.3 H.264关于RTP协议的传输

H.264视频的传输主要涉及两部分: RTP打包和视频数据传输[12]。

编码压缩后的H.264不能直接用于网络传输, 容易造成丢包和传输错误, 必须将其封装成适合网络传输的数据。网络传输中H.264的封装格式如图3所示, RTP通常使用用户数据报协议(UDP: User Datagram Protocol)进行多媒体数据传输, 这样更适用于实时性传输。

图3 H.264的封装格式

Fig.3 Package format of H.264

1.3.1 RTP载荷打包方案

在系统层面上, H.264在视频编码层(VCL: Video Coding Layer)和网络提取层(NAL: Network Abstraction Layer)之间进行概念性分割, 前者是视频内容的核心压缩内容的表述, 后者是通过特定类型网络进行递送的表述, 因而笔者只讨论NAL层的结构。

H.264的RTP封装应遵循以下几个设计原则:

1) 易于区分分组的重要性, 而无需对分组内的数据进行解码;

2) 应能检测到数据类型, 而无需对这一码流进行解码;

3) 应支持将一个NAL单元分割成若干个RTP包, 以避免NAL单元长度过大时, IP层传输出现分片。

RFC3984标准中针对H.264媒体流提供的载荷的3种打包方式: 单NAL单元方式、 非交错方式和交错方式; RTP的3种负载格式: 单个NAL单元包、 聚合包(单时间聚合包, 多时间聚合包)和分片单元(FU-A,FU-B)。单个NAL单元包(Single NAL unit Packet)将一个NAL单元封装到一个包里; 集合包将多个NAL单元集合在一个RTP分组中, 适用于NAL单元非常小的情况; 分片单元是将一个NAL单元分割, 使用多个RTP分组进行传输[13,14]。根据压缩完成后H.264数据的特点, 笔者采用单个NAL单元包和FU-A两种载荷格式, 其对应的载荷头格式如图4所示。

图4 NAL unit和FU-A载荷头格式

NAL unit中RTP荷载头与NAL单元类型字节重合, 各标志位含义如下。

F: 1 bit (forbidden_zero_bit), H.264规范声明设置为1指示语法违例。

NRI: 2 bit (nal_ref_idc), 00值指示NAL单元的不用于帧间图像预测的重构参考图像。该NAL单元可以被丢弃而不必冒参考图像完整性的风险。大于0的值指示NAL单元的解码要求维护参考图像的完整性。

Type: 5 bit (nal_unit_type), 指定NAL单元荷载类型。

Fu-A的载荷头包含两字节: FU indicator和FU Header。其中FU indicator与上述NAL unit载荷头格式相同, 其中NAL单元载荷类型指定为28。

FU头的各指示位含义如下。

S: 1 bit, 当设置成1时,开始位指示分片NAL单元的开始。

E: 1 bit, 当设置成1时, 结束位指示分片NAL单元的结束, 跟随的FU荷载不是分片NAL单元的最后分片时,结束位设置为0。

R: 1 bit, 保留位必须设置为0, 接收者必须忽略该位。

Type: 5 bit, NAL单元荷载类型。

1.3.2 视频数据传输

在完成RTP载荷打包过程后, 要将其封装为适合网络传输的RIP包, 由于JRTPLIB库能实现RTP的自动打包, 下文为编程实现视频传输[15]。主要程序流程如图5所示。

图5 视频发送流程图

1) 生成RTPSession类的一个实例, 调用Create()方法对其进行初始化操作。

2) 重要参数设置。载荷类型在传输H264数据时设置为96; 由于视频采用PAL制式, 所以时间戳应该设置为9 000/25; 网络传输是基于IP协议, 最大传输单元(MTU)为1 500 Byte, 大于1 400 Byte时丢失的概率很大, 加上RTP包头占用的12 Byte, RTP载荷的最大长度不应该超过1 388 Byte, 笔者采用1 350 Byte(此处设定为MAX_PKT_LENGTH)。

3) 检测一个NAL单元。一个编码后的H.264视频帧由若干个NAL单元组成, NAL单元常由[Start Code][NALU Header] [NALU Payload]3部分开始, 必须是“00 00 00 01”组成, 起始码(Start Code)用于标示一个NAL单元或 “00 00 01”, 在本H.264压缩编码中是“00 00 00 01”4个 Byte, 通过检测起始码即可确定一个NAL单元及其长度。

4) 打包。若NAL单元长度小于MAX_PKT_LENGTH, 则采用单个NAL单元包, 即直接放进RTP包的载荷部分, 生成一个RTP包;若NAL单元长度大于MAX_PKT_LENGTH, 则采用FU-A方式打包, 方案如下:

If((N_SIZE%MAX_PKT_LENGTH)>0) 其中N_SIZE为NAL单元长度;

k=N_SIZE/MAX_PKT_LENGTH+1;k为分包数;

t=buflen%MAX_RTP_PKT_LENGTH;t为当N_SIZE不是载荷最大长度整数倍时, 最后一个分片的长度。

else

k=N_SIZE/MAX_PKT_LENGTH;

5) 循环调用SendPacket(void *data, int lenth)把打包后的所有k包数据发送出去。

6) 重复步骤3)~步骤5), 直至一帧数据发送完毕, 开始下一帧的发送。

RTP数据的接收端通过调用RTPSession类的GotoFirstSourceWithDat()和GotoNextSourceWithDat()方法遍历携带数据的源, 检测出有效的数据源后, 调用GetNextPacke()方法从中抽取RTP数据报, 根据数据信息进行组帧和进一步应用。

2 系统性能测试与分析

性能测试主要有两部分: H.264压缩编码的性能和视频数据传输的性能。

将一段压缩后的H.264视频进行测试, 得出如下结果。

由视频检测所获信息和码流分析图(见图6、图7)可知, 编码后的H.264文件由I帧和P帧组成, 没有B帧, 属于基本层次(baseline), 适用于低时延的实时应用场合。

图6 视频检测信息 图7 H.264视频码流分析图

由130万像素的OV9650摄像头采集的分辨率为640×480像素的图像, 经H.264硬编码后仅为

1 327 104/289≈4.48 kByte

大大降低了数据的传输量, 更加适应实时传输要求。

硬编码的帧率为30帧/s, 达到了实时视频编码的要求, 适用于实时视频通信。

Wi-Fi网络的传输速率为11~54 Mbit/s, 满足实时传输视频的要求。

3 结 语

为更好地满足实时视频通信的要求, 提出了将视频帧进行H.264硬编码, 通过流媒体传输技术在嵌入式无线网络进行通信的方案, 并具体实现了C/S架构下终端间的视频传输。通过实验测试结果表明, 系统压缩比和数据传输速度达到令人满意的效果, 工作稳定、 移动性强, 在实时视频通信应用中具有很高的实用价值。

参考文献:

[1]AHMED C AMMARI, MOHAMED ABID, HAJER KRICHENE ZRIDA, et al. System-Level Performance Evaluation of Very High Complexity Media Applications: A H264/AVC Encoder Case Study [J]. Int’l J of Communications, Network and System Sciences, 2011, 4(7): 436-446.

[2]李晓妮, 陈贺新, 孙元, 等. 基于H.264的嵌入式音视频同步编码技术 [J]. 吉林大学学报: 工学版, 2011, 41(5): 1475-1479.

LI Xiao-ni, CHEN He-xin, SUN Yuan, et al. Embedded Audio-Video Synchronization Coding Based on H.264 [J]. Journal of Jilin University: Engineering and Technology Edition, 2011, 41(5): 1475-1479.

[3]CHRISTOS GRECOS, YANG Ming-yuan. A Framework for Fast Mode Decision in the H.264 Video Coding Standard [J]. Digital Signal Processing, 2005, 17(3): 652-664.

[4]刘佳翔. RTP协议流媒体识别算法的设计与实现 [J]. 电脑知识与技术, 2011, 7(4): 880-882.

LIU Jia-xiang. Two Approaches to RTP Flow Discriminator [J]. Computer Knowledge and Technology, 2011, 7(4): 880-882.

[5]ALEX KESSELMAN, DARIUSZ R. Kowalski Fast Distributed Algorithm for Convergecast in Ad Hoc Geometric Radio Networks [J]. Journal of Parallel and Distributed Computing, 2006, 66(4): 578-585.

[6]李校林, 刘利权, 张杰. 基于RTP的H.264视频流实时打包传输的研究 [J]. 计算机科学与工程, 2012, 34(5): 168-171.

LI Xiao-lin, LIU Li-quan, ZHANG Jie. Research on the H.264 Real-Time Video’s Packaged Transport Base on RTP [J]. Computer Engineering & Science, 2012, 34(5): 168-171.

[7]云静. H.264视频编码的关键技术分析及复杂度研究测试 [J]. 计算机与现代化, 2010, 15(16): 51-54.

YUN Jing. Key Technical Analysis and Complexity Research Testing for H.264 [J]. Computer and Modernization, 2010, 15(16): 51-54.

[8]贺杰. 线程池技术应用研究 [J]. 网络安全技术与应用, 2011(5): 58-60.

HE Jie. Research and Application of Thread Pools [J]. Network Security Technology & Application, 2011(5): 58-60.

[9]DONG Jian-yu, HE Chao, ZHENG YUAN F, et al. AVP: A Highly Efficient Transport Protocol for Low Bit Rate Multimedia Communications [J]. Multimedia Tools and Applications, 2005, 25(2): 187-216.

[10]吴斌, 郭树旭, 王明江, 等. H.264标准中Exp-Golomb编解码器的VLSI设计 [J]. 吉林大学学报: 信息科学版, 2008, 26(3): 244-247.

WU Bin, GUO Shu-xu, WANG Ming-jiang, et al. VLSI Design of Exp-Golomb Encoder and Decoder in H.264 [J]. Journal of Jilin University: Information Science Edition, 2008, 26(3): 244-247.

[11]FERNANDO BORONAT SEGUí, JUAN CARLOS GUERRI CEBOLLADA, JAIME LLORET MAURI. An RTP/RTCP Based Approach for Multimedia Group and Inter-Stream Synchronization [J]. Multimedia Tools and Applications, 2008, 40(2): 285-319.

[12]孟祥磊, 干莽, 张婷, 等. 基于WIFI的嵌入式目标定位与检视终端 [J]. 吉林大学学报: 信息科学版, 2012, 30(5): 480-486.

MENG Xiang-lei, GAN Mang, ZHANG Ting, et al. WIFI-Based Embedded Target Location and View Terminal [J]. Journal of Jilin University: Information Science Edition, 2012, 30(5): 480-486.

[13]杨瑞光, 刘玉军, 山秀明, 等. 基于Linux的RTP流检测识别算法研究 [J]. 计算机工程与设计, 2013, 34(1): 81-85.

YANG Rui-guang, LIU Yu-jun, SHAN Xiu-ming, et al. Research on Linux-Based RTP Streaming Detection Recognition Algorithm [J]. Computer Engineering and Design, 2013, 34(1): 81-85.

[14]NICOPOLITIDIS P, PAPADIMITRIOU G I, POMPORTSIS A S. Adaptive Wireless Push System for Multichannel Environments with Single-Receiver Clients [J]. Electronics Letters, 2011, 47(2): 147-148.

[15]刘传, 王毅. 普适多媒体信息发布系统的构建 [J]. 计算机工程与设计, 2011, 32(1): 103-106.

LIU Chuan, WANG Yi. Building of Pervasive Multimedia Message Distribution System [J]. Computer Engineering and Design, 2011, 32(1): 103-106.

猜你喜欢

分片调用嵌入式
上下分片與詞的時空佈局
降低跨分片交易回滚概率的多轮验证方案
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
核电项目物项调用管理的应用研究
TS系列红外传感器在嵌入式控制系统中的应用
系统虚拟化环境下客户机系统调用信息捕获与分析①
基于模糊二分查找的帧分片算法设计与实现
搭建基于Qt的嵌入式开发平台
通用导弹雷达罩曲面分片展开系统的开发
倍福 CX8091嵌入式控制器