showeeks / hm

Other
0 stars 0 forks source link

2.2.3 Coded Video Sequences and Bitstream Conformance #1

Open showeeks opened 2 years ago

showeeks commented 2 years ago

HEVC的编码视频序列(CVS)是一系列访问单元,从一个IDR或BLA访问单元开始,包括直到但不包括下一个IDR或BLA访问单元或直到比特流结束的所有访问单元。如果CRA是比特流中的第一个访问单元,或者如果解码器被设置为通过外部手段将CRA图像视为BLA图像,则CVS也将以CRA访问单元开始。

比特流是一系列一个或多个编码的视频序列。比特流可以是NAL单元流的形式,它是按解码顺序排列的NAL单元序列,或者是字节流的形式,它是NAL单元流,在NAL单元之间插入称为“起始码”的特殊固定值串。字节流中NAL单元的边界可以通过扫描起始码串值来识别,而NAL单元流需要系统环境提供一些额外的成帧信息,以便识别流中每个NAL单元的位置和大小。

为了使比特流符合HEVC规范,必须满足HEVC规范中的所有要求和限制。必须满足所有语法限制,例如IRAP NAL单位的时间标识必须等于0。不符合HEVC规范的数据可以被解码器简单地拒绝;该标准没有规定如果遇到这种数据解码器应该做什么。不一致的数据可能是通信系统中出现问题的结果,例如丢失了一些包含比特流数据的数据包。当遇到不一致的数据时,解码器可以尝试或不尝试继续解码。然而,HEVC编码器的输出应始终完全符合HEVC规范。

规范中还保留了语法元素值。这些值不用于HEVC规范的特定版本,但可以在未来的HEVC版本中指定和使用。编码器不允许对语法元素使用保留值。如果整个语法元素被保留,HEVC规范指定第一版本编码器可以使用什么值。编码器必须遵守这些规则,以便输出比特流是一致的。

解码器必须忽略保留的语法元素值。如果在NAL单元报头中发现保留值,例如在NAL单元类型或层标识语法元素中,解码器必须丢弃整个NAL单元。这使得传统解码器能够正确解码任何未来比特流的基本层,该比特流包含为该标准的早期版本制造的解码器所不知道的附加扩展层。

某些语法元素值未指定;就它们对标准解码过程的影响而言,解码器也必须忽略这些值。未指定值和保留值之间的区别在于,保留值可以在HEVC的未来版本中使用,而未指定值保证将来不会被指定,并且可以用于标准中未定义的其他目的。未指定值的主要目的是允许外部规范使用它们。一个例子是未指定的nal单元类型值48,其被提议用于HEVC RTP有效载荷规范[11]中,以用信号通知包含多个NAL单元的聚合分组。在提议的实时传输协议有效载荷规范中,值48被用作转义码,以指示数据不应该原样传递给HEVC解码器,但是附加的实时传输协议报头数据将跟随其后,以识别实时传输协议分组中nal单元的位置和大小。RTP有效载荷规范在第节中有更详细的描述。2.3.5.

showeeks commented 2 years ago

HEVC的参数集基本上类似于H.264/AVC中的参数集,并且共享相同的基本设计目标——即比特率效率、错误恢复能力和提供系统层接口。HEVC有一个参数集层次结构,包括序列参数集(SPS)和图像参数集(PPS),它们与AVC中的对应参数集相似。此外,HEVC引入了一种新型的参数集,称为视频参数集(VPS)。

每个切片引用一个活动的PPS、SPS和VPS来访问用于解码切片的信息。PPS包含适用于图片中所有切片的信息,因此图片中的所有切片必须引用相同的PPS。不同图片中的切片也允许引用同一个PPS。同样,SPS包含适用于同一编码视频序列中所有图片的信息。VPS包含适用于编码视频序列中所有层的信息,并打算用于即将推出的HEVC分层扩展,这将实现可伸缩和多视图编码。虽然不同图片的PPS可能不同,但编码视频序列中的许多或所有图片引用相同的PPS是很常见的。重用参数集是比特率高效的,因为它避免了多次发送共享信息的必要性。它还具有防丢失功能,因为它允许参数集内容由更可靠的外部通信链路承载,或者在比特流中频繁重复,以确保不会丢失。这种在不同图片中重用图片参数集内容以及在不同CVS中重用SPSs和VPSs内容的能力,是“参数集”概念与AVC之前建立的旧标准中使用的“图片头”和“序列头”语法的主要区别。

为了识别给定切片在参数集类型层次结构的每个级别的活动参数集,每个切片头包含引用特定PPS的PPS标识符。PPS中有一个引用特定SPS的标识符。反过来,SPS中有一个引用特定VPS的标识符。图2.11说明了这个引用层次结构。

当要解码的当前编码切片引用该参数集时,或者当SEI消息指示其激活时,参数集被激活。解码器首次引用所有活动参数集时,它们必须可用。参数集可以在带内或带外发送,并且可以重复发送。参数集可以以任何顺序接收。参数集之间没有解析依赖关系,例如,可以解析PPS并存储其参数,而不需要引用它所引用的SPS中包含的信息。这些参数集功能通过克服参数集的一些网络损失,提供了改进的错误恢复能力。此外,与包含相同信息的图片头部出现在图片的切片子集中的情况相比,使用参数集允许对单个切片进行解码,即使相同图片中的另一个切片遭受网络损失。系统接口可以利用参数集的层次结构,这可以受益于提前获得序列级和比特流级信息。所有参数集都包含扩展标志,以支持向后兼容的未来扩展。

showeeks commented 2 years ago

VPS是在HEVC定义的一种新型参数集,适用于比特流的所有层。一个层可以包含多个时间子层,所有版本1的比特流都被限制在一个层中。为可伸缩性和多视图开发的未来分层扩展将支持多个层,具有向后兼容的版本1基础层。

AVC没有包括类似于VPS的参数集,这导致了AVC的可伸缩视频编码(SVC)和多视图视频编码(MVC)扩展的复杂性和开销。SVC中的可伸缩性信息SEI消息和MVC中的查看可伸缩性信息SEI消息包含了VPS中包含的一些相同类型的信息。

VPS中包含的一些信息在SPS中也是重复的。需要将VPS包含在符合HEVC版本1的比特流中,或者通过外部方式提供,但是版本1解码器可以安全地丢弃包含VPS的nal单元。在VPS和SPS中复制一些信息需要一些(非常小程度的)比特率低效率,但是使得VPS能够包含与所有层及其时间子层相关的信息,这对于系统接口可能是有益的,而不需要版本1解码器处理VPS来访问该信息。

与时间可伸缩性相关的信息包含在虚拟专用网和SPS中。指示比特流中时间子层的最大数量。还有一个时间嵌套标志,它指示时间子层上切换是否总是可以执行的,例如时间标识大于0的所有图片是否都具有TSA图片功能,如第节所述。2.2.2.3 .可以为每个时间层发送解码图像缓冲器大小和图像排序参数,这些参数指示对解码图像缓冲器大小的限制,以及对图像解码和输出顺序的允许变化的限制,如第节所述。2.4.1.

VPS包括最大层数的指示,对于版本1,最大层数被限制为一层。对于分层扩展,如可伸缩性和多视图扩展,多层之间的关系将在VPS扩展中定义。如第节所述,虚拟参考解码器还可以包含用于假设参考解码器的操作点的层设置和定时信息。2.6.2.3.2

showeeks commented 2 years ago

HEVC的每张图片都有一个图片顺序计数(POC)值,表示为PicOrderCntVal。它有三个主要用途

  1. 唯一标识图片
  2. 指示输出位置相对于其他图片在同一个CVS
  3. 执行运动矢量缩放在较低层次的VCL解码过程。

同一CVS中的所有图片必须具有唯一的POC值。来自不同简历的图片可能共享相同的概念验证值,但是图片仍然可以被唯一地识别,因为不可能将来自一个CVS的图片与另一个CVS的任何图片混合。在CVS中允许POC值的间隙——即,在输出顺序上连续的两个图像之间的POC值差可以相差不止一个(事实上,连续图像的POC值可能相差的量可以任意变化)。

图片的 POC 由切片头中的 slice_pic_order_cnt_lsb 码字来表示。允许的POC值的范围是从 $-2^{31}$ 到 $2^{31}-1$,因此为了节省片报头中的比特,仅发送POC值(POC LSB)的最低有效比特。用于POC LSB的位数可以在4到16之间,并在SPS中发出信号。由于只有POC LSB在切片头中发出信号,所以当前图像的最高POC(POC MSB)是从以前的图像中导出的,称为prevTid0Pic.。为了即使图片被移除,POC推导也以相同的方式工作,prevTid0Pic被设置为时间层0的最近的先前图片,其不是RASL图片、RADL图片或子层非参考图片。解码器通过将当前图片的概念验证值与前一图片的概念验证值进行比较来导出概念验证值。

HEVC的解码图像缓冲器(DPB)是包含解码图像的缓冲器。除了当前图像之外的解码图像可以存储在DPB中,或者是因为它们需要参考,或者是因为它们还没有被输出,这是实现无序输出所必需的。注意,当前解码的图像也存储在DPB中。图2.12显示了两个引用结构的例子,它们都需要至少三张图片的DPB尺寸。当P3被解码时,图2.12a中的P1和P2的图片都需要存储在DPB,因为它们都是在P3之后输出的。因此,DPB需要能够同时存储P1、P2和P3。在图2.12b中,每张图片使用两张参考图片,因此DPB需要足够大,以便在这里同时存储三张图片。图2.12b中的参考结构是所谓的低延迟B结构的一个例子,其中双向预测被广泛使用而没有任何无序输出。 image