音视频编解码–随机访问Random Access

背景介绍

在理想情况下,视频编码器可以发送视频第一帧的关键帧,然后每个后续帧都将表示为差异,直到视频结束。然而,有几个原因导致这种做法在实践中效果不佳:

  1. 随机访问:如果每个用户从第一帧开始并且只向前观看,则将第一帧作为关键帧发送,并且后续差异可能会起作用。但这并不是观众实际消费视频的方式。观众可以向前跳过,并在随机点加入实时视频流。为了适应这种行为,需要在整个视频中放置更多关键帧,以允许观看者从这些点开始观看。这些称为随机访问点。
  2. 错误弹性:仅发送大部分视频的差异的另一个问题是传输媒体不完美。现实世界中会发生数据包丢失、位翻转以及各种其他错误。如果您仅发送与之前的差异,并且发生错误或损坏,则该错误将继续通过视频流的其余部分传播,直到结束。在整个视频中添加额外的关键帧可以通过将解码器返回到“已知良好”帧并清除之前可能传播的错误来提供错误弹性。您可能在观看视频时看到过这种情况,其中引入了一些错误并且屏幕变得块状,或者屏幕上出现绿色形状。然后突然间,画面又恢复为清晰的图像。
  3. 场景变化:当帧之间的差异相对较小时,仅发送帧之间的差异效果非常好。在内容更改或场景切换期间,几乎整个图像可能会从一帧到下一帧充满新信息。发生这种情况时,继续仅发送差异通常没有意义。视频编码器通常会检测到这种情况并自动在边界点插入新的关键帧。这称为场景变化检测。

所以随机访问长期以来对于广播视频,流媒体等场景至关重要。这是通过H264 IDR(即时解码刷新)、H265 CRA(干净随机访问)和 H266 GDR(渐进解码刷新)来完成的。IDR已经众所周知,但 GDR 是一个VVC新的补充,旨在平滑比特率。对于传统的 IBBPBBPBBI GOP 结构,比特率会出现周期性峰值,因为 I 帧比 B 帧大得多,实际上也比 P 帧大得多。GDR 的想法是让 I 帧在多个帧上逐渐传输,从而分散峰值。这个缺点是需要等待更长的时间才能获得完整的 I 帧。

概念解释

访问单元(Access Unit,AU):一组 NAL 单元,始终包含一个主编码图片。 除了主编码图片之外,访问单元还可以包含一个或多个冗余编码图片、一个辅助编码图片、或不包含编码图片的片或片数据分区的其他NAL单元。 访问单元的解码总是产生解码的图片。

基础层(Base Layer):比特流子集,包含比特流中 nal_unit_type 语法元素等于 1 或 5 的所有 NAL 单元,并且不包含任何 nal_unit_type 语法元素等于 14、15 或 20 且符合 1 或 1 的 NAL 单元。 [H.264] 附件 A 中指定的更多配置文件。

编码视频序列(Coded Video Sequence,CVS):访问单元序列,按解码顺序由一个 IDR 访问单元组成,后跟零个或多个非 IDR 访问单元,包括所有后续访问单元,直至但不包括任何后续 IDR 访问单元。

IDR访问单元(IDR Access Unit):其中主编码图像是IDR图像的访问单元。

H.264

H.264适合随机访问的功能包括:

独立图片 (IDR) 帧:IDR 帧是帧内编码帧,可以独立于任何其他帧进行解码。 这使得它们非常适合用作随机访问点。

灵活的切片排序:H.264 允许灵活的切片排序,这意味着帧的切片可以按任何顺序进行解码。 这允许解码器在接收到前几个切片后立即开始解码帧,即使它尚未接收到所有切片。

IDR图片(IDR Picture):瞬时解码刷新图片。 一种编码图片,其中访问单元内的目标依赖表示的所有切片都是 I 或 EI 切片,这导致解码过程在解码 IDR 图片后立即将所有参考图片标记为“未用于参考”。 在对IDR图片进行解码之后,可以对按照解码顺序的所有后续编码图片进行解码,而无需根据在IDR图片之前解码的任何图片进行帧间预测。 每个编码视频序列的第一张图片是IDR图片。

引入 IDR 帧是为了避免当您想要跳/前进到视频中的某个位置或在视频中间开始观看时视频出现任何失真。

从理论上讲,非 IDR 关键帧听起来很理想:可以通过查看更大的帧样本来查找冗余,从而大大减小文件大小。不幸的是,这样会出现很多问题,并且该功能不能很好地与自适应流媒体配合使用。对于一般应用特别是实时应用,假设有人开始观看流媒体几分钟,会出现长时间黑屏,没有画面现象。这是因为 P 帧和 B 帧可能引用还未实际到达并可以访问的信息。对于自适应流媒体,如果比特率和分辨率发生变化,也会出现类似的问题。这是因为新的选择可能会引用观看者在不同质量设置下观看的数据并且不再是并行的。出于这些原因,始终建议制作基于 IDR 的关键帧。

封闭 GOP 是其中帧只能引用 GOP 内冗余块的帧的 GOP。如下图中看到,第二个 GOP 以 IDR 帧开始,因此该 GOP 内的帧无法向后引用该 I 帧之前的帧。如果下一个 I 帧也是 IDR 帧,则这将是封闭的 GOP。

音视频编解码--随机访问Random Access

开放 GOP(图片组)是其中帧可以引用其他 GOP 中的帧以获得冗余块的 GOP。如下图中看到这一点,其中第一个gop中最后两个 B 帧引用下一个 GOP 中的 I 帧以实现减少冗余的效果。

音视频编解码--随机访问Random Access

H.265

HEVC(高效视频编码)为了更好地满足不同的应用场景,沿用H264的帧内编码、IDR编码,并增加了随机访问编码CRA和BLA。对这些编码结构的设计丰富了其应用能力。

新增的随机访问结构主要周期性地(大约每隔1秒)插入随机访问帧,也就是干净的随机访问(Clean Random Access,CRA)帧。这些CRA帧在编码视频流中构成了所谓的随机访问点(Random Access Point,RAP)。随机访问点的主要特征是可以独立进行解码,无需参考比特流中前面已经解码的图像帧。这样的设计使得用户可以方便地快速定位和获取视频内容,从而有效地支持了信道切换、视频搜索以及动态流媒体服务等应用。CRA是开放式gop编码效率(请注意,由于时间预测不连续性,封闭式 gop 节奏更差)和随机访问能力之间的有效折衷。

音视频编解码--随机访问Random Access

上图所示一个围绕CRA(Clean Random Access)帧的典型预测结构:

SOP定义为按解码顺序连续的一个或多个编码图像,其中第一帧编码图像是最低子层的参考图像,并且除可能的解码顺序中的第一帧编码图像外,没有其它编码图像是RAP图像。

RASL和RADL是描述SOP中B帧性质的术语。RADL帧指的是那些在解码顺序上,在CRA帧之后但在输出顺序上位于CRA帧之前的帧。由于RADL帧并未引用任何在解码顺序上早于CRA帧的帧,所以当从CRA帧开始解码时,它们可以被正确解码。

而RASL帧也位于CRA帧之后的解码顺序中,但它可能会引用在CRA帧之前的帧。因此,如果从当前CRA图像进行随机访问,RASL帧无法被正确解码,在随机访问解码中,这类帧通常会被丢弃。

图中的相对解码顺序通过图像内部的数字表示。前一个SOP中的任何图像都有比当前SOP中的图像更小的解码顺序,而下一个SOP中的任何图像都有比当前SOP中的图像更大的解码顺序。I8作为CRA图像,隶属于一个包含B9、B10和B11的SOP。这些图像在解码顺序上跟随CRA图像,但在输出顺序上则优先于CRA图像,因此被称为CRA图像的前导图像。

由于B9和B11并未引用任何在解码顺序上早于CRA图像的图像,所以当从CRA图像开始解码时,它们可以被正确解码,因此被称为RADL图像。

而B10是RASL图像,只有当解码从当前CRA图像之前的RAP图像开始时,才能被正确解码。

如果从当前CRA图像进行随机访问,则RASL图像无法被正确解码,因此在随机访问解码中,RASL图像通常会被丢弃。若I8是IDR图像,它将清空DPB(Decoded Picture Buffer),B10将不能使用P4作为参考。而如果I8成为CRA图像,可以实现这样的操作。

H266

GDR( Gradual Decoding Refresh)是VVC中新增的一个特性,旨在平滑比特率。对于传统的 IBBPBBPBBI GOP 结构,比特率会出现周期性峰值,因为 I 帧比 B 帧大得多,实际上也比 P 帧大得多。

GDR描述了一种可以从帧间编码的图像进行随机访问的策略。尽管在初次访问时不能立即得到完全正确解码的图像,但随着更多帧的逐步解码,视频内容中能够正确解码的区域会逐渐扩大,直至某一帧时所有区域都能被正确解码。

由于采用帧内编码的块可以相对均匀地分布在多个连续的图像中,因此编码器有可能实现较平稳的码率,这种特性通常有助于降低点对点的延迟时间,从而优化视频流的传输效率和观看体验。

音视频编解码--随机访问Random Access

值得一提的是,GDR并不是一个新出现的概念。在先前的AVC和HEVC编码标准中,就已经实现了对GDR的支持。具体来说,编码器会通过SEI(Supplemental Enhancement Information)消息中的恢复点(recovery point)来表明支持GDR以及给出GDR恢复点的位置。

然而,在最新的VVC(Versatile Video Coding)标准中,对GDR的处理方式有所改变。首先,VVC引入了一种新的NAL(Network Abstraction Layer)单元类型来表示GDR。

音视频编解码--随机访问Random Access
音视频编解码--随机访问Random Access

其次,GDR恢复点的位置信息则被放入图像头部。这意味着,一个码流或CVS(Coding Video Sequence)的首帧就可以是帧间编码的GDR帧。

音视频编解码--随机访问Random Access

更为引人注目的是,VVC中的整个码流中甚至可能完全没有IDR(Instantaneous Decoding Refresh)帧或CRA(Clean Random Access)帧,即那些可以立即进行解码的帧。而且整个码流中也可能没有一帧是采用帧内编码。

这种设计使得VVC在处理随机访问和解码刷新时具有更大的灵活性和更高的效率,旨在满足各种复杂应用场景下的视频编码需求。

综合比较

音视频编解码--随机访问Random Access

参考文献

https://blog.csdn.net/Dillon2015/article/details/124830411

https://ieeexplore.ieee.org/document/9506585

https://datatracker.ietf.org/doc/html/rfc9328

https://ieeexplore.ieee.org/document/6324417

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论