本文来自苹果WWDC 2021,演讲者是苹果视频编码与处理团队的PeiKang Song,主要介绍了Video Toolbox中的低延迟编码模式,并对其API调用进行了简要说明。
低延迟的视频编码对很多视频应用场景(如实时视频通话等)都非常重要,而该模式旨在对目前实时应用中的编码架构进行优化。具体来说,为了做到实时的视频通话,该模式在以下几方面进行了优化:
首先,PeiKang Song对低延时视频编码技术进行了概述。下图是Apple平台视频编码的基本框架,Video Toolbox以CVImagebuffer中的图像作为输入,然后使用诸如H.264之类的codec对其进行编码压缩,输出的视频图像会存储在CMSampleBuffer中,然后经网络传输用于视频通话。从图中可以看出,系统的端到端时延主要取决于两方面的因素:视频编码处理时间和网络传输时间。

为了缩短视频编码的处理时间,该低延时模式取消了帧重排机制,转而对视频各帧进行顺序处理。同时,该模式下的码率控制模块也可以根据网络情况进行快速的自适应变化,因此网络拥塞带来的延时可以被最大程度地减小。通过使用这两种方法,该模式可以很大程度上降低视频通话延时(对于720p 30fps的视频,该模式最多可以减少100ms的延时)。此外,低延时模式的视频编码器通常也会使用专门的硬件加速器,以降低能耗。值得注意的是,低延时模式支持的codec通常是H.264,并且该模式被引入到了iOS和macOS中。
接下来,PeiKang Song对Video Toolbox的使用方法(VTCompressionSession API)进行了简要介绍,其流程如下图所示。而在该compression session中使用低延时编码也非常容易,只需要对session creation步骤进行修改即可。

除了低延迟以外,该模式还具备其他一些实时视频通信所需的特点:
1)new profiles:通过增加两个新的配置文件(CBP和CHP),该框架的互操作性得到了有效提高,CBP主要用于low-cost的场景,而CHP则使用更复杂的算法达到更高的压缩比;

2)temporal scalability:当有多个接收者存在时,时域可伸缩可以有效提高框架的有效性。即使各个接收方的接收能力不同,发送端也只需要编码一次产生单一码流。
具体来说,对原本按顺序排列的各帧进行采样,取出部分帧以分成两个不同的时域层次,即基本层和增强层,同时原本的帧参考关系也会改变,即增强层中的各帧之间无参考关系,只有基本层会被用作参考,因此即使网络传输问题会造成增强层丢帧,也不会带来明显的性能损失,增加了系统的鲁棒性。对于带宽接收能力较差的用户,只需传输基本层的内容即可,而对于具备较高网络性能的接收方,则需要叠加传输增强层的内容作为补充,以提高质量;



3)max frame QP:通过调整帧的QP,可以规定视频的质量和码率。在低码率模式下,可以根据图像复杂度、输入帧率、视频运动剧烈程度来调整QP,因此一般提倡使用默认方式来确定QP值,而如果客户端对视频质量有特殊需求,则允许对QP的最大值进行调整,以此来规定视频质量下限。但是如果编码器使用max frame QP时仍会超过码率限定阈值,则会通过丢掉一些帧来降低码率;

4)long-term reference(LTR):LTR的目的是提高鲁棒性,具体来说,下图是网络传输故障时的一般情况,会产生丢帧现象。而当接受端检测到丢帧时,它会请求发送刷新帧来重启会话。而当编码器接收到请求后,它会发送一个关键帧用于刷新,但是关键帧往往是很大的,需要花费较长的时间到达接受端,因此会让本来就拥堵的网络传输条件雪上加霜。

为了解决这个问题,该模式使用预测帧来代替关键帧进行刷新,其流程如下图所示:首先,编码端选出LTR帧,后经sender将其发送,当接受端收到后,会发回一个ack信息作为反馈。对于网络拥堵的情况,当编码器接收到refresh request之后,它从一系列ack LTRs选取一帧作为参考,编码生成一个新的帧:LTR-P。通常,LTR-P帧是比关键帧小很多的,因此它非常易于传输。

