H264 Level
- H264编码标准中 “Level” 是对视频的描述,它规定了视频的码率、分辨率和帧率等参数的限制。在H264中,每个
Level
都对应着一组参数的限制,这些参数包括但不限于最大码率、分辨率、帧率等。Level
越高,视频的码率、分辨率和帧率就越高,同时压缩率也会相应降低。 - 需要注意的是,不同的
Profile
会有不同的Level
,而且不同设备和软件可能对H264 Level
的支持程度也不一样。一些设备可能只支持较低的Level
,无法处理高分辨率或高码率的视频。因此,在选择合适的H264 Level
时,需要根据设备性能和需求进行权衡。 - 每个
Level
都规定了一组对标准中语法成员(syntax element
)所采用的各种参数值的限制;在给定的Profile
下,Level
通常与解码器的处理能力和内存容量相对应,每一个档次设置不同的参数(取样速率、图像尺寸、编码比特率等),得到对应的编解码器性能的不同Level
; - 维基百科中解释:
Level 对应的属性值表
DPB
- DPB: 解码图像缓存区,即
Decoded Picture Buffer
,H.264/AVC编码器使用先前编码的图像来提供其他图像中样本值的预测。这允许编码器对给定图像的最佳编码方式做出有效的决定。在解码器,这样的图像被存储在一个虚拟解码图像缓冲区(DPB
)。DPB
的最大容量,以帧(或字段对)为单位,可计算如下:
- Level对应的MaxDpbMbs(最大解码图像缓存区)如下表:
Level | MaxDpbMbs |
---|---|
1 | 396 |
1b | 396 |
1.1 | 900 |
1.2 | 2376 |
1.3 | 2376 |
2 | 2376 |
2.1 | 4752 |
2.2 | 8100 |
3 | 8100 |
3.1 | 18000 |
3.2 | 20480 |
4 | 32768 |
4.1 | 32768 |
4.2 | 34816 |
5 | 110400 |
5.1 | 184320 |
5.2 | 184320 |
6 | 696320 |
6.1 | 696320 |
6.2 | 696320 |
x264编码器 Level 使用
- 默认值:
param->i_level_idc = -1
; - 外部赋值
i_level_idc
: 命令行或者直接调用参数赋值。
- 未指定
i_level_idc
的具体值:
- 需要在检查参数有效性函数
validate_parameters()
中查表找到合适的level值配给param->i_level_idc。
- 其中
x264_level_t
是一个数组,记录了每个 Level 对应的各个信息,在头文件x265.h
中申明。
- 定义的 tables 表
x264_levels[]
:level = 10~62
- 具体的查找验证Level函数
x264_validate_levels()
:根据当前编码参数遍历x264_levels[]
表中,找到最合适的 Level。
VideoToolBox中Level使用
- 在
FFmpeg
中可以看到VideoToolBox
中关于 H264 标准的Level
的解释;和Profile
绑定应用。在Profile=Baseline
下有4.0、4.2、5.0、5.1、5.2、AutoLevel
的Level
属性;在Profile=Main
下有4.2、5.1、5.2、AutoLevel
的Level
属性;在Profile=High
下有3.0、3.1、3.2、4.0、4.1、4.2、5.0、5.1、5.2、AutoLevel
的Level
属性。
- 官方文档中介绍的 Level类型。
MediaCodec 中关于 Level 的解释
MediaCodec
中关于level
在MediaCodecInfo.CodecProfileLevel
方法中定义的类型。
参考
- 维基百科
- x264编码参数详细介绍:profile、preset、tune、level、码控