VBV,即Video Buffering Verifier,意思为视频缓存检验器,Video Buffer Verifier (VBV)是一个当
输入码流遵从MPEG标准时,既不会上溢出,也不会下溢出的理论上的解码缓冲器模型。这样,既不会引起上溢出,也不会引起
下溢出就是一个兼容(MPEG)的比特流定义的一部分。由MPEG传输根据这个模型所限定的解码缓冲行为的工程定义将在下面全面解释。不过,解码器并不一定必须要用到这些工程定义,可以依靠时钟标签(PTS,DTS)提供的冗余信息进行解码。更加详细的解释在缓冲同步和启动里面。
VBV的操作与两个传送值相关:vbv_buffer_size_value和vbv_delay。vbv_buffer_size_value是缓冲区的最大值,vbv_delay是从
存储一幅图像的开始码到开始解码一幅图像之间的延迟。vbv_buffer_size在每个序列头传送,vbv_delay则在每幅图像头处传送。注意序列头和vbv_buffer_size在节目正在处理时可能不可用。然而,解码器合适的操作可以从系统时钟和各种时钟标签中得到,有时可能还需要先验最大缓冲区大小。所以vbv_delay和vbv_buffer_size是冗余的。
在ATSC 标准A/53 附件A(ATSC standard A/53 Annex A)中,对缓冲区大小的限制是:
maximum video buffer = B = 7995392 bits,
which is specified by transmitting:
vbv_buffer_size_value<= 488 (lower 10 bits of vbv_buffer_size)
vbv_buffer_size_extension = 0 (upper 8 bits of vbv_buffer_size)
where B = 16*1024*vbv_buffer_size.
ATSC对vbv_delay的限制是
vbv_delay <= 45000
vbv_delay是16位的
无符号整数,表示从将一幅图像的开始码送入缓存到移除并开始解码一幅图像之间的90kHz时钟周期数量。
VBV buffer 的作用是处理各帧编码后大小不一和输出CBR 的矛盾。
CBR规定encoder的输出码率为恒定,但是各帧编码后的大小不是固定的(I,B,P帧的存在),因此需要在encoder后面加入VBV buffer。
可以将VBV buffer想象成为一个水池,水池的入口连接着encoder的输出,水池的出口为恒定的码率输出。
为了使得输出恒定,encoder必须保证水池既不上溢也不下溢。下溢会导致无数据输出,上溢会导致数据丢失。
所以encoder在编码一帧时会参考当前vbv buffer的充盈情况,并由此计算出,当前帧应当编码多少比特,从而保证既不上溢也不下溢。
参考资料
VBV 作用.starlovemoon.2013-03-06