当前位置: 首页 > 科技观察

基于RTC的全景8K@120fpsFoV实践

时间:2023-03-15 09:17:47 科技观察

作者|高丽文1.行业现状与技术挑战VR眼镜的出现和快速发展,让“赛博朋克”和“未来世界”不再遥远。人们在娱乐和运动时,可以体验到完全超越现有音频和视频的“身临其境”体验。在体验云游戏、大型全景活动互动等应用时,要想保持这种“身临其境”的“身临其境”体验,还需要超高清、高帧率的全景视频源,以及强大的传输能力带宽。以及超低的头部运动延迟(MTP)。视频源方面,由于VR眼镜独有的FOV(FieldofView,视场,VR设备重要指标之一,反映视野),4K全景视频在VR上看起来只相当于540P眼镜,所以8K分辨率视频的分发只是超高清画质体验的“入门级需求”。此外,一些游戏、体育赛事等内容的视频对帧率也有很高的要求,只有达到120fps才会有更好的体验;这是一个很大的挑战,带宽需要达到150Mbps以上。在VR眼镜方面,近两年VR一体机技术发展迅速。一体机设计,不受外接设备束缚,开机即用。受到市场的广泛欢迎,具有逐步取代VR头显的潜力。潜在的。但“便携性”的优势必然会影响其在解码、渲染、带宽处理等方面的表现。处理上述8K@120fps/150Mbps任务时需要特殊处理。目前业界使用的一些方案在视频质量/帧率/时延/带宽等方面做了取舍,导致终端用户体验不尽如人意:要么画质不堪(lowquality),要么低帧头晕(low帧率),或难以忍受的延迟(高延迟),以及巨大的带宽成本(最后一英里全景)等,如业界采用的“直播转码”+“CDN”的“分发链路”方案,在一方面,它的高延迟不能应用于一些交互性强的场景;影响用户的“身临其境”体验。利用RTC将这种“富媒体”传输到VR一体机中,可以较好地解决高画质、低延迟的问题,但也面临着一些困难。1.18K和120帧很难同时拥有前文提到,在VR场景中,视频如云游戏、大型展会、活动等,“高分辨率”和“高帧率”缺一不可。但我们发现无论是GPU还是VR一体机的芯片,其编解码能力都可以兼顾“8K”和“120fps”的性能体验。我们使用了gpu-z工具和Nsight工具来分析NvidiaTeslaT4硬件的编码能力。分析发现,当视频源达到8K分辨率时,单张NvidiaTeslaT4最高只能支持8K@60fps,并且存在性能波动,一般单张显卡性能稳定在8K@50fps。以下为测试数据:从解码能力来看,目前市面上主流的VR一体机(售价1500-2000元)基本都采用高通XR2芯片。该芯片宣称的解码能力为8K@60fps或4k@120fps。发现8K@60fps也是上限值,其实很难稳定在8K@60fps。以下为测试数据:因此,编解码性能成为支持8K@120fps的最大瓶颈。1.2全解码方案带宽性能不足。传输8K@120fps全景视频需要150Mbps的带宽。目前5G普及率不高,宽带下载速度无法满足这样的传输条件。以下是2021年三大运营商下行速度的中位数数据:数据来源:《2021年全国网络速度和质量报告》从理性的角度来看,由于VR眼镜的视角,观看端不需要对屏幕内容进行解码整个场景同时进行,全解码方案浪费了大部分码流带宽,导致下行带宽较大,给最后一公里带来巨大压力,不利于互联网分发。1.3头部运动延迟高易引起头晕MTP(MotionToPhotons)是VR眼镜的另一个重要指标。指从头部运动到显示相应画面的时间。小于20ms的MTP延迟可以大大减少晕车的发生。2.VolcanoEngineRTC是干什么的2.1总体介绍为解决上述问题,VolcanoEngineRTC引入了FoV方案,让接收端只接收视场内的高清码流,解决编码不足的问题解码性能和带宽不足。此外,我们同时传输高清瓦片流和低清全景背景流,避免头部快速移动导致视角切换导致黑屏。利用火山引擎覆盖全球实时音视频网络边缘节点,最终实现低清背景MTP<20ms,高清FoV流MTP<100ms。如图所示,首先,编码器将一个8K视频分成几个tile(在HEVC中,图像从水平和垂直方向被分成几个矩形区域,这些矩形区域称为tile,每个tile可以独立编码和解码),使用nvenc分别对每个图块进行编码;同时编码2K全景图,在接收端可以“覆盖”,不会引入较大的码率提升导致解码端性能跟不上;然后在媒体服务器端,上行通过ssrc同时接收高清瓦片流和低清背景流,其中下行高清瓦片流根据用户视野进行过滤转发,下行低清背景码流不过滤转发;最后,接收端根据HEVCtile标准,根据图片的位置,将所有的tile合并成一个原始大小的编码视频,解码后上传到屏幕。下面详细介绍VolcanoEngineRTCFoV方案的实现和优化。2.2编码的实现与优化2.2.1多GPU分布式编码如前所述,由于单个NvidiaTeslaT4不具备8K@120fps的编码能力,因此需要通过多GPU并行编码来实现。火山引擎RTC在编码端并行使用多块NvidiaTeslaT4显卡,将8K视频切割成72个tile,用72个编码器进行编码,然后通过RTP打包发送到网络。这里需要注意的是,并不是所有的显卡都可以创建多个hardcoder。个人消费级显卡对编码器数量有限制。Nvidia显卡可以在官网查询。2.2.2码率控制码率的准确性对下行可接入的VR一体机数量更为重要。但在测试过程中,我们发现编码器的码率控制有时会不准确,单纯调整编码器的编码参数并不能解决问题。针对这个问题,需要在硬编码器内部定期监测编码器的实际编码码率,监测频率设置为10s。如果实际编码率低于预期码率,则统一提高所有编码器的码率。否则,将其调低并将粒度调整为10%。经测试,加入码率监控后可以稳定预设码率。2.2.3编码器复杂度调整编码器的复杂度在创建编码器时默认确定,中间不能动态修改。这会造成以下问题:当编码器的计算资源过剩时,无法充分利用编码器,如果编码器的使用率很低,则可以增加编码器的编码复杂度,从而提高图像质量。编码器的性能可能会受到整个系统性能的影响。例如,如果降低系统的时钟频率,编码器的性能就会受到影响。如果此时能够降低编码器的复杂度,那么整个视频流的体验就会得到提升。编码器的复杂度可以通过preset来划分,不同的preset代表不同的复杂度(关于preset的详细说明可以参考Nvidia官网的信息),我们的实测数据如下:通过测试数据,我们发现presetp1和p4这两个性能很关键,可以通过动态调整preset来增加编码的复杂度,从而提高编码的画质(动态设置preset不会花费太多时间,不会造成图片冻结)。因此,我们将当前默认预设调整为p4。如果p4的性能不能保证实时性,我们会退回到p1。2.3解码实现及优化2.3.1根据FoV视角发送视频一些直播场景已经开始使用FoV方案,但目前还没有RTC厂商按照视角发送视频内容。为什么不使用SVC或Simulcast进行视频分发?SVC和Simulcast只能接收和解码全帧视频,导致带宽增加或图像质量下降。VolcanoEngine的FoV方案中,高清视频流按照视野异步发送渲染,低清视频流全量发送,在不降低画质的情况下节省带宽,避免快速视角切换和高清问题。视频来不及传,图片看不到。2.3.2投影方法的选择球体与平面的影像映射问题,自古以来就是困扰地图测量人员的一个问题。在VR全景视频发展的今天,这个问题再次摆在了开发者的面前。VR全景视频需要传输,涉及带宽占用和画质损害。不同的投影方式会对图像质量和码率产生较大的影响。引自:https://leohope.com/%E8%A7%A3%E9%97%AE%E9%A2%98/2019/07/15/VR-mapping/我们使用EAC投影方式,相比Simple直观的ERP投影,EAC投影比ERP投影节省25%的面积,减少接收端数据接收约15%,更有利于视频编码器的画质优化。下面两组照片中,上图为ERP投影,7680x3840像素;下图是EAC投影,只有5760x3840像素。|2.3.3从姿态信息计算视野瓦片定义在零点向量前面,视场边界为瓦片向量,零点向量与瓦片向量的夹角小于X°,瓦片在瓦片内部的视野范围内。如上图,粉色+黄色为全景视频,分为640x640的72个区域。黄色区域是根据向量之间的夹角计算出视野内的瓦片,然后接收端向RTC边缘媒体服务器请求。发送这些磁贴。2.3.4Composite接收端根据图像的位置将所有的tile按照HEVCtile标准组合成原始大小的编码视频;同时将2K低清流放大,将高清FoV流粘贴到渲染前对应的坐标位置。放大后效果如上图。橙色部分为低清码流,放大到8K;绿色部分是高清FoV流,也就是原来的8K。头部运动缓慢,VR头显看到的是高清视野,不影响实际体验;如果有快速的头部运动,难免会看到一些低清晰度的视野,此时玩家会根据头部运动的范围重新请求高清FoV流。这时候会有一小段时间可以看到低清晰度的图像。发送高清FoV范围的码流后,画面会还原高清8K效果。2.4Headmovementdelay优化2.4.1HeadmovementdelayHeadmovementdelay=lastmilenetworkrtt+GOP/2+jitter_buffer+decoding+upperscreen2.4.2Fieldofviewprediction下图说明了“fieldofviewprediction”,即即,用户当前FoV->转头->控制信令(携带预测结果)->RTC边缘媒体服务器->发布新tile->更新FoV内容。业界已经有一些比较成熟的透视预测方案。当用户头部旋转时,它可以根据旋转加速度预测未来旋转的角度位置,甚至可以根据用户的动作预测旋转角度和方向,然后根据预测拉取相应的视图。数据可以达到很好的预测和减少延迟的效果。首先,这里仅使用用户自己的历史数据来预测其未来前景。其次,为了适应用户更快的头部运动模式,选择更快的ML算法进行预测。3、方案落地体验上述方案在实际实现中的表现如下:在GOP=15的情况下,8K高清磁头移动延迟100ms,端到端延迟130ms+,下行码率约20Mbps,数据表现理想。实际体验如下:注意:1、为了表现出高清FoV视频和低清背景视频的区别,我们在低清视频中加入了绿色滤镜。2.视频来源:https://www.youtube.com/watch?v=L_tqK4eqelA头部移动速度较慢时,视野内只能看到高清图像,无法看到绿色低分辨率图像见过。当头部移动速度较快时,偶尔会出现绿色的低清瓦片进入视野(想象一下,如果底部没有低清视频流,用户会看到丢失的画面)。4.总结与展望4.1总结火山引擎RTCFoV方案通过以下技术优化实现8K@120fps全景视频的实时传输:8k高清视频分割,支持多GPU分布式并行编码;解码视野范围内的视频切片,大幅降低下行带宽需求,在4K解码能力的基础上实现全景8K画质体验;通过视角预测,大幅降低高清视频的头部运动延迟(MTP)<100ms;4.2后续优化目前的方案还有很大的优化空间。例如,目前在解码端采用传统的缩放算法将2K低清背景码流放大为8K高清码流,会造成一定的画质损失。使用超分辨率算法将大大提升低清背景的优化体验。AI头部运动预测,利用多个用户的头部运动数据,学习具有群体共性的头部运动模式,从而加快未来内容的预取和预测。此外,Nvidia和Qualcomm主流芯片平台已经支持HDR10(High-DynamicRange,这是一种提高图像亮度和对比度的处理技术,可以提亮每个暗部的细节)的编解码,以及暗处更暗、颜色更丰富、细节更丰富),我们还将引入HDR10技术,进一步提升画质体验,让用户更贴近真实环境中的视觉体验。