开篇:润墨网以专业的文秘视角,为您筛选了一篇基于H.264编码的多屏共享系统研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
摘 要: H.264/AVC是一种由ITU?T视频编码专家组合ISO/IEC JTC1动态图像专家组联合提出的高度压缩视频编码器标准。然而H.264/AVC编码器较高的运算复杂度提高了多屏共享系统的延迟时间。H.264/AVC 由多种开源的实现,其中X264因简单高效而得到广泛的应用。在此对多频共享系统的关键技术进行实现,分析X264编码器提供的运动估计算法并且提出一种优化的算法。实验表明,新的算法提高了编码的速度、减少了系统延迟时间,同时视频质量几乎没有产生损失。
关键字: 多频共享系统; H.264/AVC; 运动估计; 延迟时间
中图分类号: TN919?34 文献标识码: A 文章编号: 1004?373X(2014)16?0104?04
Multi?screen sharing system based on H.264/AVC encoder
ZHANG Feng?yuan, HUANG Quan?ming
(College of Information Science and Engineering, Ocean University of China, Qingdao 266100, China)
Abstract: H.264/AVC is a high compression video encoder standard proposed by the ITU?T Video Coding Experts Group (VCEG) and ISO/IEC JTC1 Moving Picture Experts Group (MPEG). However, the higher computational complexity of H.264/AVC encoder increased the delay time of multi?screen sharing system. The motion estimation algorithms provided in X264 are analyzed in this paper. An optimized algorithm is proposed, which can reduce the unnecessary computation a lot. The multi?screen sharing system with the improved encoder was designed and implemented. Experimental results show that the proposed method has increased the encoding speed and decreased the delay time significantly, while little loss in quality incurred if any.
Keywords: multi?screen sharing system; H.264/AVC; motion estimation; delay time
0 引 言
随着科技的发展,各种智能化的家电不断进入千家万户,数字家庭的概念日渐深入人心。作为数字家庭的具体应用之一,多屏共享系统旨在随时随地支持用户使用各种设备来访问在不同设备上的视频、图片等各种资源,它给用户的PC,TV,移动手持设备带来的是无缝的连接和无缝的播放感受。Android操作系统是一种基于Linux的开放源代码操作系统,自从问世以来便因其自由开放的特性以及较高的效率受到用户和广大厂商的一致追捧,目前市面上绝大多数的智能手机、智能电视、平板电脑均采用Android作为操作系统。本文将采用Android系统作为研究对象,在其基础上完成对多屏共享系统的设计和搭建。
h.264/AVC[1]是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG?4之后的新一代数字视频压缩格式。与其他现有视频编码标准相比,H.264最大的特点在于具有很高的数据压缩比率和高质量的视频画面,但这些都是以增加算法复杂性为代价而获得的。在H.264算法中运动估计是最重要且最耗时的一部分,在编码器中运动估计过程的耗时平均达到总耗时[2]的74.29%。H264/AVC的运动估计采用块匹配(MB)的算法,目前研究人员已经提出了多种的快速块匹配算法,包括三步法(TSS)[3]、菱形搜索(DS)[4]、六边形搜索(HEX)[5]和非对称十字形多层次六边形格点搜索(UMH)[6]。本文选择X264作为测试编码器,分析了其中的4种运动估计算法并对其中的六边形搜索算法(HEX)进行了改进,通过实验与未改进算法对比,在不影响视频质量的基础上降低视频编码的算法复杂度,达到了降低时延、优化系统资源的目的。
1 系统总体设计
本系统具体分为服务器端和客户端,为了提高系统功能的扩展性和可移植性,服务器端按功能划分成4个模块:请求响应模块、屏幕截取模块、视频编码模块、网络传输模块,客户端同样分为4个模块:客户请求模块、数据接收模块、视频解码模块、GUI显示模块。图1描述了系统的模块划分和各模块之间的交流流程。
图1 系统模块划分
在服务器端中,请求响应模块负责接收客户端的数据请求,然后从设备文件中读取屏幕参数以实现对编码器的初始化、缓存分配等工作;屏幕截取模块负责截取当前屏幕显示的图像并将其转化为视屏编码所需要的格式;视屏编码模块负责对从屏幕截取模块所获得的图像进行压缩、编码等工作,生成提供给网络传输的视频码流;网络传输模块负责对视频编码模块所生成的码流打包、封装然后传递给客户端。
在客户端中,客户请求模块负责将数据请求发送给服务器,同时完成解码器的初始化、缓存分配等任务;数据接收模块负责从服务器获得经过打包、封装的视频数据包,然后从中提取出原始的视频码流数据;视频解码模块负责对视频码流进行解码、重构,生成可以直接显示的RGB图像;GUI显示模块负责将解码获得的RGB图像显示给用户。
2 系统关键技术
2.1 软件开发环境建立
Android系统上的应用程序使用Java语言编写,为了提高程序的执行效率,服务器端主要代码全部采用C语言编写,然后使用Android提供的NDK工具将其编译成链接库加载至Android工程目录中供Java程序调用。客户端在PC平台上进行开发,选择Qt做为开发框架。Qt是一套优秀的UI应用程序框架,与其他开发工具相比Qt具有优良的跨平台特性、面向对象、丰富的API、支持 2D/3D 图形渲染、支持XML等优势。
2.2 屏幕截取
Framebuffer通常译作帧缓存,它是出现在Linux 2.2.xx内核中的一种驱动程序接口。作为图形基础设施,这种接口将具体的显示设备抽象为帧缓冲区,用户可以将它看成是显存的一个映像而不必关心物理显存的位置、换页机制等硬件层的具体细节, 这些都是由Framebuffer 设备驱动来完成的。 只要将它映射到进程地址空间里就可以直接进行读/写操作,读操作可以获得到当前设备屏幕的显示而写操作可以立即反应在屏幕上[7]。
Android系统使用的是修改过的Linux内核,其Framebuffer驱动程序原理和Linux系统是一样的。Linux系统中它的主设备号为29,Linux系统最多可支持32个显卡,因此它的次设备号为0~31,其对应的设备文件名为/dev/fb0~/dev/fb31。在Android系统中Framebuffer的设备名称与Linux系统中不同,一般为“/dev/graphics/fb0”和“/dev/graphics/fb1”。
2.3 视频编码实现
FFmpeg[8]是一个开源免费跨平台的视频和音频流方案,本文使用FFmpeg作为编码的框架。在Android系统中使用FFmpeg调用X264编码器,首先需要对修改后的X264源代码交叉编译生成静态链接库libx264.a,然后交叉编译FFmpeg时在选项中加上libx264并将链接库提供给编译器,最终生成libffmpeg.so文件供程序调用。
具体编码流程如下:
(1) 调用av_register_all()函数注册所有容器格式和编码器。
(2) 调用avcodec_find_decoder()和avcodec_open()找到并打开x264编码器。
(3) 调用自定义函数get_frame_info()从Framebuffer中获取屏幕分辨率等参数,跟据这些参数设置编码器码率、帧分辨率等参数。
(4) 调用自定义函数 get_frame_data()从Framebuffer中获得当前屏幕截图,将图像数据由RGB24格式转化为YUV420格式。
(5) 调用avcodec_encode_video2()函数对YUV帧进行编码,将所得数据存放在结构体AVPacket中供网络发送模块调用。
(6) 等待客户端下一次请求,然后重复步骤(4)、步骤(5)。
3 H.2估计算法的优化
3.1 H.2估计算法简介
块匹配法是目前常用的运动估计算法,X264中提供了4种块匹配算法:全搜索算法(ESA)、菱形搜索算法(DIA)、六边形搜索算法(HEX)、非对称十字形多层次六边形格点搜索算法(UMH)。
全搜索算法类似于数学中的穷举法,其精度最高但是计算量太大不适合实时编码。UMH算法是H.264官方算法模型JM所采用的运动估计算法,是目前搜索效果最好的快速搜索算法,但与菱形算法、六边形算法比起来它的计算复杂度较高,也难以满足实时编码的要求。 菱形算法使用的模板搜索步长较小,当块的运动比较剧烈、运动向量大时菱形模板需要多次移位计算才能得到运动向量的估计值。
六边形算法使用的模板如图2、图3所示。
图2 六边形搜索模板
图3 正方形细化模板
六边形算法搜索过程如下:
步骤1:利用空间的相关性预测搜索起点,计算当前宏块左、上、右上邻块的运动矢量(mv1,mv2,mv3)的中间值mv0,将以上4个运动矢量和原点运动矢量mv4=(0,0)作为候选点分别计算它们的误差代价函数cost,选择其中最小值记作bpred_cost,bpred_cost所在点记为pmv。
步骤2:将步骤1所的pmv转化为整像素并作为六边形的中心点,计算图2中中心点以及六边形的6个顶点的误差代价函数cost,若cost值最小的点中心点则转到步骤4,否则转到步骤3。
步骤3:将cost值最小点为中心做出新六边形(见图2中空心点),计算多出来的3个点的误差代价函数并与中心点比较,若此cost值最小点为中心点则转到步骤4,否则重复执行步骤3。
步骤4:将上述步骤中得到cost值最小点作为中心进行正方形细化,计算其周围8个点(如图3所示)的cost值并与中心点比较,选择其中最小值计作b_cost,b_cost所在点记为bmv。
步骤5:比较b_cost与bpred_cost的大小,若b_cost小于bpred_cost则采用搜索值bmv作为当前宏块的运动矢量,否则采用预测值pmv。结束整像素搜索,开始[12]和[14]像素的搜索。
3.2 六边形搜索算法的改进
由上一节的分析可以看出,拥有较大运动矢量的块可以使用六边形模板快速定位到其运动矢量的周围,然后再用正方形进行细化得到准确的矢量。统计试验表明运动矢量具有中心偏置性和相关性,对于运动缓慢的视频序列,最佳运动矢量[9]在3×3区域内占90%左右,即使运动剧烈的视频序列football[9]分布在3×3区域内的仍有72%,因此过早的使用六边形模板带来了许多不必要的运算。为了解决这一问题,本文结合菱形搜索算法的特点并引入提前终止策略对六边形搜索算法予以改进,具体方案如下:
使用六边形模板搜索之前在搜素起点先使用正方形模板搜索一次,模板如图3所示,分别计算正方形形中心点和周围8个点的误差代价cost,将上述9个点中cost值最小点记为bmv,bmv点对应cost记为bcost,比较bcost与预测最佳误差代价bpred_cost,若bcost小于bpred_cost则整像素搜索结束,否则以bmv为搜索起点开始六边形搜索。当宏块静止或运动缓慢时,其运动矢量分布在搜索起点周围区域的概率较大,使用改进前的六边形的搜索算法需要计算15个点的误差代价而改进后只需要计算9个点,效率得到了大大的提高。
4 实验与分析
首先通过实验对改进后的六边形搜索算法和原来的4种搜索进行比较。分别取运动比较缓慢的cif序列akiyo和运动较为剧烈的foreman经行编码测试,选择峰值信噪比PSNR做为衡量视频质量的客观参数,PSNR值越大说明视频质量越高。实验选择X86平台,CPU为Intel(R)Core(TM)i3 M390,RAM大小为2 GB,操作系统为Ubuntu 11.0。对每个序列使用改进后的算法和原算法分别进行100次编码测试,取其平均值记录在表1、表2中。
表1 “akiyo”的编码表现
表2 “foreman”的编码表现
由以上两组测试数据可以看出:DS算法拥有最快的速度然而其视频质量下降较大;TESA和UMH表现出了最好的图像质量但是它们的速度较慢;与HEX算法相比优化后的OHEX算法在两次实验中将速度分别提升了12.53%和8.56%,其图像质量损失几乎可以忽略。
对于用户来讲,多屏共享系统最直观也是最重要的参数就是视频的延迟时间。其中视频的延迟时间是指从服务器端开始对设备的屏幕截图到客户端最终完成对这一帧的解码并将其显示的时间。为了评估编码器的优化对延迟时间的影响,使用原编码器和改进后的编码器进行比较,实验场景如图4所示。
图4 实验场景
测试环境服务器端CPU为Nvidia Tegra3 1.3 GHz 处理器, RAM为2 GB,操作系统为Android 4.1.1,屏幕分辨率为1 280×720。客户端CPU为Intel(R)Core(TM)i3 M390 2.67 GHz,RAM为2 GB,操作系统为Ubuntu 11.0。实验在局域网中进行,编码器的码率设为800 Kb/s。结果如表3所示。
表3 延迟时间测试
表3中系统的最大延迟时间被缩短了13.77%,平均延迟时间被缩短了7.65%。尽管延迟时间最主要是由视频编码和网络传输所产生,本文所提出的算法改进还是在相当可观的范围内减小了它。
5 结 语
本文提出了一种优化的H.2估计算法,并通过实验证明了新的算法可以平均节约10%的编码时间与此同时几乎不产生图像质量的下降。另外本文还设计并实现了一种使用改进后H.264算法的运动估计算法的多屏共享系统。这一研究成果可以用于智能电视、智能手机、平板电脑等消费类电子产品的应用开发,并极大程度的改善用户的娱乐体验。
参考文献
[1] ITU. H.264 standard [EB/OL]. [2007?06?26]. http:///.
[2] CHEN T C, CHIEN S Y. Analysis and architecture design of an HDTV720p 30 frames/s H.264/AVC encoder [J]. IEEE Transactions on Circuits and Systems for Video Technology, 2006, 16(6): 673?688.
[3] KOGA T, IINUMA K, HIRANO A, et al. Motion compensated interframe coding for video conferencing [C]// Proceedings of National Telecommunications Conference. [S.l.]: NTC, 1981: 1?5.
[4] ZHU S, MA K K. A new diamond search algorithm for fast block?matching motion estimation [J]. IEEE Transaction on Image Process, 2000, 9(2): 287?290.
[5] ZHU C, LIN X, CHAU L P. Hexagon?based search pattern for fast block motion estimation [J]. IEEE Transactions on Circuits and System for Video Technology, 2002, 12(5): 349?355.
[6] XU X, HE Y. Improvements on fast motion estimation strategy for H.264/AVC [J]. IEEE Transaction on Circuits and System for Video Technology, 2008, 18(3): 285?293.
[7] Anon. Framebuffer HOW TO [EB/OL]. [2010?08?05]. http:///HOWTO/Framebuffer?HOWTO.
[8] FfmpegEngineering Group. FFmpeg development mahual [EB/OL]. [2010?09?28]. http://.cn/index.php.
[9] 魏星,蒋建国,齐美彬,等.基于预测的自适应运动估计算法[J].中国图象图形学报,2005(7):873?877.
[10] CAI J, WU Y. Spatial characteristic based rate control initialization method for conversational video communication of H.264/AVC using linear prediction [J]. Journal of Multimedia, 2013, 8(5): 489?495.