264编码解码过程中,VBV (video buffer virifier)的作用

来源:互联网 发布:手机淘宝怎么取消授权 编辑:程序博客网 时间:2024/06/16 05:02
Video Buffer Verifier (VBV)是一个当输入码流遵从MPEG标准时,既不会上溢出,也不会下溢出的理论上的解码缓冲器模型 
VBV的操作与两个传送值相关:vbv_buffer_size_value、vbv_delay
 vbv_buffer_size_value的作用是是缓冲区的最大值;然而vbv_delay是从存储一幅图像的开始码到开始解码一幅图像之间的延迟。vbv_buffer_size在每个序列头传送,vbv_delay则在每幅图像头处传送。这一点要注意哦。 不过实际上解码器那边也不会用到,因为有DTS PTS这些关键的指标,足以让解码器实时准确的从buffer提取解码数据。
在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.



vbv_delay是16位的无符号整数,表示从将一幅图像的开始码送入缓存到移除并开始解码一幅图像之间的90kHz时钟周期数量。
VBV buffer 的作用是处理各帧编码后大小不一和输出CBR 的矛盾。
CBR规定encoder的输出码率为恒定,但是各帧编码后的大小不是固定的(I,B,P帧的存在),因此需要在encoder后面加入VBV buffer。
可以将VBV buffer想象成为一个水池,水池的入口连接着encoder的输出,水池的出口为恒定的码率输出。
为了使得输出恒定,encoder必须保证水池既不上溢也不下溢。下溢会导致无数据输出,上溢会导致数据丢失。
所以encoder在编码一帧时会参考当前vbv buffer的充盈情况,并由此计算出,当前帧应当编码多少比特,从而保证既不上溢也不下溢。[1] 
0 0