陆许明+张嘉文+徐永键
摘要:随着我国信息网络的发展,互联网视频内容相关服务得到了快速发展。针对分享式视频服务对视频编码压缩的处理需求,提出并设计了一种利用图形处理器GPU协处理视频编码的服务平台。在该系统中,视频源输入后经过预处理得到解码后的亮度和色度数据,然后根据系统硬件配置和资源占用情况,选择GPU硬件编码或CPU软件编码,最后得到编码数据。测试结果表明,所提出的GPU协处理视频编码方案与CPU直接软编码方案相比,在保证编码质量的情况下,处理速度更快,编码效率更高
关键词:图形处理器;视频编码;计算统一设备架构;服务器
中图分类号:TP37 文献标识码:A 文章编号:1009-3044(2016)28-0206-02
随着我国信息网络基础设施的规划发展,高速宽带网络的建设得到不断推进,基于网络的视频内容急剧增加,视频内容服务也呈现井喷式的发展。例如基于互联网的网络直播、网络视频教学、视频内容分享等,基于局域网的多媒体共享、无线投屏应用等。就技术的角度而言,视频内容服务的喷发一方面依赖于通信技术的发展,而另一方面则是依赖于视频压缩技术的不断发展和成熟应用。因此,高质量的视频压缩技术的应用就成为了人们关注的研究热点[1]。
视频压缩是计算复杂度非常高的操作。对于专用于视频压缩的服务器,利用中央处理器(CPU,Central Processing Unit)进行编码操作时,大量的视频数据及其压缩算法处理将会使CPU处于高负荷运行状态。因此服务器对CPU的性能要求高,而且占用的功耗也非常大,甚至在极端情形下导致服务器难以对系统其他操作产生实时地响应,出现操作系统假死现象。
图形处理器(GPU,Graphics Processing Unit)是专门用于图像运算工作的微处理器。随着GPU的不断推广,利用GPU和CPU协同处理复杂计算的方法也发展起来[2]。利用GPU强大的并行运算能力,能够大幅度提高系统协作的计算性能,从而将CPU从不擅长的并行运算中解放出来,更好地完成系统的管理控制工作。
H.264/MPEG-4 part 10 AVC (H.264/AVC)视频编码标准,是由国际化标准组织(ISO)和国际电信联盟(ITU)于2003年共同提出的一种数字视频压缩格式标准[3]。优秀的性能让H.264/AVC广泛应用于广播电视、无线多媒体等各个领域。因此,本文针对H.264编码标准,研究CPU与GPU协同操作的编码方法,提出一种跨平台的视频编码服务方案,支持Windows和Linux等操作系统,支持CPU软件编码或GPU协同编码,当无法GPU编码时,通过软编码实现视频数据压缩。
本文剩余部分安排如下:第1节介绍系统整体方案;第2节和第3节分别介绍系统软件部分的预处理和编码模块设计;第4节对系统进行测试分析;最后总结全文。
1 系统整体方案
图1 所示为采用NVIDIA显卡的系统框图。计算统一设备架构(CUDA,Compute Unified Device Architecture) 是NVIDIA公司提出的一个基于GPU通用计算的开发环境。它针对GPU多处理单元的特性,通过并行计算提高大规模运算的速度[4]。利用CUDA并行计算架构,能够极大地提升H.264的编码效率,在保证一定图像质量的前提下,大幅度降低编码时对CPU核的占用。
系统方案由两大部分组成,包括视频源预处理模块和视频编码模块。视频源预处理模块根据视频源的类型,进行相应的处理,将其转化为视频编码模块支持的视频格式。视频编码模块则是实现视频编码操作,在不同的操作系统中调用不同的处理接口函数,并根据系统显卡的配置,采用纯软件或GPU协同的方式进行视频编码。
2 视频源预处理
由于系统的视频源可能来自不同的采集设备,因此格式各有不同,特别是视频的分辨率、帧率、编码方案等,因此视频压缩服务器并不能直接对这些数据进行压缩。视频源预处理模块就是系统的一个转换接口,将各种视频源转换成统一的格式,包括分辨率、帧率等,以便输入到编码模块中进行正确的编码。
总体而言,视频源预处理模块的工作包括视频解码、定标缩放、帧率转换。视频解码可以从源数据中获取视频每一帧的亮度和色度数据;定标缩放根据视频源的分辨率和输出目标格式的分辨率对每一帧进行相应的缩放;帧率转换则将视频源的帧率转换为目标格式的帧率。
3 视频编码
视频编码模块是本系统的核心模块,实现视频数据的压缩。为了更好适应视频编码服务器的配置,系统将实现2套完整的编码方案,方案一是采用GPU协处理的硬件编码方案,二是由CPU直接处理的软件编码方案。程序在运行时会判断硬件系统中是否有显卡能支持编码操作,如果有则采用方案一进行硬件编码;如果没有,则可以采用CPU进行直接软件编码。
硬件编码方案利用CUDA视频编码模块,将YUV420P或YUV422的视频数据,利用显卡硬编码压缩成数据流。NVIDIA提供了视频编码的开发套件,其中包括视频编码的加速应用编程接口NVENC。由于利用GPU核中专用的编解码模块,NVENC能够提供比一般利用CUDA cores或者系统CPU更快质量更好,并且能耗更低的编码服务,并且在编码过程中,其他的CUDA核及系统CPU能够继续执行其他进程,从而实现编码的并行处理。避免服务器的CPU忙于编码而无法响应其他操作。 CUDA视频编码模块的编码步骤如图2的流程图所示。总体而言,程序先创建上下文环境,配置相关参数,分配内存,然后一帧一帧图像进行编码,编码结束后释放内存和编码器环境。
为了优化编码器结构,更好地满足系统的功能需求,按上述步骤将相应的函数进行进一步的封装,形成以下几个基本的应用程序接口:初始化硬件编码接口EncodeInit( )、分配输入缓存区EncodeGetBuffer( )、硬编码EncodeFrame( )、编码结束清理相关资源EncodeExit( )等。
方案二的视频软件编码使用软编码的方式将YUV420P或者YUV422视频数据压缩编码。为了方便和硬件编码方案进行对比分析,这里以领域内常用的FFMPEG库为例进行设计,使用FFMPEG提供的编码接口进行压缩编码。FFMPEG主要提供三个模块:encode/decode、muxer/demuxer和内存操作。依次存放在库libavcodec、libavformat、libavutil中[5]。其使用步骤包括初始编码参数设置、分配输入缓存区、软编码、编码结束清理相关资源等。
4 实验结果和分析
为了分析对比本文系统所采用的编码方案的性能,本节将直接抓取服务器的屏幕输出作为视频源,这样可以直接获得视频的直接原始数据,方便进行分析比较。
视频的分辨率为1440×900;CPU型号为Intel Xeon? CPU E5-2684W v3@3.10Ghz;内存为125.6GB;GPU采用NVIDIA的Quadro K620;操作系统为GENTOO 3.20.2; NVENC版本6.5;编码方案为H.264编码。编码的配置如表1所示,在测试中软件编码和硬件编码均采用同样的配置。
测试分别针对静止画面和动态画面进行对比,其中静止画面测试是让服务器的屏幕输出静态图像,对其屏幕数据按30帧每秒的帧率抓取视频流再进行编码;动态画面测试是让服务器播放一段视频图像,然后对其屏幕数据按30帧每秒的帧率抓取视频流再进行编码。编码过程对内存和CPU资源的占用情况如表2所示。表中硬编码为采用GPU进行协处理的编码方案;软编码为CPU直接编码方案。表2的结果显示,硬编码方案在内存占用和CPU资源占用方面都优于软编码方案。总体而言,软编码方案对CPU资源占用在5%左右并不高,这是因为所选用的CPU功能较强,而且视频源来自于屏幕数据,无需视频解压的预处理操作。尽管如此,不考虑系统调度等其他操作对CPU的占用,在此测试服务器中同时运行20个编码程序显然将造成CPU资源耗尽。因此对于编码服务器而言,采用硬编码方案将大大提高系统性能。
接下来分析系统的编码效率。将编码过程所用时间除以视频流所有的帧数,得到编码一帧数据的平均使用时间。结果如表3所示。对于静止画面,软编码方案耗时比硬编码方案略低,这一方面是因为测试所用服务器处理能力足够强大,其运算频率高于GPU,另一方面ffmpeg调用的x264库对H.264编码过程采取了很多优化措施,包括抛弃了很多消耗资源但不是特别能提高编码质量的特性,开启多线程并行编码等等;而对于动态画面,硬编码方案的速度明显高于软编码,所用时间仅为软编码的20%-25%。在编码压缩率方面,表3也给出了最终的结果,硬编码的结果都比软编码的结果好。
最后,对编码的效果进行对比,主要的对比参数选择峰值信噪比PSNR值。对比结果由表4给出。由于系统编码模块分别对亮度和色度进行处理,因此表4将亮度和色度分量的PSNR单独列出。由表4可知,硬编码和软编码的PSNR值差别不大,因此两者的性能在PSNR评价指标上可以认为相同。这是因为两者的编码配置是相同的,都采用了表1的配置,因此得出了相同的编码效果。但是结合表3的编码压缩率结果,测试结果显示出硬编码的在较高压缩率的情况下获得了与软编码相同的效果,因此具有更好的应用价值。
综上,采用GPU协处理的硬编码方案比CPU软编码方案在较少的内存和CPU资源占用条件下,以更快的速度实现了性能更好的编码输出。而如果要提高软编码器的性能,将使得编码算法的计算复杂度更高,资源占用更多,处理速度更慢。
5 总结
本文针对视频服务平台的视频编码需求设计了一套高效的视频编码系统。利用GPU的并行运算能力,在编码系统中将复杂的编码操作分配在GPU中执行,从而实现了更快速更高效的编码效果。同时在软件上配置了软件编码方案,使得视频编码服务器能灵活地进行软硬件配置。因此,可以通过在板级增加显卡数量,迅速提高系统的视频处理吞吐量;也可在没有显卡或所有显卡均占用的情况下直接由软件实现编码。
参考文献:
[1] 樊晓平, 熊哲源, 陈志杰,等. 无线多媒体传感器网络视频编码研究[J]. 通信学报, 2011, 32(9):137-146.
[2] 戴长江, 张尤赛. 基于图形处理器的通用计算技术的研究[J]. 现代电子技术, 2013, 36(4):157-161.
[3] 赵耀, 黄晗, 林春雨, 白慧慧. 新一代视频编码标准HEVC的关键技术[J], 2014, 1(29): 1-10.
[4] 张然, 刘佩林. 基于CUDA平台的并行化实时视频编码[J]. 信息技术, 2011, 35(4):14-18.
[5] 刘建敏, 杨斌. 嵌入式linux下基于ffmpeg的视频硬件编解码[J], 单片机与嵌入式系统应用, 2011(6): 28-31.