当前位置: 代码迷 >> 综合 >> H264/AVC Hypothetical Reference Decoder(HRD)
  详细解决方案

H264/AVC Hypothetical Reference Decoder(HRD)

热度:87   发布时间:2023-12-21 07:14:19.0

除了确保解码器能够处理264码流中的语法元素和序列参数外,确保编码序列“符合”解码器缓冲和处理能力的限制也很重要。这是通过定义HRD来处理的,HRD是一种虚拟缓冲算法,可以用来测试编码码流的行为以及其对真实解码器的影响。

先看一下264的编解码过程:

视频帧被编码以产生码流,该码流在传输前被缓冲。当一个帧n被编码时,编码缓冲器被bn个编码比特填充。编码器缓冲器以传输通道的速率(每秒rc个比特)清空。从信道中到达的比特以每秒rc个比特的速度填充编码图像缓冲区(CPB)。解码器从CPB中解码帧,并将解码后的帧放置在解码图像缓冲区(DPB)中。然后输出显示和/或用于预测解码进一步的帧。

HRD是以上图中解码端的为原型建模得到的一个概念解码器。在这个概念模型中,264码流由假想的流调度器(Hypothetical Stream Scheduler, HSS)以恒定或可变的信道速率输出到CPB。会从CPB中移除访问单元和编码的图片并立即解码,即假定它们立即解码并放置在DPB中。

264标准规定了两种HRD一致性,一种用于基本的视频编码层(VCL)单元,另一种用于流中的所有视频编码元素。在大多数情况下,一个兼容的解码器必须满足这两种类型。下面的条件必须被满足:

  1. CPB绝对不能溢出,即内容不能超过CPB的最大尺寸。

  2. CPB绝对不能下溢,即内容绝对不能为零。

  3. DPB不能超过最大尺寸。

CPB和DPB的最大尺寸是由Level限制的,因此HRD提供了一种机制来检查和执行Level限制。HRD操作可以用下面这个例子来说明:

码流由一系列具有以下编码尺寸的访问单元组成:

下图显示了编码器输出缓冲区的行为。第0帧被编码并在第0时刻添加到缓冲区中,随后的每一帧以0.2秒的间隔添加。与此同时,通道以恒定的速率(5000比特/秒)清空缓冲区。大于(比特率/帧率)1000比特的帧导致缓冲区被填满;小于1000比特的帧会导致缓冲区被清空。

相应的解码器CPB行为如下图所示。初始CPB的删除延迟是必要的,以便在帧解码之前接收到足够的数据,在本例中为0.8秒。在第0帧被解码并立即从缓冲区中移除之前的初始延迟期间,CPB以恒定的信道速率填充。当前五帧解码后,CPB接近底流状态。

如果编码器缓冲区占用超过(CPB初始去除延迟?比特率)=4000位,CPB就会下溢。CPB表现出与编码器缓冲区相反的行为:大帧(>1000位)导致CPB水平下降(可能就会出现underflow),小帧(<1000位)导致CPB水平上升(可能就会出现overflow)。

H.264/AVC 附件 C 中规定的 HRD 非常灵活,可以处理可变比特率信道等情况,例如传输速率随时间变化,对应于不以恒定帧速率运行的解码器的不同 CPB 移除时间等。运行在特定级别的 H.264 编码器需要生成不会违反 HRD 一致性规则的比特流。

  相关解决方案