视频编码中有个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是怎么操作的,其他后来的协议都是基于此原理改进。

一、MPEG 的 video buffer verifier

MPEG的vbv有两种模式,分别是CBR和VBR,MPEG1和MPEG4只支持CBR,MPEG2两个都支持。
在CBR模式下:

  • R = RMAX = 平均码率
  • B的大小是在码流头部的vbv_buffer_size指定(单位是16*1024 bits)
  • vbv_delay也是码流头部指定,也就是说初始充盈度也就确定了,因为vbv_delay = F / R
  • vbv buffer的充盈度满足下面的条件
    B0 = F
    Bi+1 = Bi - bi + R/M
    解释下,Bi代表取第i帧时,buffer的充盈度,bi代表第i帧的bits大小。M是个时钟频率。编码器必须保证Bi - bi总是大于0(不下溢),Bi总是小于B(不上溢)如图所示。

    在VBR模式下:
  • R = RMAX = 最大码率,也就是说总是用最大码率灌数据
  • F = B,也就是初始充盈度是整个buffer的大小
  • vbv buffer的充盈度满足下面的条件
    B0 = B
    Bi+1 = min(B,Bi - bi + R/M)
    vbr只保证缓冲器不下溢,不保证缓冲器不上溢,如图。

    其实还有个低时延模式,这个模式打开后初始充盈度很小,只比第一帧多一点点,这种情况是不保证缓冲器不下溢的,也就是说可能会出现缓冲区下溢,进而造成视频卡顿,这是低时延的牺牲。从这里可以看出,初始充盈度越大,时延越长。

二、H263的HRD
H263的HRD其实和MPEG的vbv buffer有点像,区别主要有以下两点:
1、解码器定期检查buffer,只要有一个完整的帧就取出来开始解码,跳帧是允许的,也就是说下溢是允许的,下溢的发生意味着解码器来检查的时候发现没有完整的一帧,必须等完整的一帧都到达bufer之后才能开始解码。
2.检查发生在取出来一帧之后。

另外,模型稍微有一点不一样。H263的buffer的大小是B + MAXBPP,检查的时候要求第i帧的尺寸满足:

也就是在取走每一帧后,都摇保证剩下的充盈度小于B。
H263的模型适用于低时延,并且允许偶尔有较大的码率波动,这就是他加一个MAXBPP的原因。MAXBPP是协商出来的一帧最大bits.

为什么需要vbv buffer

假如我们的编码时面向存储的,那么久无需这个buffer,编码出来的码率随便你怎么波动,我只存在本地就OK。现在问题是我们是面向传输的,要考虑到网络的带宽问题,以及网络的抖动,如果我们编码出来的码率变化非常大,那么很不利于传输,比如为了帧的质量,突然编出来一个很大的帧,需要传输很久,那么解码端那边就会需要等很久,体现在播放时长时间卡住。因此需要这个buffer来平滑码率,他通过码控模块来进行反馈,当码控模块检测buffer时发现buffer很满了,就通过调节QP的方式,是编码的码率降下来。另外关于时延的问题,必须要说明的是,引入vbv buffer模型并不是问了降低时延,相反他反而会引入解码时延,但是他可以有效防止时延抖动,让你看视频不卡(只要防止下溢就行),通过把初始充盈度调大一点就能做的很好。

假想参考解码器 vbv HRD相关推荐

  1. 假定参考解码器(HRD)及它如何用来检查比特流与解码器一致性

    有两类比特流是HRD 一致性检查的对象:第一类比特流称为类型I 比特流,为 NAL 单元流,只包含有VCL NAL 单元与在比特流里对于所有访问单元的填充NAL 单元数据.第二类比特流, 称为类型II ...

  2. 【HEVC学习与研究】11.HEVC参考解码器的设置及参数解析过程

    之前已经讨论过如何运行HM的encoder工程,已经可以成功将一个yuv测试序列编码为一个.bin格式的二进制码流.这里我们再看看它的逆过程,即将二进制码流进行解码. 在整个HM的solution中很 ...

  3. 视频编码中的一些缩写

    视频编码中一些缩写 HEVC/VVC 码率控制 AVS3 指令集相关 @***-保持更新-*** GOP(Group of Pictures)--图像组 CTU(Coding Tree Unit)-- ...

  4. H.264压缩算法详解

    H.264压缩算法详解 H.264是一种视频高压缩技术,全称是MPEG-4 AVC,用中文说是"活动图像专家组-4的高等视频编码",或称为MPEG-4 Part10.它是由国际电信 ...

  5. VVC spec中文翻译

    本文仅为作者阅读VVC spec的翻译笔记,若理解有误,欢迎留言. 参考文章:VVC spec / H266 spec 目录 第3章.定义 第4章.缩写 第7章.语法 和 语义 7.4.4.Profi ...

  6. X264算法参数二(VUI参数配置)

    一.VUI参数概览 参数名称 参数类型 参数含义 参数配置 i_width int 视频图像的宽   i_height int 视频图像的高   i_csp int 视频图像数据格式 参见X264_C ...

  7. 视频编码标准汇总及比较

    MPEG-1 类型:Audio&Video 制定者:MPEG(Moving Picture Expert Group) 所需频宽:2Mbps 特性:对动作不激烈的视频信号可获得较好的图像质量, ...

  8. VVC/VSEI 高层语法

    参考The High-Level Syntax of the Versatile Video Coding (VVC) Standard 0 基本情况 HLS:High-level syntax,高层 ...

  9. 视频编码标准H.264/AVC

    H.264/AVC 是ITU-T VCEG 和ISO/IEC MPEG 共同开发的视频处理标准,ITU-T作为标准建议H.264,ISO/IEC作为国际标准14496-10(MPEG-4 第10部分) ...

  10. 数字电视信号源编码的主要技术及标准

    [摘要]:本文介绍了有关数字电视信源编码的一些主要技术和标准,包括数字演播室标准ITU--601,压缩编码的基本原理和方法,图像压缩编码标准H261,JPEG和MPEG,以及作为数字电视信源编码标准输 ...

最新文章

  1. jQuery / jQuery mvc plugin
  2. 浮点数相加php,利用php怎么实现一个浮点数精确运算功能
  3. CSS3动画(典型模板)
  4. ROS2学习(九).ROS概念 - ROS 2参数(ROS 2 parameters)
  5. 有关进程的一些基本概念
  6. 十年只为一个摧残的梦(转载)
  7. 程序人家:你的老板逼你上微服务了吗??
  8. android读写缓存文件路径,Android app-cache-Path的 缓存图片、缓存文件的路径包名路径 和外路径比较...
  9. 帆软报表-打印sql日志设置
  10. es的query及filter 1
  11. 微信小程序全国城市搜索(可进行城市中文拼音首字母搜索)
  12. java毕业设计彩妆销售网站Mybatis+系统+数据库+调试部署
  13. 阿里云服务器ECS测评
  14. 七年级计算机上册知识树,七年级上知识树.doc
  15. 协调世界时转换为GPS周秒(转载)
  16. c++获取umg ue_[UE4][V4.10]C++中定义UMG widget变量时的头文件引用有关问题
  17. 4.OC仿写知乎客户端
  18. elasticjob已下线_elasticJob 源码解析之自诊断恢复
  19. 从Hadoop到Spark、Flink,大数据处理框架十年激荡发展史!
  20. android metal api,Metal入门002-Metal相关API

热门文章

  1. 无头像不社交:浅析“头像设置”功能
  2. google 搜索跳转至yahoo
  3. Excel中怎么自动调整行高列宽
  4. wifi android kernel,android wifi 驱动框架简介
  5. 4.1网络层功能概述
  6. 接口测试 requests的身份认证方式
  7. nginx配置CSP策略和Nonce随机数方案
  8. access如何设置定期报表汇总_创建分组报表或汇总报表
  9. python超声检测成像仿真_- 深度体验树莓派3:实操用Python驱动超声测距模块
  10. 计算机的符号名称大全集,特殊符号大全