VP9如何给Twitch的电竞直播带来价值?

Wesley13
• 阅读 1153

本文来自Twitch的科技博客,详细解读了该平台如何将VP9用于其电竞赛事的直播。通过FPGA硬件加速,VP9能极大提升视频直播服务的质量。LiveVideoStack对原文进行了摘译,感谢Twitch的首席研发工程师沈悦时博士提供的技术审校。

文 /  Akrum Elkhazin, Video Algorithm Architect, NGCodec,

Avinash Ramachandran, Video Software Architect, NGCodec,

Roshan Baliga, Product Manager, Google,

Jai Krishnan, Product Manager, Google,

Tarek Amara, Senior Video Specialist, Twitch,

Alex Converse, Senior Software Engineer, Twitch,

沈悦时, Principal Research Engineer, Twitch

译 / 咪宝

审校 / 沈悦时

原文 https://blog.twitch.tv/how-does-vp9-deliver-value-for-twitchs-esports-live-streaming-35db26f6322f

1. 总结:VP9将帮助Twitch为电竞和游戏直播提供更佳的观赏体验

在电视广播、视频会议、安全监控、以及在线流媒体等各种应用中,视频压缩是提升用户体验的最关键技术之一。自2003年(即15年前)以来,H.264一直是最先进并被最广泛部署的视频压缩格式,也催生了HDTV、蓝光DVD、互联网视频网站(如YouTube,Twitch)等许许多多成功的商业产品。尽管如此,根据Twitch的最新分析,基于H.264协议的编码器已经达到了它们压缩性能的极限。特别是对于高清分辨率(1080p60)游戏内容的实时编码,这些编码器已经江郎才尽,耗尽了所有可挖掘的技术潜力。然而与此同时,新涌现出的下一代视频标准,VP9,HEVC和AV1,在实验中表现出显著的压缩增益。这种提升很有可能为内容平台带来非常可观的商业利益(例如,为观众提供更好的视频质量,减少视频加载时间和卡顿频率,增加客户覆盖面,以及降低IP传输成本)。

目前,尽管VP9视频的解码和回放在Twitch客户端设备和浏览器上有广泛的支持,但由于VP9编码的高度复杂性,实现高效和实时的游戏内容编码对于Twitch平台来说是一项重大的技术挑战。通过严格的可行性研究,Twitch团队最终选择了FPGA作为VP9实时编码的硬件平台,并计划在不久的未来把VP9部署于具有大量观众的的电子竞技和头部主播频道(请观看Twitch的首席研发工程师沈悦时博士和赛灵思公司的首席执行官Victor Peng在2018年 赛灵思开发者大会上的主题演讲,https://www.xilinx.com/video/events/xdf-2018-silicon-valley-keynote.html#t=16m13s)。

VP9如何给Twitch的电竞直播带来价值?

图:Twitch的首席研发工程师沈悦时博士和赛灵思公司的首席执行官Victor Peng在2018 年赛灵思开发者大会上做演讲。

在本文中,我们将展示基于FPGA的实时VP9编码器可以至少节省25%的码率,其画面质量对标Twitch当前部署的广播质量级H.264编码器。此外,我们更将深入分析多个VP9协议中的关键压缩工具,详细解释这些技术是如何在实际的FPGA编码器设计中被很好地利用,从而实现VP9协议在理论上推理得出的压缩性能提升。

2. VP9实时1080p60编码的压缩效率:可以实现至少25%的码率节省

这里再次强调一下我们下面的分析并不是一个对VP9压缩协议本身的学术评估。我们的关注点在于如何实现一个可应用在生产实践中的VP9实时编码器,以及它和商业上最先进的H.264实时编码器的异同。

2.1. H.264参考基准

对于编码器性能的参考基准,我们的选择是在Intel Xeon E5-2697 V4(18核,2.3GHz,145W)CPU上运行开源的x264编码器。我们的x264配置是:

  • medium preset,

  • high profile,

  • constant bitrate (CBR) mode,

  • GOPs of 2 seconds,

  • lookahead of 1 second, and

  • VBV buffer of 1 second.

基于对游戏视频内容、编码器性能以及Twitch工作点(即分辨率,帧率,比特率)的了解,我们觉得上述x264配置的画质是可以媲美甚至超过市场上绝大多数专业广播级视频编码器产品的。此外,运行更高质量的x264 preset(如slow、veryslow)虽然能省下一些比特率,但并不能达到节省25%码率的目标,同时额外的计算消耗使得软件编码达不到实时,即每秒60帧1080p(请参阅下面的实验结果)。

VP9如何给Twitch的电竞直播带来价值?

表:x264在各种preset下视频质量和编码速度的比较

2.2 测试内容

在我们的比较中,我们使用了以下五个1080p60的游戏场景:

  • EuroTruckSimulator 2,

  • Rust,

  • Witcher 3,

  • CSGO, and

  • Fallout 4.

无损的原始视频可以在开放媒体联盟(AOM)官方测试序列的网页上下载(登录https://media.xiph.org/video/derf/,搜索“Twitch”)。这五个游戏视频涵盖了比较广泛的内容特征(例如,快速运动、高纹理、饱和色彩和高对比度)。同时这些内容对于视频编码是非常具有挑战性的,特别相比来源于摄像机拍摄的视频要难编得多。下面是游戏Witcher 3的截图,读者可以发现这个画面具有很高的对比度、锐利的边缘和许多的细节。

VP9如何给Twitch的电竞直播带来价值?

图:游戏Witcher3的截图

2.3. 主观和客观评测结果

通过主观测试,我们得出结论是:码率在4.5Mbps的VP9可以提供与码率在6Mbps 的H.264相同或更好的画面质量。下面是H.264 6Mbps(左)与VP9 4.5Mbps(右)对比的屏幕截图。VP9的画面上有更清晰的路面,并且在文本边缘附近具有较少的噪声。不过在H.264这边,树和草地上具有稍多的纹理。

VP9如何给Twitch的电竞直播带来价值?

图:H.264 6Mbps(左)与VP9 4.5Mbps(右)的视频质量比较

读者可以从以下网址下载1080p60 H.264 6Mbps与VP9 4.5Mbps对比的演示视频:https://www.dropbox.com/s/6zjp2xat2139ne2/vp9\_eurotruck.mp4?dl=0。

对于客观评测,我们使用PSNR和VMAF两个指标,比较的视频码率覆盖2Mbps到12Mbps。5个游戏内容的平均PSNR和VMAF值如下表所示。两项指标均显示:在4Mbps至6Mbps范围内,VP9比H.264节省了大约25%的码率。此外,对于所有的码率,VP9相对于H.264都保持显著的压缩效率优势。

VP9如何给Twitch的电竞直播带来价值?

表:在各种H.264参考码率下,基于PSNR或VMAF指标,VP9相对H.264的码率节省

以下是x264和NGCodec VP9的PSNR和VMAF曲线。

VP9如何给Twitch的电竞直播带来价值?

图:H.264与VP9平均PSNR指标的比较

VP9如何给Twitch的电竞直播带来价值?

图:H.264与VP9平均VMAF指标的比较

我们觉得VMAF得分为80或更高的视频,画面质量是可以与专业广播级编码器相媲美的。虽然有一些行业分析宣称,VMAF得分90或更高才能代表高视频质量,然而由于游戏内容的高纹理特性(如早前“测试内容”章节里所述),VMAF 80的分数对于Twitch的游戏内容已经是非常好的画质了。

3. 深入了解VP9的功能:协议里定义的新压缩工具仰仗有效的算法设计和穷举搜索的计算开销(由FPGA实现)才能取得码率节省

前一节中介绍的压缩增益根源于VP9协议中定义的许多新的或改进的编码工具。在本节中,我们将解释这些视频压缩算法的原理以及它们是如何在FPGA VP9编码器中被实现的。

3.1. 更大尺寸和更多选择的预测宏块

VP9将图像划分为许多称为“超级块”的64x64区域,每个“超级块”又可以进一步通过四叉树结构细分形成低至4x4的较小区域以做画面预测。除却正方形分割,VP9的预测宏块还支持例如32x16、4x8等矩形分区。较大的预测宏块对于容易预测的内容(例如,平坦区域)节省比特开销特别有用。同时通过降低信令开销,更大尺寸的预测宏块也为更高分辨率的内容提供了良好的压缩效率。

如下面的EurotruckSimulator视频中的一帧所示,VP9编码器在相对平坦的区域(如天空、道路和人行道)选择使用较大尺寸的预测宏块,而在相对较高纹理区域中选择使用较小尺寸的块以保留其精细的细节。与VP9相比,H.264对整个帧都使用16x16宏块,这样会在平坦区域浪费比特同时在高纹理区域的牺牲视频质量。

VP9如何给Twitch的电竞直播带来价值?

图:VP9编码器中使用尺寸最大能到64x64的预测宏块

VP9如何给Twitch的电竞直播带来价值?

图:H.264编码器中只能使用尺寸最大到16x16的预测宏块

3.2. 更大尺寸和更多选择的变换宏块

除了更大的预测宏块尺寸外,VP9还支持最大为预测宏块尺寸或32x32(以两者间较小者为准)的变换宏块尺寸。因此,变换宏块尺寸可以是4x4、8x8、16x16以及32x32。相比之下,H.264支持的变换选项要少得多:4x4,仅限于High Profile的8x8,以及仅适用于Intra frame的两步16x16。下图显示了在EurotruckSimulator内容中VP9编码器选择的变换宏块尺寸(用蓝色网格表示)。如图所示,大的变换宏块(最大到32x32)可以更好地保留平滑区域(如天空)和普通纹理区域(如道路)的细节。另一方面,较小的变换宏块尺寸能够用来捕捉精细细节,比如道路、灯柱、远处建筑物、以及卡车侧面的倒影。

VP9如何给Twitch的电竞直播带来价值?

图:VP9编码器依据画面复杂度动态选择变换宏块的尺寸,最大达到32x32

VP9如何给Twitch的电竞直播带来价值?

图:H.264编码器使用固定4x4或8x8的变换宏块尺寸

3.3. 基于全模式搜索的比特率-失真度优化(RDO)

为了充分发挥更大、更多预测和变换宏块选择带来的优势,VP9编码器利用硬件FPGA加速来计算最佳RDO模式决策。用的方法是评估所有帧内(Intra)预测模式和绝大部分帧间(Inter)预测模间的候选项,以及所有预测和变换宏块尺寸。

基于全面评估做的RDO决策可以保证选择到最佳的预测和变换模式,这是上一章节“主观和客观测评结果”中描述的视频压缩效率增益的根本来源。例如,在下图中,由于大的预测和变换宏块尺寸,VP9的画面在路面部分稳定而清晰。而由于大小变换宏块尺寸的混搭使用,在卡车侧面部分展现出更精细的细节。而这种通过穷举方式实现的RDO模式搜索只能通过FPGA硬件加速才能变得可行。

VP9如何给Twitch的电竞直播带来价值?

图:由于使用了穷举计算,全面的RDO搜索使得编码器能做出最佳模式的决策,右侧显示VP9编码器在难编区域中的保真度比H.264编码器高出很多

4. 码率控制优化:智能算法知道在哪里该花费或节省比特

除了搜索最有效预测像素的模式之外,另一个提高编码器压缩性能的关键点是合理地规划和执行比特的消耗。例如,在人眼更敏感的区域花更多的比特,或者避免视频质量的波动。在本节中,我们会展示NGCodec VP9编码器里两个强大的功能,它们会帮助预算并且控制视频序列中的多个帧之间、帧内的宏块之间的比特分配。

4.1. 帧内的自适应量化步长(AQ)

NGCodec VP9编码器具有复杂的空域和时域AQ算法,并配合以双次处理的场景内容和照明条件分析。这些技术有助于根据场景复杂度,计算和优化宏块层面的比特率分配。在下面所示的示例中,使天空或卡车侧面这样的平坦区域达到理想的视觉效果所需的比特成本远低于道路、墙壁或建筑物等复杂区域。然而与此同时,当AQ算法不对它们分配足够的比特时,这些平坦区域更可能出现令人眼敏感的块效应。

VP9如何给Twitch的电竞直播带来价值?

图:具有平坦区域(天空、卡车)和复杂区域(道路、建筑物)的画面

VP9如何给Twitch的电竞直播带来价值?

图:宏块层级的量化步长热图显示VP9编码器可以准确识别出平面和复杂区域

在VP9中,量化步长差值被映射到八个区域,这个八区域的差值空间是用来实现整个图像空域画质的平衡。上图就是在描绘这个量化步长差值的映射,不同的差值区域被热图中不同的亮度所代表。如上所述,诸如天空和卡车之类的较平坦区域(以较浅的阴影显示)被赋予负(更短)的量化步长,从而避免视觉失真。而另一方面,在较高纹理的区域,如徽标和建筑物的侧面(以较深的阴影显示)被赋予正(更长)的量化步长,以避免浪费太多的比特开销。

4.2. 帧间的码率控制

除了帧内的宏块层级量化步长自适应之外,跨帧的比特分配对于实现优秀的压缩性能则更为关键。码率控制算法的目标是将合适的比特量分配给不同的帧(例如,参考/非参考帧,场景变化中的帧),最大化视频序列的整体画面质量,以及避免违反VBV模型。这里的VBV是一个视频序列如何被视为固定码率(CBR)的数学模型。

NGCodec VP9编码器的码率控制系统使用机器学习技术实现比x264更稳定的视频质量,其性能尤其是在场景变化之后体现得最为明显,而场景变化是对码率控制算法最具有挑战性的情形。NGCodec VP9码率控制的算法已经在广泛的内容和编码参数上得到验证,并且特别针对游戏内容进行了优化。

VP9如何给Twitch的电竞直播带来价值?

图:NGCodec VP9编码器比x264表现出更稳定的视频质量(即帧级的平均量化步长)

VP9如何给Twitch的电竞直播带来价值?

图:在第35帧之后,x264的不良VBV管理导致极高的量化步长参数(即差的视频质量)

上图中的两个图显示了在Witchers 3视频序列的场景变化情况下,NGCodec VP9编码器和x264的帧级平均量化步长参数(QP)及其对应的VBV缓冲水平。请注意在上面的第一个图中,为了方便比较,VP9的量化步长是被映射到等效的H .264 QP值。我们可以看到,在第35帧左右,x264的码率控制不必要地触发灾难控制,推动其QP飙到 51从而产生非常糟糕的视觉质量(见下图的左侧)。而与此同时,NGCodec VP9编码器的码率控制维持QP稳定同时避免VBV缓冲水平落到0%(即缓冲器下溢)。

VP9如何给Twitch的电竞直播带来价值?

左图:x264由于码率控制在场景变化时表现不佳而导致画面失真; 右图:NGCodec VP9编码器在场景变化时保持稳定的视觉质量

精品文章推荐

技术干货:

本文分享自微信公众号 - LiveVideoStack(livevideostack)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
3年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这