问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

音视频开发—H264 SPS 和 PPS 参数说明

创作时间:
作者:
@小白创作中心

音视频开发—H264 SPS 和 PPS 参数说明

引用
CSDN
1.
https://m.blog.csdn.net/weixin_46999174/article/details/139379481

在H.264视频编码标准中,SPS和PPS是关键的参数集,它们提供了解码所需的各种配置信息。它们分别存储在单独的NALU中,并用于初始化解码器的参数。

序列参数集 (SPS, Sequence Parameter Set)

SPS包含关于整个视频序列的全局参数,包括视频的分辨率、帧率、颜色空间等信息。SPS NALU的 nal_unit_type 为7。

SPS的主要内容:

  1. profile_idc (8 bits)

    • 指定编码器使用的特性集( Profile ),如Baseline、Main、High等。

    如下图所示

    Profile描述了H.264编码器使用的特性集,定义了编码过程中允许使用的技术和工具。不同的Profile适用于不同的应用场景,主要包括以下几种:

    1. Baseline Profile
    *   适用于低延迟和低复杂度的应用,如视频会议、移动视频等。
    *   特点:支持I帧和P帧,不支持B帧;支持逐行扫描,不支持隔行扫描;支持基本的熵编码(CAVLC),不支持高级的CABAC。
    
    1. Main Profile
    *   适用于广播电视和存储等应用。
    *   特点:支持I帧、P帧和B帧;支持隔行扫描;支持高级的熵编码(CABAC),提供更高的压缩效率。
    
    1. High Profile
    *   适用于高清电视、蓝光光盘等高质量视频应用。
    *   特点:在Main Profile的基础上增加了8x8整数变换、更多的预测模式和量化矩阵等高级功能,进一步提高压缩效率和视频质量。
    

    此外,还有其他更专业的Profile,如Extended Profile、High 10 Profile、High 4:2:2 Profile、High 4:4:4 Predictive Profile等,用于特定的专业应用场景。

  2. constraint_set_flags (6 bits)

  3. level_idc (8 bits)

    • 指定解码器的性能要求(Level),如1, 1.1, 1.2, …, 5.1等。

    不同的level对应的分辨率,帧率如下图所示

  4. seq_parameter_set_id

  5. log2_max_frame_num_minus4

    • 定义 MaxFrameNum 的值,即最大帧编号。
  6. pic_order_cnt_type

  7. log2_max_pic_order_cnt_lsb_minus4 (当 pic_order_cnt_type 为0时有效):

  8. max_num_ref_frames

  9. gaps_in_frame_num_value_allowed_flag

  10. frame_mbs_only_flag

  11. direct_8x8_inference_flag

  12. frame_cropping_flag

  13. vui_parameters_present_flag

  14. VUI参数 (如果 vui_parameters_present_flag 为1):

*   包含色彩描述、时间尺度、比特率、视频格式等额外信息。

一些补充的参数如下图所示:

图像参数集 (PPS, Picture Parameter Set)

PPS包含关于每个图像或图像组的具体参数,指导解码器如何处理图像数据。PPS NALU的 nal_unit_type 为8。

PPS的主要内容:

  1. pic_parameter_set_id

  2. seq_parameter_set_id

  3. entropy_coding_mode_flag

*   指示是否使用CABAC(上下文自适应二进制算术编码)熵编码模式。
  1. bottom_field_pic_order_in_frame_present_flag

  2. num_slice_groups_minus1

  3. slice_group_map_type (如果 num_slice_groups_minus1 > 0):

  4. num_ref_idx_l0_default_active_minus1 和 num_ref_idx_l1_default_active_minus1

  5. weighted_pred_flag

  6. weighted_bipred_idc

  7. pic_init_qp_minus26

  8. deblocking_filter_control_present_flag

  9. constrained_intra_pred_flag

  10. redundant_pic_cnt_present_flag

Slice Header 结构

Slice Header的结构因Slice类型(I-Slice, P-Slice, B-Slice)和某些参数的不同而略有变化。以下是Slice Header中主要字段的详解:

  1. first_mb_in_slice

  2. slice_type

*   指示Slice的类型(I-Slice, P-Slice, B-Slice等)。
*   常见值包括: 

    *   0:P-Slice
    *   1:B-Slice
    *   2:I-Slice
    *   3:SP-Slice
    *   4:SI-Slice
  1. pic_parameter_set_id

  2. frame_num

  3. field_pic_flag(可选)

*   指示是否为场图像(field picture)。
*   当场图像存在时,还需要`bottom_field_flag`。
  1. bottom_field_flag(可选)

  2. idr_pic_id(当Slice为IDR片时)

  3. pic_order_cnt_lsb

*   表示该Slice所属帧的图像顺序计数(LSB部分)。
  1. delta_pic_order_cnt_bottom(当pic_order_cnt_type为0时)

  2. delta_pic_order_cnt[0] 和 delta_pic_order_cnt[1](当pic_order_cnt_type为1时)

  3. redundant_pic_cnt

  4. direct_spatial_mv_pred_flag(当Slice类型为B-Slice时)

  5. num_ref_idx_active_override_flag

  6. num_ref_idx_l0_active_minus1 和 num_ref_idx_l1_active_minus1

  7. ref_pic_list_modification_flag_l0 和 ref_pic_list_modification_flag_l1

  8. dec_ref_pic_marking

  9. cabac_init_idc

  10. slice_qp_delta

  11. sp_for_switch_flag(当Slice类型为SP-Slice时)

  12. slice_qs_delta(当Slice类型为SP-Slice或SI-Slice时)

  13. disable_deblocking_filter_idc

  14. slice_alpha_c0_offset_div2 和 slice_beta_offset_div2

  15. slice_group_change_cycle

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号