音视频开发—H264 SPS 和 PPS 参数说明
音视频开发—H264 SPS 和 PPS 参数说明
在H.264视频编码标准中,SPS和PPS是关键的参数集,它们提供了解码所需的各种配置信息。它们分别存储在单独的NALU中,并用于初始化解码器的参数。
序列参数集 (SPS, Sequence Parameter Set)
SPS包含关于整个视频序列的全局参数,包括视频的分辨率、帧率、颜色空间等信息。SPS NALU的 nal_unit_type
为7。
SPS的主要内容:
profile_idc (8 bits) :
- 指定编码器使用的特性集( Profile ),如Baseline、Main、High等。
如下图所示
Profile描述了H.264编码器使用的特性集,定义了编码过程中允许使用的技术和工具。不同的Profile适用于不同的应用场景,主要包括以下几种:
- Baseline Profile :
* 适用于低延迟和低复杂度的应用,如视频会议、移动视频等。 * 特点:支持I帧和P帧,不支持B帧;支持逐行扫描,不支持隔行扫描;支持基本的熵编码(CAVLC),不支持高级的CABAC。
- Main Profile :
* 适用于广播电视和存储等应用。 * 特点:支持I帧、P帧和B帧;支持隔行扫描;支持高级的熵编码(CABAC),提供更高的压缩效率。
- High Profile :
* 适用于高清电视、蓝光光盘等高质量视频应用。 * 特点:在Main Profile的基础上增加了8x8整数变换、更多的预测模式和量化矩阵等高级功能,进一步提高压缩效率和视频质量。
此外,还有其他更专业的Profile,如Extended Profile、High 10 Profile、High 4:2:2 Profile、High 4:4:4 Predictive Profile等,用于特定的专业应用场景。
constraint_set_flags (6 bits) :
level_idc (8 bits) :
- 指定解码器的性能要求(Level),如1, 1.1, 1.2, …, 5.1等。
不同的level对应的分辨率,帧率如下图所示
seq_parameter_set_id :
log2_max_frame_num_minus4 :
- 定义
MaxFrameNum
的值,即最大帧编号。
- 定义
pic_order_cnt_type :
log2_max_pic_order_cnt_lsb_minus4 (当
pic_order_cnt_type
为0时有效):max_num_ref_frames :
gaps_in_frame_num_value_allowed_flag :
frame_mbs_only_flag :
direct_8x8_inference_flag :
frame_cropping_flag :
vui_parameters_present_flag :
VUI参数 (如果
vui_parameters_present_flag
为1):
* 包含色彩描述、时间尺度、比特率、视频格式等额外信息。
一些补充的参数如下图所示:
图像参数集 (PPS, Picture Parameter Set)
PPS包含关于每个图像或图像组的具体参数,指导解码器如何处理图像数据。PPS NALU的 nal_unit_type
为8。
PPS的主要内容:
pic_parameter_set_id :
seq_parameter_set_id :
entropy_coding_mode_flag :
* 指示是否使用CABAC(上下文自适应二进制算术编码)熵编码模式。
bottom_field_pic_order_in_frame_present_flag :
num_slice_groups_minus1 :
slice_group_map_type (如果
num_slice_groups_minus1
> 0):num_ref_idx_l0_default_active_minus1 和 num_ref_idx_l1_default_active_minus1 :
weighted_pred_flag :
weighted_bipred_idc :
pic_init_qp_minus26 :
deblocking_filter_control_present_flag :
constrained_intra_pred_flag :
redundant_pic_cnt_present_flag :
Slice Header 结构
Slice Header的结构因Slice类型(I-Slice, P-Slice, B-Slice)和某些参数的不同而略有变化。以下是Slice Header中主要字段的详解:
first_mb_in_slice
slice_type
* 指示Slice的类型(I-Slice, P-Slice, B-Slice等)。
* 常见值包括:
* 0:P-Slice
* 1:B-Slice
* 2:I-Slice
* 3:SP-Slice
* 4:SI-Slice
pic_parameter_set_id
frame_num
field_pic_flag(可选)
* 指示是否为场图像(field picture)。
* 当场图像存在时,还需要`bottom_field_flag`。
bottom_field_flag(可选)
idr_pic_id(当Slice为IDR片时)
pic_order_cnt_lsb
* 表示该Slice所属帧的图像顺序计数(LSB部分)。
delta_pic_order_cnt_bottom(当pic_order_cnt_type为0时)
delta_pic_order_cnt[0] 和 delta_pic_order_cnt[1](当pic_order_cnt_type为1时)
redundant_pic_cnt
direct_spatial_mv_pred_flag(当Slice类型为B-Slice时)
num_ref_idx_active_override_flag
num_ref_idx_l0_active_minus1 和 num_ref_idx_l1_active_minus1
ref_pic_list_modification_flag_l0 和 ref_pic_list_modification_flag_l1
dec_ref_pic_marking
cabac_init_idc
slice_qp_delta
sp_for_switch_flag(当Slice类型为SP-Slice时)
slice_qs_delta(当Slice类型为SP-Slice或SI-Slice时)
disable_deblocking_filter_idc
slice_alpha_c0_offset_div2 和 slice_beta_offset_div2
slice_group_change_cycle
本文原文来自CSDN
