作者 | 鲁冬雪
亚运会、大运会、中国网球公开赛、上海网球大师赛……2023 年可谓是“体育大年”。在拿下世界杯转播的版权后,抖音这次又成为了亚运会持权转播商、中央广播电视总台直播合作伙伴,对亚运会比赛全程进行 4K 超高清直播,并支持回放。在“转播”的背后,火山引擎作为抖音亚运会直播背后的主力技术服务商,在整个赛事转播过程中通过自研 BVC 编码器、画质优化、超低延时等视频云技术和 VR 观赛等互动玩法,帮助用户实现了更高清、更交互、更沉浸的观赛震撼感,切实打造了新一代观赛新体验。
1 极致的直播低延迟体验勇攀「领域新峰」
亚运会期间的抖音直播拥有亿万级的流量,在这样大规模并发下,火山引擎视频云想要提供 4K 超高清超低延迟看播能力,首先要克服的就是“稳定流畅地做到更低延迟”这样的巨大挑战。
其实从亚运会直播的整个信号分发链路我们就能看出各个节点可能会出现延迟的概率有多么大。生产环节延迟其实主要来源于两部分,其一是信号源,网络流信号源在给到抖音之前存在多个环节,每个环节都可能会对最终的延迟有影响,但这一部分技术团队可以影响的比较少;其二是演播室制作环节,演播室在收到媒体的源流之后,需要加上解说和包装,会引入一定的延迟。在直播的传输环节里,对延迟影响大的主要是转码、分发和播放缓冲和 CDN 的分发环节。
图:信号分发链路
为此,在低延迟方面,火山引擎视频云团队(下文称“团队”)做了许多攻坚和优化工作。在攻坚之前,最主要的是测量出有效的全链路延迟数据,找到最优的测量方法——而团队在经过多次探索后,最终采取了以下两个方法(仅适用演播室推流到抖音播放链路):
图:延迟测量手册
在有了衡量延迟的基准线后,团队便展开了“低延迟”攻坚工作。这次亚运会的转播,抖音的多个演播室是由多家第三方公司负责的,第三方公司的制作规格不一。虽然在正式比赛之前经过大量的沟通,基本确认最重要的两个演播室的技术方案和使用的编码系统是一致的,但是在演播室环节仍然引入秒级别的延迟,和供应商工程师沟通后,短期内为了保证稳定,没有再进一步压缩,这部分引入的延迟和行业同类产品也是一致的。同时,使用实时的转码模式,转码器引入的延迟一般在几百毫秒以内甚至更短。
图:一次直播的简化的流程
在整个项目中,团队主要采用了两个低延时直播方案——FLV 方案和 RTM 方案。关于 FLV 方案,FLV 是现在国内主流直播播放使用的协议,为了满足亚运会转播需求,团队在世界杯赛事转播过程中已经验证过的 FLV-3s 方案和基于基于 FLV 方案做更低延迟下探的基础上,配合输出了精细的追帧、丢帧策略。
要知道,播放器音视频数据流转时序一般是“网络 IO 下载音视频数据到播放器缓存 buffer→解码器从 buffer 中取数据解码并降解码后的数据存入待播放缓存→音画同步等播控策略→渲染播放音视频帧”。由于进一步下探延迟,卡顿也会随之恶化,反而延迟逐渐累积增加达不到低延迟的效果,因此延迟下探必须配合延迟追赶播控策略来确保延迟增大后可及时追赶恢复到低延迟。于是团队在亚运会项目上总结出了一套兼顾延迟与 QoE 指标平衡的播控策略:
图:策略可配置参数以及含义映射
关于 RTM 方案,参考了 WebRTC,可以让端到端延迟直接进入 1s 以内,RTM 优化的目标是在延迟降低的情况下,用户核心体验指标对齐或者优于大盘的 FLV 方案。在世界杯的多场比赛中,RTM 方案也承担了一定量级的 CDN 容量,核心键指标上都对齐了大盘,稳定性和质量得到了充分的验证。
首先,为了让 RTM 的综合指标对齐 FLV,从若干角度来进行 RTM 的播控逻辑定制化,于是所有的优化都是围绕着核心用户体验指标进行展开:
其次,团队优化了“首帧时间”。我们都知道,传统的 RTC 技术采用 SDP 信令方式进行媒体能力协商,但是 HTTP SDP 信令交互存在许多弊端,比如弱网环境下,HTTP 信令建联成功率不理想;导致播放请求响应缓慢或超时;又比如,SDP 交互传输 SDP 文本的内容很大、建联的成本较高,初始化的成本无法忍受。所以相较于 FLV 的 HTTP 请求完成后直接完成建联和媒体数据直接传输,我们可以采用新的信令模式——MiniSDP 信令。这种基于二进制编码的压缩协议,提供对标准 SDP 协议进行压缩处理,可以降低信令交互时间,提高网络传输效能,降低直播拉流首帧渲染时间,提高拉流秒开率 / 成功率等 QoS 统计指标。利用 UDP 网络传输的 MiniSDP 压缩信令方式,单个 UDP 数据包请求即可完成 SDP 完整压缩信息的传输,信令建联的成功率和首帧时间可得到大幅优化。
图:采用 MiniSDP 信令进行媒体协商通信的信令交互流程
第三,经过线上的 AB 实验,团队发现 RTM 拉流成功率相比 FLV 持续存在着一定的差距,经过分析,大家发现用户的网络等级质量和用户的拉流成功率存在一定的正相关性。于是,团队拉流网络等级筛选基于网络质量预估信息,评估 TCP/UDP RTT 和数据下行吞吐率,为用户确定网络等级,选择优质网络质量的用户采用 RTM 拉流以降低失败率。在拉流前,根据用户请求的 URL 所属的 CDN 边缘节点,发起 UDP 探测。在一段时间内发送数据包观察对应 CDN 节点的 RTT 和丢包率,只有满足 RTT 和丢包率两者在特定的阈值范围内才会认为 UDP 传输可以保证质量和组帧成功率。同时,通过信令预加载,在当前的点播 / 直播房间中预先加载下一个直播间的信令信息,提前做好 SDP 加载,降低下一个房间的首帧上屏时间。就这样,团队完成了“拉流成功率”的优化。
第四,团队完成了“卡顿”、“播控逻辑”的优化。团队通过对比 FLV 和 RTM 的播控策略,发现传统的 RTC 场景优先保时延,全链路会触发各种丢帧,FLV 直播场景会优先保证“不丢帧、良好的音画同步”的良好观播体验。那 RTM 要想减少卡顿,取得 QoE 的收益,播控策略就需要进行定制化。在播控逻辑方面,团队完成了以下优化:
此外,本届亚运会超高清档位的分辨率达到了 4K,对 RTM 方案的性能带来了很大的挑战,但团队都很好地解决了。比如 4K 高清档位卡顿严重卡顿的问题,团队优化了 NACK 策略,保证了更大帧的组帧成功率;又比如针对 CPU/GPU 内存问题,团队优化了 video 传输 pipeline,减少了不必要的 raw 数据格式转换。
在团队的支持下,在亚运会的转播过程中,抖音的延迟一直领先于相同信号源的其它产品 30s 左右。这也看出了团队的强悍之处,能够根据具体业务需求和技术挑战不断完成自我迭代。目前,火山引擎视频云在 FLV、RTM 、切片类协议的延迟优化、XR 直播的延迟优化等方面已经有了较为完整的迭代方向。
2 新一代 BVC 编码器成功实现「降本增效」
视频基础体验的关键要素包括清晰度、流畅度、低延迟等,而视频编码是整个技术体系的基座,编码效率的显著提升能够在同等码率下极大提高画质以改善用户体验。但编码效率的提升并非易事。如何在保证画质不变的情况下,显著提高压缩率,同时满足实时性、低延迟的要求,是当下持续性的技术挑战。
在世界杯的转播过程中,抖音基于 BVC 编码器给数亿观众带来了极致的视频体验,而本届亚运会中,抖音首次采用了团队自研的新一代编码器 BVC。相比上一代编码器 BVC,新一代编码器 BVC 引入了大量新编码工具和算法,具有低码率高计算复杂度特点,在本届亚运会转播过程中,新一代编码器 BVC 实现了 1080P+50FPS 的实时编码,在画质不变的情况下,相比上一代编码器 BVC 实现了 20% 左右的码率节省,提升了用户体验,降低了带宽成本。
图:BVC 编码视频与新一代编码器 BVC 编码视频对比
据悉,新一代编码器 BVC 拥有简洁的工程架构,团队测试了直播场景下的所有编码工具和算法,筛选出了性价比高的工具和算法集合,并基于这个集合重新了设计轻量级的架构,其能最大化减少计算流程损耗。新的编码器架构对整个编码流程进行了重新梳理,去除原先复杂的情况耦合,为特殊工具单独设计流程,实现了编码流程的最简化。在算法基本不变的情况下,为新一代编码器 BVC 节省了超过 30% 的复杂度。同时,新一代编码器 BVC 针对直播场景进行了并行框架的重新设计,优化后的新一代编码器 BVC 在 CPU 利用率方面相比上一代编码器提升 50% 以上。
除了工程架构外,新一代编码器 BVC 还增加了大量的快速算法,以达到高分辨率 + 高码率 + 高帧率的实时编码。其还重构了编码块划分的框架,根据周围块和历史划分划分信息,灵活决定自上而下或者自下而上的划分顺序,并自适应决策划分深度的尝试方向,大幅减少了无效的划分尝试,降低了编码复杂度。新一代编码器 BVC 为直播场景增加的上百个快速算法,将整体编码速度提高了 2 倍以上,同时压缩率的损失在 5% 以内。
因为本届亚运会还有电竞项目,所以新一代编码器 BVC 便分别针对运动、游戏这两种场景进行了优化。新一代编码器 BVC 开发团队调整了数十个编码参数来控制不同编码算法在运动、游戏场景中的性价比,在获得压缩率提高的同时实现了编码加速。此外,还对码率控制进行了调优,减少了高运动场景中画面模糊的情况。
3 增强插帧多项技术绘制「画质美学」
对于媒体平台转播来说,不同赛事节目涉及链路众多,且不同赛事之间存在差异,如何保障各链路的画质稳定并进一步提升画质是一个巨大的挑战。大型赛事直播涉及链路较长,不同赛事链路存在一些差异,但基本都是现场信号经过演播室的制作传输给 CDN 再进一步分发到用户侧。从画质角度来看,整个链路可分为画质检测与画质优化两个部分,对于 CDN 之前的链路以画质监测为主,以发现问题 / 定位问题 / 推动对应链路人员解决问题为目的。
随着赛事录制技术的提升,越来越多的大型赛事都用上了 4K HDR 录制标准,画质清晰度也不断提升,那随之而来的是更大的带宽压力;而且,为了兼容消费端不同的看播设备和不同的带宽条件,服务端需要转出多种不同分辨率不同码率的版本供看播端选择。
相比 SDR 信号,HDR 拍摄的片源拥有更广的色域,更大的动态范围。但对很多终端显示设备而言,并不支持 HDR 信号播放,所以团队通过 ToneMapping 算法将 HDR 信号转换为 SDR(标准动态范围)信号。
HDR 在转换到 SDR 信号的过程中不可避免地会产生一些信息损失,常用的一些 ToneMapping 方法(如 Reinhard、Filmic、Hable),本质都是设计固定的映射曲线实现从 HDR 信号 到 SDR 信号的转换,同时尽量保持对 HDR 效果的还原。但直播赛事场景多变,且现场动态范围跨度极大,团队便提出了内容自适应 ToneMapping 算法,通过统计视频内容的实际光照情况动态地进行 ToneMapping,从而得到更优效果。
图:左 - 内容自适应 ToneMapping;右 -Hable 算法
随着音视频行业和摄影设备的发展,高分辨率的视频源占比日益增多,大部分视频需要在服务端进行降采样来配合自适应码率策略,因此降采样算法的优化也是提升 QoE 的关键。在过去的业界实践中,视频处理算法往往专注于提高分辨率(如超分算法)或者保持分辨率(如降噪算法)的处理范式,而几乎忽视了对降低分辨率方法的研究。所以团队自研了一种基于深度学习的图片 / 视频下采样算法——BAS(Byte AI Scaling)算法。不同于固定算子的 bicubic 等降采样算法,BAS 算法基于深度学习使用高精度数据训练模型,缓解传统方法带来的频域混叠与频域截断问题,降低锯齿感、减少细节丢失。
图:4K 超高清图源降采样到 480p 分辨率,左图 -BAS 算法处理结果,右图 - 传统 bicubic 算法处理结果
在与 bicubic 算法的定量对比中,BAS 基于 PSNR 指标取得了 -20.32% 的 BD-Rate 收益,意味着相同重建误差水平下可以节省 20% 以上码率,而同等码率下则可以提升画质水平。而对于更符合人眼感知特性的 VMAF 指标,BAS 同样取得了 -20.89% 的 BD-Rate 收益。
此外,因为现在消费者已经习惯了高帧率的流畅视频体验,所以针对低帧率场景,团队使用了智能插帧技术,通过对前后帧的内容进行光流估计,根据光流信息将前后帧像素都转换到中间帧,然后进行整合、生成中间帧,提升视频帧率,减少观看时的卡顿感。而针对电竞类对帧率要求较高的场景,该技术团队做了额外优化:
在本届亚运会的转播过程中,智能插帧在处理电竞项目场景中复杂运动的“英雄名字”小文字时,通常会因为光流估计不够准确而导致插出来的帧文字的位置不够准确,导致伪像出现,于是团队在训练过程中加入更多的随意移动或者静止的较小文字,使得模型能够在训练过程中更多地注意处理小文字的复杂运动,从而达到更好地插帧效果。
图:左 - 优化后;右 - 优化前
另外值得一提的是,为了兼顾视频码率和主观画质,团队使用了基于 LSTM(长短期记忆网络)的时域 ROI 技术,通过人眼显著性区域检测和编码相结合的方式,让码率在画面上的分配更加合理。除了模型设计之外,ROI 算法中另一大难点是 saliency(显著性物体检测)数据的获取,通用的 saliency 数据集在大型赛事中的表现并不理想。针对这一问题,团队收集制作了自己的专用数据集,并且对一些大型赛事做了专用数据集。
同时,为了提升低档位、低分辨率的视频清晰度,团队为本届亚运会转播提供了“超分算法”。该算法是一种基于机器学习 / 深度学习方法,根据视频信息对其进行空域、时域建模重构出缺失的细节,将低分辨率的视频重建出高分辨率视频的技术。当用户看播端网速较慢切换到 480P/720P 等低分辨档位时,端上超分算法就会被触发以提升画面清晰度。
图:左 - 源流 1080P,右 -720p 超分后
4 创新的 VR 直播技术实现「沉浸式现场」
今年杭州亚运会的火炬点燃仪式是历史上首个“数实融合”点火仪式,在观赛方式上,PICO 推出的 PICO4VR 一体机作为一种虚拟现实设备,以其双目 4K 清晰度和 105 度的超大视角,无论是比赛过程还是赛后回放,观众都可以切换到多个不同的观看视角,给观众带来了更加真实的观赛体验。
观众佩戴 PICO4VR 一体机观赛,不仅能够通过视觉感受到沉浸感,还可以通过触觉的反馈来增强身临其境的感觉。比如,在颁奖典礼上,观众不仅能看到会场上空绽放的烟花,还可以挥动手中的荧光棒为选手加油助威,同时手柄的马达模拟了充气棒或荧光棒碰撞时的震动感,使观众能够在家中感受到与现场观赛相仿的热情氛围。
VR 直播的沉浸感以及高交互性是普通直播无法比拟的,但是这也导致了传输层需要承担更大的压力——分辨率为 8K x 4K 或 8K x 8K,源流码率达到 50M 甚至 120M,非常容易因为拥塞导致卡顿、延迟增大,甚至无法正常解码播放。
为了解决这个问题,团队将 8K 的视频切分成多个块(tile),只传输用户视角(viewport)内的部分超高清块,其它区域只传输 2K 或 4K 分辨率的缩小后的背景流,在用户切换视角的时候再去重新请求新的超高清块。同时团队基于 UDP 的内容优先级感知传输方案,优先保障高优数据的传输,对于低优数据可选择非可靠传输,即使丢失也无需重传,保证 XR 直播低延迟的同时也杜绝了过大的“视觉失真”。