基于高性能视频编解码技术的解决方案,能够实现高清画质更快的压缩速度、更少的带宽消耗,在知足用户高清画质要求的前提下有效下降运营成本。阿里巴巴达摩院XG实验室,高级算法专家杨名远在LiveVideoStack线上分享中详细介绍了现有视频编码方案存在的挑战,并对高性能视频硬件编码技术进行了详细解析。算法
文 / 杨名远服务器
整理 / LiveVideoStack网络
视频回放:https://www.livevideostack.cn/video/online0604-ymy/多线程
你们好,很是高兴可以和你们分享咱们团队这一年内所作的一些工做、研究和想法,本次分享的主题是高性能硬件视频编码。架构
视频业务发展趋势

大约是在2018年,咱们在考虑是否要面向视频编码方向作些研究,当时看到的一个趋势是:互联网视频头部内容如电商直播、游戏直播等视频内容质量愈来愈高,已经从标准尺寸转换为720P,甚至部分游戏直播场景、网红直播场景已经支持1080p/30fps、1080p/60fps,同时因为5G信道带宽的增长,AR/VR场景的应用出现复苏迹象。框架
从端侧来说,手机屏幕的面积愈来愈大,目前已基本能够支持720P或1080P。随着柔性屏幕的扩展以及观看视野的放大,视频的体验也许能够从1080P扩展到4K、8K,高性能视频端到端传输系统已经具有了从内容制做到传输到终端总体的技术支持。ide

如图是一些调研报告,咱们能够看到无线信道中的视频流量占有很大比重,预计到2024年比重可达到74%,同时用户的使用行为正在逐渐发生变化,从标清视频开始向高清HD甚至是4K、8K超高清方向转变。性能
所以,高质量视频(high resolution/high framerate/HDR)将在明后年迎来大幅度的增加测试

如图左边是一个商业调研报告,以电商直播、在线教育等新的基于行业特色的视频应用不断涌现,到2020年,中国网络视频行业规模达2940亿人民币,其中大部分来自于泛娱乐直播,包括短视频、在线视频等。优化
如图右边是来自赛灵思的针对各大上市公司的财报调研报告,报告中显示,广泛带宽成本在整年财政收入中所占比重较大,特别以游戏直播为主的视频网站,带宽成本甚至可能有超过10%的占比。因此,对于视频网站来讲,带宽成本和存储成本是很是大的。
2
现有视频编码方案存在的挑战

现有视频编码方案主要分为两种,一种是软件方案,例如较多应用于X86平台上的软件编码器。另外一种就是硬件方案,例如NVDIA GPU中的硬核,FPGA方案以及ASIC SoC的解决方案。
软件编码器的特色是能够进行复杂度配置的任意调整,例如x265,就有不少复杂度,不一样的复杂度对应不一样的压缩效率和处理能力,例如x265 veryslow档的带宽节省比superfast档高出40%的码率,可是单位时间内处理帧率会低不少。随着摩尔定律的失效,软件编码器在对时效性有要求的业务场景须要进行压缩性能和处理能力的平衡。
右图是对当前几种不一样硬件编码器的水平进行的测试,从测试结果中能够看到,现存业界较好的硬件实时高清硬件编码方案的压缩性能基本能够达到x265 medium档的水平。
3
硬件编码技术
基于上述现有编码技术背景的调研以及现有方案的分析,咱们发现,硬件编码器可能须要一种产品形态,即在现有硬件编码技术基础上追求更高的压缩性能,同时须要保证必定的实时性的处理能力,在压缩性能与处理能力间寻找一种平衡,以更好的解决带宽和存储成本的问题。

所以,咱们团队通过一年多的努力,成功研发了一款基于FPGA的硬件编码器-XGH265,目前已经将该编码器部署在阿里云的异构服务平台(阿里云舜天平台)。右侧图就是FPGA卡,能够经过PCIE插在X86服务器上。图中Host表明X86服务器,经过PCIE与FPGA板卡进行信息交互。

如上图中架构图所示,黄色区域表明X86服务器;蓝色区域表明异构服务器平台自己具有的硬件和架构,包括PCIE的驱动、传输等;绿色部分是咱们搭建的整套系统,包括嵌入式CPU、DMA交互、数据传输等;橙色部分也是咱们团队研发的265编码器,主要包括两个模块:预处理模块、编码模块。

软件方面,在X86服务器上采用的是较为流行的FFmpeg软件进行编码调度、命令下发等工做,原始编码码流会经过FFmpeg解码,将解码后的YUV图像经过PCIE传到FPGA卡上,FPGA卡上的CPU/固件系统在接收到YUV图像后进行编码任务调度,控制FPGA HEVC Encoder编码出265码流,将编好的码流回传至主服务器, 再经过协议封装成TS或MP4等格式进行推流。
X86服务器的FFmpeg支持多线程、多进程编码、编码参数等信息传递、以及对编码器的监控和异常处理。
FPGA编码器上的CPU和固件负责的工做有:编码通道管理、不一样通道的编码器配置、预分析计算(包括场景检测、帧类型决策等)、参考帧管理、码率控制等。

如图是硬件编码器的编码框架,以前的一些硬件编码器设计中,MD模块大可能是采用非RDO或者说是简单RDO的决策,而咱们的设计目标是实现一款高压缩性能的编码器,所以在编码器架构设计中采用了全RDO的决策模式,整个决策过程能够获得最真实的重构像素和CABAC状态及时更新后的几率表,最大程度上保留了编码过程的依赖性,同时对DPCM流水线处理作了极致优化保证MD可以全遍历不一样CU大小和更多的模式,从而得到了最好的压缩性能。
可是全RDO的编码架构设计会给硬件的高速实现带来不少困难,如编码模块中会存在大量复杂的反馈信息。在硬件设计中,处理性能的更好实现主要是基于数据的流水和并行处理,所以反馈机制所要承担的压力就会比较大,若是在必定时间内反馈的数据没有到达则流水处理就须要等待,因此说反馈机制的设计是编码器设计实现中的一个难点。
咱们在流水线设计和算法设计上的优化解决了这些难题,好比经过对TU流水线的Cycle级精细化控制,频域Distortion预估等架构和算法的设计既增长了流水线的吞吐量,又保持了各个模块的信息获取的依赖关系。相似的设计和算法优化还有不少,因为篇幅的限制在此就不一一列举了。
从视频编码的角度来讲,如H.26五、H.266/VVC等,压缩性能的提高很大程度上来自反馈机制或者模块间的耦合。为了尽量保证明现265比较高的压缩性能,所以在设计架构时,对于反馈机制部分咱们投入了很大的精力进行设计与优化。

如图是FPGA的物理版图,由三个die组成,每一个die之间经过连线的方式进行数据传递,不一样色彩的模块表明不一样的编码模块,资源的利用很是密集。实现了编码器的三大特色:高资源利用率、高频率(核心计算模块的主频已达到400M)、合理的多die设计,这三个特色保证了高性能压缩的能力。

如下是咱们实现的硬件编码器的一些主要特性:
l 全RDO架构保证了视频中低码率段的压缩性能
l 支持CBR、CRF、CQP等各种码控算法
l 场景检测、帧类型决策、码率控制等算法为软件算法,能够支持随时升级
l 支持延迟可配置,延迟从几帧到几十帧
l 支持高性能主管调节,提高主客观性能,减小马赛克效应的出现
l 支持Close GOP,OPEN GOP和自适应B帧
l 流媒体系统采用ffmpeg,便于与现有大部分系统对接
4
硬件编码器性能

最后是XGH265与x265 veryslow档 软件加速比的一个测试比较。在阿里云标准机型下,在同等成本下,XGH265达到近20倍速度的提高。在压缩性能方面,同等质量下,XGH265节省带宽最多。