[AV1] 谈谈AV1中的 S-Frame

前几天在看AV1代码的时候,偶然在代码中看到了一个Switch Frame的概念,也称为S-Frame,因为之前我只看过HEVC,从来没有见过此概念,所以特地查了下,感觉跟H.264的extended profile中的SI/SP技术比较类似,下面简单记录下AV1中的S-Frame的相关信息。

首先,一类新技术,肯定是伴随着一类待解决的问题的出现而出现,当今虽然已经4G技术已经普及,5G技术也在如火如荼地进展中,但是由于地域的不同,由于设备的不同,并不是每个人的网络都可以无压力地传输高分辨率的视频,也并不是每一台设备需要高分辨率的视频。所以如果按照下图所示,针对于所有的设备和网络都传输同样的分辨率文件的话,那不免会对网络资源造成浪费。
[AV1] 谈谈AV1中的 S-Frame_第1张图片
同样,当我们回想起大学宿舍时代,当我们看视频的时候,一旦有人打开迅雷开始下载,那正在看的视频就会出现卡顿,buffering的小花一直没完没了地转,这种情况下,如果视频依然按照原先的分辨率进行传送的话,亦会对用户体验造成不好的影像。

ABS: Adaptive Bitrate Streaming

在实际的流媒体传送中,ABS技术使得我们在观看视频的同时,可以实时地根据我们的网络状况和CPU的能力(capability)相应地调整流的质量。
[AV1] 谈谈AV1中的 S-Frame_第2张图片
所以这样的话,我们在源端就得编码出多个bitrate的流,然后客户端根据自己的资源来适时切换到不同的流上面去。这里不同resolution的流称为不同的rendition。
[AV1] 谈谈AV1中的 S-Frame_第3张图片
所以在此,问题就被引出来了,当我们网络情况发生变换时,我们应该在流的什么地方进行切换呢?

我们知道,在其他的编码标准中,我们都是从随机接入点(RAP)切入开始解码,RAP是I帧,在VPx中,帧内帧包含KEY帧或者Intra帧,相比起Inter帧,其数据量的大小不是同样一个数量级的,所以正确且恰当地在流中插入Key/Intra帧在ABR中非常重要。

S frame 的出现

首先我们看这么一个例子,我们在解码的时候,先找到RAP帧,此时,如果该帧为IDR帧,则该帧前面的帧均无法作为参考,那么可想而知该帧所包含的数据量巨大,所以说我们如果想把码率降下来,那么就要缩减IDR帧的数量,然后如果缩减了IDR帧的数量的后果就是随机接入的等待实际要变长,这样会降低实时流的用户体验。

为了解决上面的问题,提出了S frame的概念,S frame是用来取代传统I帧或IDR帧的存在(不是完全替代),它作为一个新的随机接入点,解码器可以从它开始解码,它具备IDR帧的优点,但是它会大大减少该随机接入点所需要的数据量。下面引用一句维基百科中的解释:

Switch frames (S-frame) are a new inter-frame type that can be predicted using already decoded reference frames from a higher-resolution version of the same video to allow switching to a lower resolution without the need for a full keyframe at the beginning of a video segment in the adaptive bitrate streaming use case.

从这段说明可以看出来,S frame 它是由高码率的流获取predictor,然后作为新的一路rendition的起点。如下图,当没有S帧的情况下,当想切换到其他码率的码流的时候,我们需要解新一路码流的IDR帧。
[AV1] 谈谈AV1中的 S-Frame_第4张图片
但是,当插入了S帧以后,我们就将流分为了更小的一个个segment,这样就方便根据网络情况随时在流中进行切换。

[AV1] 谈谈AV1中的 S-Frame_第5张图片
S帧带来的优点

  • 切换到另外的码流更快,质量更好
  • 低延时
  • 有更好的容错

但是随着满足更低的延时带来的的更多插入的S帧,会使得压缩率减少。

过段时间整理下S Frame在AV1中的实现。

你可能感兴趣的:(AV1,av1,switch,frame,s,frame,video,coding,codec)