https://codesequoia.wordpress.com/2010/04/19/what-are-cbr-vbv-and-cpb
通常CBR会被 错误的认为是为每一帧分配相同数量的比特。如果真是这样,那P或者B真的意义在哪呢,P/B帧的主要目的就是通过参考其他帧减少编码比特数。当然,有很多P或者B帧的CBR流,我们可以很容易的发现在CBR流中比特数是不一样的。
所以,CBR是什么呢。在MPEG-2和H.264中,CBR意味着在一段时间内传输给解码端的比特数是一定的。换句话说,到解码端的数据传输率是一定的。这和单独帧的比特数是无关的。
那在保持数据率一定的同时怎么才能实现为每一帧分配不同数量的比特呢?
答案:我们需要一个buffer。为了理解这个逻辑,考虑一个出水口(water outlet),水箱(tank),还有水箱前面一系列的“guys”。
水(编码的MPEG-2或者H.264流) 固定的流进水箱。这些"guys"站在水箱前,负责把每一帧的水移动道解码端。这个移动只发生在固定时间间隔内。
即使Mr. I,P,B移除了不同数量的水(每一帧需要不同的编码比特数),由于水箱 (buffer)的存在出水口的速度还是固定的。
在MPEG-2中,这个buffer成为VBV buffer(video buffer verifier buffer),在H.264中,这个buffer成为CPB(coded picture buffer)。
水箱中水的多少在某一时刻称为buffer fullness,用比特数量来描述。水箱的大小在MPEG-2中称为VBV buffer size,在H.264中称为 CPB buffer size。
编码的流一定会被重建所以水箱不会上溢或者下溢。有一些叫做“buffer verifier"的软件去检查错误。
当buffer size 被设置成大值时,编码器可以为每一帧使用变化较大的比特数,可得到更好的视频质量。但是,解码端相应的需要大buffer,这意味着更贵的硬件开销。