视频编码中有个hypothetical reference decoder(HRD), 从标准H26x系列的各个协议的附录中都可以看到有专门介绍该解码器的,在MPEG2/H262的附录中,把它叫视频缓冲校验video buffer verifier(VBV),其实这两个是一个东西。vbv buffer的作用是平滑编码器的输出码流,防止码流抖动过大,通常可以和码率控制模块结合使用。在面向传输的视频编码中,vbv buffer很有用处,因此当前主流的编解码器都有这个东西或者类似的东西,比如x264/x265中的vbv,webRTC中的jitter buffer。

vbv buffer原理
vbv buffer其实是一个leaky bucket 漏桶模型。编码端和解码端都有这样的一个buffer,编码端的buffer是用来模拟解码的过程的,从而有效得控制好码率。我们的控制目标是为了尽量让vbv buffer不上溢(overflow)并且不下溢(underflow),上溢的后果就是会出现码流丢失,下溢的结果就是出现视频播放卡顿。
vbv buffer有三个重要的参数(B, R, F):
B: buffer 的大小,用bits来衡量
R: 传输的峰值码率,用bits/s来衡量
F: buffer的初始充盈度,用bits来衡量。
刚开始时,buffer为空,随着码流进入buffer,一直到他的初始充盈度F,这时才能开始解码(也就是说解码器从这个时候开始才能从buffer里面取数据),那么这就产生了一个解码时延的问题,又叫init delay,或者叫vbv delay,总之都是一个东西,很多实时通信技术所谓的低时延优化其实就是优化这个地方。解码器每隔一定的时钟周期就来检查一下buffer,并从中取走一帧数据。这个时钟周期和FPS有关。下面详细说明MPEG 和 H263中的buffer是怎么操作的,其他后来的协议都是基

VBV(Video Buffer Verifier)和HRD(Hypothetical Reference Decoder)是视频编码中用于平滑码流、防止码率抖动的技术。它们基于漏桶模型,通过控制编码端和解码端的缓冲区状态,确保码流在传输过程中的稳定性。在CBR模式下,VBV保持恒定码率;而在VBR模式下,它允许码率波动但保证不下溢。H263的HRD允许解码器在缓冲区不满时跳帧解码,适合低时延场景。VBVBuffer的大小、峰值码率和初始充盈度是关键参数,通过调整这些参数可以平衡时延和码率稳定性。在实时通信中,VBV和HRD对于防止视频卡顿和丢帧至关重要。
最低0.47元/天 解锁文章

2352

被折叠的 条评论
为什么被折叠?



