一、云渲染场景的传输需求及挑战
首先介绍一下云渲染业务对音视频的一些传输要求,以及面临的挑战。
1、云渲染场景应用
随着互联网技术的发展,音视频应用经历了三个阶段:
第一个阶段主要为 2008~2013 年,也就是 3G 时代,以长视频为主,以 PDN 点播、 VOD 点播为核心技术。
第二个阶段从 2013~2019 年,进入 4G 时代,诞生了很多音视频的产品,比如播直播、短视频,音视频技术。
第三个阶段从 2019~ 至今,进入了 5G 时代,随着 5G 和云基础设施的发展,给音视频技术带来了更多施展空间,音视频技术进入繁荣时期,这一时期的应用和技术主要有云会议、互动直播、远程协作、XR、云游戏、自由视角等等。
什么是云渲染,简而言之,云渲染是利用云端算力来解决终端算力瓶颈问题,进而解放端侧算力压力,主要的场景有虚拟社交,虚拟演播厅、虚拟演唱会、云游戏、远程协作等。
云渲染平台借助云端算力和音视频技术将引领下一代多媒体互联发展。
2、云渲染平台架构
云渲染平台主要有两大部分,第一部分是云端渲染平台,第二部分是跨终端平台,两个部分中间通过串流技术依托网络传输进行链接。基本原理是把 3D 应用渲染在云端运行,通过接收终端的控制指令渲染相应音视频画面,再通过流化技术由网络推给终端用户进行体验。
串流是云渲染业务用户体验的核心点,云渲染将本地应用的算力移到云端,但需要与本地应用有相同的体验,从体验角度来讲,云渲染对流化传输有两个需求:
① 如何实现沉浸式超高清体验:相比以前的音视频,比如云会议、在线课堂,云渲染需要实现高清体验;以前 1080P、720P 分辨率,1~2M 的带宽基本满足,但现在的视频画面更高清,比如 4K、8K 画质,音视频传输负载变更大,从原来的 1M 级变成 10M 级,自由视角的场景甚至到 100M 级。
② 如何实现实时互动:零延时是相对概念,用户无感知延时就叫零延时,目前百毫秒延时能够给用户提供较好的体验,百毫秒延时成为未来的趋势。
二、RTC 和云渲染业务的结合
本章节将介绍 OPPO 在云渲染场景与 RTC 的结合,传输架构所做的调整,并分享一些优秀的实践。
1、基于 CloudRTC 的云渲染平台传输架构
首先是产品架构,云渲染平台传输架构与传统 RTC 架构类似,包括推流端、拉流端、云端转发三大部分,不同点在于边缘云与媒体转发服务在同一个机房或同一个网源点上。
推流端主要部署云渲染应用,边缘计算集群、虚拟化后的 GPU 集群都在这部分。
云端服务包括三部分:
第一部分是信令加速服务,负责用户接入、流量调度、用户管理、房间管理等。
第二部分是媒体转发服务,与传统 RTC 有一点区别,会根据云渲染应用提供 SFU/PTP 架构,同时提供转发和点对点直连。媒体转发服务负责云渲染平台的两种数据流,第一种是媒体流,也就是音视频流,第二种是控制流,即用户对云渲染平台反向的交互控制指令。
第三部分是拉流播放服务。拉流播放实现了更多端侧设备适配,如 IOT 设备、头显设备、手表、鼠键盘、手柄及平板、手机、电脑等设备。
接下来对调整后的云渲染全链路串流方案传输架构进行整体介绍。如上图所示,从架构上分为三大模块:
① 云化平台:渲染应用的核心模块。
② 流化模块:包括采集编码、网络传输、解码、反向指令传输等等。
③ 终端显示:包括指令采集等等。
整体流程如上图所示,过程中有个技术点需要重点介绍,在整个流程中我们将指令采集和音视频流放在同一网源,即同一个传输协议,将指令采集通过信令方式传输,通过将指令发送与音视频通过同一通道传输,可以对时延有较好的控制,方案已经在新一代的 OPPO 云渲染平台上线。
三、低延时串流技术探索
这一章节中将介绍对低延时技术的探索与实践,特别是 RTC、串流等技术。
1、云渲染串流时延优化
通过分解将整体时延优化分为三个部分:
① 采集编码优化。
② 传输优化。
③ 接收端优化。
2、采集编码优化
采集编码优化主要有两部分工作:
(1)GPU 编码方案
GPU 编码方案的调整包括渲染画面显示后,通过屏幕或窗口采集,送到编码模块进行编码;另外,引入 GPU 的优势,通过在 GPU 进行渲染和编码,引入零拷贝编码方案。
零拷贝编码方案:通过云渲染引擎设置钩子函数,当渲染画面出来之后通过钩子函数将 frame buffer 里面的数据整理,将 frame buffer 里的数据拷贝到共享纹理 share texture 中,通过共享纹理图像使用 GPU 进行编码,可以避免 GPU 和 CPU 之间原始数据拷贝,通过在 GPU 内部完成视频采集处理和编码,大大缩短效率,降低 CPU 消耗,编码模块将数据送到云串流引擎上通过网络发送,同时在时延上有一些收益。
(2)低延时编码方案
① 自适应编码:结合传输和控制,根据网络质量和传输质量进行自适应编码及码率调整。
② 前向纠错技术:结合纠错技术对网络丢包进行动态冗余编码,进行信源编码交错。
③ ROI 编码:通过 ROI 区域感兴趣编码,降低一些编码码率,增强画质,从而实现低码高清的。
④ 分层编码:分层包含 SVC 编码以及一些 Cmucas 的编码来实现抗弱网以及在弱网情况下的重传压力。
⑤ LTR 编码:通过 LTR 查询参考帧的编码引入,在编码方案上会做低延时的更多选择性。
3、传输优化 -基于 GCC 的优化方案
再来看一下传输层的优化内容。
(1)拥塞控制优化方案:OPPO 的 RTC 基于 WebRTC 演进,控制算法是基于 GCC 的优化方案,在低时延的预算情况下,媒体传输在发生网络拥塞时降低一些码率,避免发生更严重的网络拥塞,减少丢包重传及时延上升。
① 带宽评估
1)调节基于延迟和丢包预测模型的加权参数,提高网络敏感环境抗性。
2)在探测过程中,采用快速收敛策略,优化带宽估计反馈周期 feedback。
② Pacing 流控发送
1)在网络良好时,调整流控超发参数,提高单次数据发送量,降低单帧发送时延。
2)采用 Pace+Probe 方案,更加主动的探测网络带宽,提高带宽利用率。
4、传输优化 -流畅性优先的 QoS 策略
接下来介绍传输算法中重要的内容——QoS 策略。
QoS 策略如图所示,如何在编码发送接收过程中,发现丢帧,恢复,通过不同手段解决丢帧问题,对 QoS 进行优化,保证流畅性。QoS 流畅性优先优化策略包括:
(1)HARQ 动态冗余策略
优化重传和 FEC 技术,通过前置冗余的方案,在丢包之前配备一定冗余,以局部带宽为代价,降低重传时延。
(2)不对等保护
依据不同信源做不同保护策略,在弱网场景,配合 SVC 分层编码,采用主动丢帧和减少 P 帧重传策略,降低传输带宽,缓解网络拥塞。
通过流畅性优先的 QoS 策略,可以在时延及带宽上取得更好的平衡。
5、接收端优化--零缓存播放
下面介绍接收端的优化。在音视频发送到客户端播放之前经历三个阶段:抗抖动、解码时延、渲染时延;最后到接收端时延。
接收端时延优化策略有:
(1)调整 Jitterbuffer 算法
采取“来一帧,出一帧”思路,重构低延时 Jitter 评估方案,同时弱化帧间差异带来的抖动,控制 buffer 缓存,更快更及时地输出给解码器解码。
(2)低延时解码
在硬件比较差的设备,采用软硬结合的解码方案,基于端侧设备选择解码类型,以达到高效率低延迟的目标。
6、时延测试数据及应用效果
上图中展示了优化后的时延实验测试数据。
左边图片是基于 RTC 场景的测试数据,时延在 180ms 左右,整体网络模拟延时是50ms;优化后的低时延测试数据在 100ms 左右,通过边缘节点可以进一步降低网络时延。
右边图片是 OPPO 的 3D 虚拟数据中心,基于优化后的 RTC 技术,整体时延及体验得到了提升。
四、总结与展望
最后介绍一下对低时延应用的展望。
现有串流技术,达到了百毫秒级别,但仍需要进一步优化时延,实现更高标准的“延时自由”,未来展望主要有三点:
(1)内容生产端:通过生产的传输端优化,比如,云端应用与推流更紧密的联合,实现“生产端+传输”更加闭环。
(2)云端:通过云端更低成本的基础设施,结合边缘节点,实现全局一张网,降低接入成本和时延。
(3)用户端:用户端的 SDK 除了实现播放,通过策略在部分端侧进行端侧渲染,以及 RTC 和指令控制的结合,达到更佳的用户体验。