VVC解码流程(6)—Slice Header

[u(1)] sh_picture_header_in_slice_header_flag:等于1表示PH语法结构存在于slice header 中。

[ue(v)] sh_slice_type

[u(1)] sh_num_ref_idx_active_override_flag
[ue(v)] sh_num_ref_idx_active_minus1[ i ]
[u(1)] sh_cabac_init_flag
[u(1)] sh_dep_quant_used_flag
[u(1)] sh_sign_data_hiding_used_flag

VVC解码流程(5)—Picture Header

Picture Header可以以单独的Non-VCL NALU (PH_NUT) 进行传输,也可以放在Slice Header中进行传输。

[u(1)] ph_gdr_or_irap_pic_flag:等于1表示当前图片是GDR或IRAP图片。
[u(1)] ph_non_ref_pic_flag:等于1表示非参考图片。
[u(1)] ph_gdr_pic_flag:等于1表示GDR图片。
[u(1)] ph_inter_slice_allowed_flag:等于0表示图片的所有Slice的sh_slice_type等于2。等于1指定图片中可能有也可能没有sh_slice_type等于0或1的一个或多个Slice。
[u(1)] ph_intra_slice_allowed_flag:等于0指定图片的所有Slice的sh_slice_type等于0或1。ph_intra_slice_allowed_flag等于1表示图片中可能有也可能没有sh_slice_type等于2的一个或多个编码切片。当不存在时,ph_intra_sice_allowed_flags的值被推断为等于1。

[ue(v)] ph_pic_parameter_set_id:pps_id, 取值范围0-63。
[u(v)] ph_pic_order_cnt_lsb:指定当前图片的图片顺序计数模MaxPicOrderCntLsb。ph_pic_order_cnt_lsb语法元素的长度为sps_log2_max_pic_oorder_cnt_lsb_minus4+4位。ph_pic_order_cnt_lsb的值应在0到MaxPicOrderCntLsb−1的范围内,包括0和1。

[u(1)] ph_alf_enabled_flag:enable ALF.
[u(3)] ph_num_alf_aps_ids_luma:指定当前图片中的slice引用的的ALF APS的数量。
[u(3)] ph_alf_aps_id_luma[ i ]:指示luma引用的是哪几个APS。
[u(1)] ph_alf_cb_enabled_flag:enable cb ALF。
[u(1)] ph_alf_cr_enabled_flag:enable cr ALF。
[u(3)] ph_alf_aps_id_chroma:指示chroma引用的是哪个APS。
[u(1)] ph_alf_cc_cb_enabled_flag:enable cb CCALF。
[u(3)] ph_alf_cc_cb_aps_id:指示cb引用的是哪个APS。
[u(1)] ph_alf_cc_cr_enabled_flag:enable cr CCALF。
[u(3)] ph_alf_cc_cr_aps_id:指示cr引用的是哪个APS。

[u(1)] ph_lmcs_enabled_flag:enable LMCS。
[u(2)] ph_lmcs_aps_id:指示引用的是哪个APS。
[u(1)] ph_chroma_residual_scale_flag:等于1表示启用色度残差缩放。

[u(1)] ph_explicit_scaling_list_enabled_flag:
[u(3)] ph_scaling_list_aps_id:指示引用的是哪个APS。

[u(1)] ph_pic_output_flag:

[u(1)] ph_partition_constraints_override_flag:

[ue(v)] ph_cu_qp_delta_subdiv_intra_slice:指定了传递cu_qp_delta_abs和cu_qp_delta_sign_flag的 intra slice 中编码单元的最大cbSubdiv值。
[ue(v)] ph_cu_chroma_qp_offset_subdiv_intra_slice:指定传递cu_chroma_qp_offset_flag的 intra slice 中编码单元的最大cbSubdiv值。
[ue(v)] ph_cu_qp_delta_subdiv_inter_slice:指定了传递cu_qp_delta_abs和cu_qp_delta_sign_flag的 inter slice 中编码单元的最大cbSubdiv值。
[ue(v)] ph_cu_chroma_qp_offset_subdiv_inter_slice:指定传递cu_chroma_qp_offset_flag的 inter slice 中编码单元的最大cbSubdiv值。

[u(1)] ph_temporal_mvp_enabled_flag:
[u(1)] ph_collocated_from_l0_flag:
[ue(v)] ph_collocated_ref_idx:
[u(1)] ph_mmvd_fullpel_only_flag
[u(1)] ph_mvd_l1_zero_flag:
[u(1)] ph_bdof_disabled_flag:
[u(1)] ph_dmvr_disabled_flag:
[u(1)] ph_prof_disabled_flag:

[se(v)] ph_qp_delta:指定了用于图片中编码块的QpY的初始值,直到被编码单元层中的CuQpDeltaVal的值修改为止。

[u(1)] ph_joint_cbcr_sign_flag:
[u(1)] ph_sao_luma_enabled_flag:
[u(1)] ph_sao_chroma_enabled_flag:

VVC解码流程(4)—PPS

[u(6)] pps_pic_parameter_set_id:pps_id, 取值范围0-63。
[u(4)] pps_seq_parameter_set_id:pps_id, 取值范围0-15。
[u(1)] pps_mixed_nalu_types_in_pic_flag:等于1指定引用pps的每个图片具有多个VCL NAL单元,并且VCL NALs单元不具有相同的NAL_unit_type值。
[ue(v)] pps_pic_width_in_luma_samples:8的整数倍,且小于sps_pic_width_max_in_luma_samples。
[ue(v)] pps_pic_height_in_luma_samples:8的整数倍,且小于sps_pic_width_max_in_luma_samples。
[u(1)] pps_conformance_window_flag:裁剪窗口。
[u(1)] pps_scaling_window_explicit_signalling_flag:scaling窗口。
[u(1)] pps_output_flag_present_flag:等于1指定ph_pic_output_flag语法元素可以存在于引用pps的ph语法结构中。
[u(1)] pps_no_pic_partition_flag:等于1表示不对参考PPS的每个图片应用划分,指的是tile或者slice划分。
[u(1)] pps_subpic_id_mapping_present_flag:subpic相关。
[u(1)] pps_cabac_init_present_flag:等于1表示sh_cabac_init_flag存在于引用pps的sh中。
[ue(v)] pps_num_ref_idx_default_active_minus1[ i ] :范围为0-14,指定P/B参考帧个数。
[u(1)] pps_rpl1_idx_present_flag:等于0指定rpl_sps_flag[1]和rpl_idx[1]不存在于引用pps的ph或sh中。
[u(1)] pps_weighted_pred_flag:等于0表示加权预测不应用于引用PPS的P个切片。
[u(1)] pps_weighted_bipred_flag:等于0表示不将显式加权预测应用于引用PPS的B切片。
[u(1)] pps_ref_wraparound_enabled_flag:等于1的指定对引用pps的图片启用水平环绕运动补偿。
[se(v)] pps_init_qp_minus26:加26指定了参考PPS的每个slice的SliceQpY的初始值。当解码ph_qp_delta的非零值时,SliceQpY的初始值在picture级别进行修改,或者当解码sh_qp_derta的非零时,在slice级别进行修改。pps_init_qp_minus26的值应在−(26+QpBdOffset)到+37的范围内。
[u(1)] pps_cu_qp_delta_enabled_flag:等于1表示ph_cu_qp_delta_subdiv_intra_slice和ph_cu_6qp_delta_sindter_slice语法元素中的一个或两个存在于引用PPS的ph语法结构中。
[u(1)] pps_chroma_tool_offsets_present_flag:等于1表示色度工具偏移相关的语法元素存在于PPS RBSP语法结构中,包括chroma qp offset,JCBCR qp offset。
[u(1)] pps_deblocking_filter_control_present_flag:等于1表示PPS中存在deblocking滤波器控制语法元素。
[u(1)] pps_picture_header_extension_present_flag:等于0表示在引用PPS的PH语法结构中不存在PH扩展语法元素。
[u(1)] pps_slice_header_extension_present_flag:等于0表示在引用PPS的SH语法结构中不存在SH扩展语法元素。
[u(1)] pps_extension_flag:等于0表示pps RBSP语法结构中不存在pps_extension_data_flag语法元素。



VVC解码流程(3)—SPS

SPS中包含了很多参数和控制信息。

[u(4)] sps_seq_parameter_set_id:sps_id, 取值范围0-15。
[u(4)] sps_video_parameter_set_id:vps_id, 取值范围0-15。
[u(3)] sps_max_sublayers_minus1: 加1指最大时域子层, 取值范围0-6。
[u(2)] sps_chroma_format_idc:chroma采样方式,取值范围0-3。

[u(2)] sps_log2_ctu_size_minus5:加5表示lumaCTU尺寸,取值范围为0-2,3保留,即支持32×32,64×64,128×128大小的CTU。
[u(1)] sps_ptl_dpb_hrd_params_present_flag:等于1表示在SPS中确定profile_tier_level( )、dpb_parameters( )、general_timing_hrd_parameters( )和ols_timing_hrd_parameters( )语法。

如果sps_ptl_dpb_hrd_params_present_flag等于1,执行profile_tier_level( 1, sps_max_sublayers_minus1 ):
[u(7)] general_profile_idc:指定profile。
[u(1)] general_tier_flag:指定tier。
[u(8)] general_level_idc:指定level
[u(1)] ptl_frame_only_constraint_flag:等于 1 表示 CLVS 传送表示场的图片,等于 0 表示 CLVS 传送表示帧的图片。
[u(1)] ptl_multilayer_enabled_flag:等于 1 指定 CVS 可能包含多个层,等于 0 指定 所有 slice 都应具有相同的 nuh_layer_id 值。
[u(1)] gci_present_flag:等于 1 表示展现 General constraints information。会对SPS的某些值的范围加以限制。
[f(1)] gci_alignment_zero_bit:补充0以字节对齐。
[u(1)] ptl_sublayer_level_present_flag[ i ]:对于第i子层,值等于 1 指定在 profile_tier_level( ) 语法结构中存在级别信息。值等于 0 指定在 profile_tier_level( ) 语法结构中不存在级别信息。
[u(1)] ptl_reserved_zero_bit:补充0以字节对齐。
[u(8)] sublayer_level_idc[ i ]:如果 ptl_sublayer_level_present_flag[ i ] 为1,则 sublayer_level_idc[ i ] 为时域子层指定 level。
[u(8)] ptl_num_sub_profiles:指定 general_sub_profile_idc[ i ] 语法元素的数量。
[u(32)] general_sub_profile_idc[ i ]:内容未在标准中指定,一般不用。

[u(1)] sps_gdr_enabled_flag:等于1指定在CLVS中可以打开GDR帧。
[u(1)] sps_ref_pic_resampling_enabled_flag:支持参考帧重采样(RPR)。
[u(1)] sps_res_change_in_clvs_allowed_flag:允许CLVS中的空域分辨率发生改变。
[ue(v)] sps_pic_width_max_in_luma_samples:luma样本的最大宽度,不能等于0,是8的整数倍。
[ue(v)] sps_pic_height_max_in_luma_samples:luma样本的最大宽度,不能等于0,是8的整数倍。
[u(1)] sps_conformance_window_flag:是否要裁剪窗口,一般不用。
[u(1)] sps_subpic_info_present_flag:显示subpic的信息,一般不用。
[ue(v)] sps_bitdepth_minus8:luma和chroma的位深度,取值范围0-2。
[u(1)] sps_entropy_coding_sync_enabled_flag:指定WPP是否打开。
[u(1)] sps_entry_point_offsets_present_flag:指定在slice header中是否展示entry_point_offsets。
[u(4)] sps_log2_max_pic_order_cnt_lsb_minus4:指定最大poc值的LSB,MaxPicOrderCntLsb = 2( sps_log2_max_pic_order_cnt_lsb_minus4 + 4 ),取值范围为0-12。
[u(1)] sps_poc_msb_cycle_flag:指定在ph中可以使用ph_poc_msb_cycle_present_flag。
[ue(v)] sps_poc_msb_cycle_len_minus1:取值范围为0 到 32 − sps_log2_max_pic_order_cnt_lsb_minus4 − 5。
[u(1)] sps_num_extra_ph_bytes:等于0。
[u(1)] sps_num_extra_sh_bytes:等于0。

[ue(v)] dpb_max_dec_pic_buffering_minus1[ i ]:指定最大DPB size。
[ue(v)] dpb_max_num_reorder_pics[ i ]:按解码顺序位于之前并且输出顺序位于之后的允许图片的最大数量。
[ue(v)] dpb_max_latency_increase_plus1[ i ]:不等于0时表示按输出顺序位于之前并且解码顺序位于之后的允许图片的最大数量。等于0时,MaxLatencyPictures[ i ] = dpb_max_num_reorder_pics[ i ] + dpb_max_latency_increase_plus1[ i ] − 1

[ue(v)] sps_log2_min_luma_coding_block_size_minus2:取值范围为 Min( 4, sps_log2_ctu_size_minus5 + 3 )
[u(1)] sps_partition_constraints_override_enabled_flag:等于 1 指定在引用 SPS 的 PH 语法结构中存在 ph_partition_constraints_override_flag。
[ue(v)] sps_log2_diff_min_qt_min_cb_intra_slice_luma:指定I slice最小QT叶节点 size 与最小coding_block_size之间的差值。
[ue(v)] sps_max_mtt_hierarchy_depth_intra_slice_luma:指定I slice MTT的最大深度。
[ue(v)] sps_log2_diff_max_bt_min_qt_intra_slice_luma:指定I slice 最大可以进行二叉树划分的块与最小QT叶节点之间的块尺寸差值。
[ue(v)] sps_log2_diff_max_tt_min_qt_intra_slice_luma:指定I slice 最大可以进行三叉树划分的块与最小QT叶节点之间的块尺寸差值。
[u(1)] sps_qtbtt_dual_tree_intra_flag:dual_tree。
[ue(v)] sps_log2_diff_min_qt_min_cb_intra_slice_chroma:指定I slice chroma最小QT叶节点 size 与最小coding_block_size之间的差值。
[ue(v)] sps_max_mtt_hierarchy_depth_intra_slice_chroma:指定I slice chroma MTT的最大深度。
[ue(v)] sps_log2_diff_max_bt_min_qt_intra_slice_chroma:指定I slice chroma 最大可以进行二叉树划分的块与最小QT叶节点之间的块尺寸差值。
[ue(v)] sps_log2_diff_max_tt_min_qt_intra_slice_chroma:指定I slice chroma 最大可以进行三叉树划分的块与最小QT叶节点之间的块尺寸差值。
[ue(v)] sps_log2_diff_min_qt_min_cb_inter_slice:指定P/B slice最小QT叶节点 size 与最小coding_block_size之间的差值。
[ue(v)] sps_max_mtt_hierarchy_depth_inter_slice:指定P/B slice MTT的最大深度。
[ue(v)] sps_log2_diff_max_bt_min_qt_inter_slice:指定P/B slice 最大可以进行二叉树划分的块与最小QT叶节点之间的块尺寸差值。
[ue(v)] sps_log2_diff_max_tt_min_qt_inter_slice:指定P/B slice 最大可以进行三叉树划分的块与最小QT叶节点之间的块尺寸差值。

[u(1)] sps_max_luma_transform_size_64_flag:等于1表示Max TU size=64,等于0表示Max TU size=32。
[u(1)] sps_transform_skip_enabled_flag:transform_skip。
[ue(v)] sps_log2_transform_skip_max_size_minus2:指定最大ts size。
[u(1)] sps_bdpcm_enabled_flag:bdpcm。
[u(1)] sps_mts_enabled_flag:mts。
[u(1)] sps_explicit_mts_intra_enabled_flag:mts_intra。
[u(1)] sps_explicit_mts_inter_enabled_flag:mts_inter。
[u(1)] sps_lfnst_enabled_flag:lfnst。

[u(1)] sps_joint_cbcr_enabled_flag:joint_cbcr。
[u(1)] sps_same_qp_table_for_chroma_flag:等于 1 指定仅发送一个色度 QP 映射表,并且当 sps_joint_cbcr_enabled_flag 等于 1 时,此表适用于 Cb 和 Cr 残差,此外还适用于joint Cb-Cr 残差。sps_same_qp_table_for_chroma_flag 等于 0 指定在 SPS 中发送色度 QP 映射表,其中两个用于 Cb 和 Cr,当 sps_joint_cbcr_enabled_flag 等于 1 时,还有一个用于joint Cb-Cr。当不存在时,sps_same_qp_table_for_chroma_flag 的值推断为等于 1。
[se(v)] sps_qp_table_start_minus26[ i ]:加 26 指定用于描述第 i 个色度 QP 映射表的起始亮度和色度 QP。sps_qp_table_start_minus26[ i ] 的值应在 −26 − QpBdOffset 至 36 的范围内。如果不存在,则 sps_qp_table_start_minus26[ i ] 的值推断为等于 0。
[ue(v)] sps_num_points_in_qp_table_minus1[ i ]:加 1 指定用于描述第 i 个色度 QP 映射表的点数。
[ue(v)] sps_delta_qp_in_val_minus1[ i ][ j ]:指定用于导出第 i 个色度 QP 映射表的第 j 个枢轴点的输入坐标的增量值。
[ue(v)] sps_delta_qp_diff_val[ i ][ j ]:指定用于导出第 i 个色度 QP 映射表的第 j 个枢轴点的输出坐标的增量值。


[u(1)] sps_sao_enabled_flag:sao。
[u(1)] sps_alf_enabled_flag:alf。
[u(1)] sps_ccalf_enabled_flag:ccalf。
[u(1)] sps_lmcs_enabled_flag:lmcs。
[u(1)] sps_weighted_pred_flag:weighted_pred。
[u(1)] sps_weighted_bipred_flag:weighted_bipred。
[u(1)] sps_long_term_ref_pics_flag:long_term_ref_pics。

[u(1)] sps_idr_rpl_present_flag:等于 1 指定 RPL 语法元素可以存在于 nal_unit_type 等于 IDR_N_LP 或 IDR_W_RADL 的slice的sh中。
[u(1)] sps_rpl1_same_as_rpl0_flag:rpl1与rpl0一样。
[ue(v)] sps_num_ref_pic_lists[ i ]:指定有多少个rpl。
[ue(v)] num_ref_entries[ listIdx ][ rplsIdx ]:指定rpl中有多少帧。
[u(1)] ltrp_in_header_flag[ listIdx ][ rplsIdx ]:等于 0 指定 ref_pic_list_struct( listIdx, rplsIdx ) 语法结构中指示的 LTRP 条目的 POC LSB 存在于同一语法结构中。 ltrp_in_header_flag[ listIdx ][ rplsIdx ] 等于 1 指定
ref_pic_list_struct( listIdx, rplsIdx ) 语法结构中指示的 LTRP 条目的 POC LSB 不存在于同一语法结构中。 当 sps_long_term_ref_pics_flag 等于 1 且 rplsIdx 等于 sps_num_ref_pic_lists[ listIdx ] 时,
ltrp_in_header_flag[ listIdx ][ rplsIdx ] 的值推断为等于 1。
[u(1)] st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]:short-term reference。
[ue(v)] abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]:abs_delta_poc。
[u(1)] strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ]:sign。
[u(1)] rpls_poc_lsb_lt[ listIdx ][ rplsIdx ][ j++ ]:指定long-term 参考帧的poc_lsb。

[u(1)] sps_ref_wraparound_enabled_flag:ref_wraparound。
[u(1)] sps_temporal_mvp_enabled_flag:temporal_mvp。
[u(1)] sps_sbtmvp_enabled_flag:sbtmvp。
[u(1)] sps_amvr_enabled_flag:amvr。
[u(1)] sps_bdof_enabled_flag:bdof。
[u(1)] sps_bdof_control_present_in_ph_flag:bdof_control_present_in_ph。
[u(1)] sps_smvd_enabled_flag:smvd。
[u(1)] sps_dmvr_enabled_flag:dmvr。
[u(1)] sps_dmvr_control_present_in_ph_flag:dmvr_control_present_in_ph。
[u(1)] sps_mmvd_enabled_flag:mmvd。
[u(1)] sps_mmvd_fullpel_only_enabled_flag:mmvd_fullpel_only。
[u(1)] sps_bdof_enabled_flag:bdof。
[u(1)] sps_bdof_control_present_in_ph_flag:bdof_control_present_in_ph。
[u(1)] sps_smvd_enabled_flag:smvd。

[ue(v)] sps_six_minus_max_num_merge_cand:MaxNumMergeCand = 6 − sps_six_minus_max_num_merge_cand。取值范围0-5。

[u(1)] sps_sbt_enabled_flag:sbt。
[u(1)] sps_affine_enabled_flag:affine。
[ue(v)] sps_five_minus_max_num_subblock_merge_cand:MaxNumSubblockMergeCand = 5 − sps_five_minus_max_num_subblock_merge_cand。取值范围0-4。
[u(1)] sps_6param_affine_enabled_flag:6param_affine。
[u(1)] sps_affine_amvr_enabled_flag:affine_amvr。
[u(1)] sps_affine_prof_enabled_flag:affine_prof。
[u(1)] sps_prof_control_present_in_ph_flag:prof_control_present_in_ph。
[u(1)] sps_bcw_enabled_flag:bcw。
[u(1)] sps_ciip_enabled_flag:ciip。
[u(1)] sps_gpm_enabled_flag:gpm。
[ue(v)] sps_max_num_merge_cand_minus_max_num_gpm_cand:MaxNumGpmMergeCand = MaxNumMergeCand −
sps_max_num_merge_cand_minus_max_num_gpm_cand。
[ue(v)] sps_log2_parallel_merge_level_minus2:影响merge候选的导出。

[u(1)] sps_isp_enabled_flag:isp。
[u(1)] sps_mrl_enabled_flag:mrl。
[u(1)] sps_mip_enabled_flag:mip。
[u(1)] sps_cclm_enabled_flag:cclm。
[u(1)] sps_chroma_horizontal_collocated_flag:chroma_horizontal_collocated。
[u(1)] sps_chroma_vertical_collocated_flag:chroma_vertical_collocated。
[u(1)] sps_palette_enabled_flag:palette。

[ue(v)] sps_min_qp_prime_ts:指定ts允许的最小量化参数。
[u(1)] sps_ibc_enabled_flag:ibc。
[ue(v)] sps_six_minus_max_num_ibc_merge_cand
[u(1)] sps_ladf_enabled_flag:ladf, HDR tool。
[u(1)] sps_explicit_scaling_list_enabled_flag:explicit_scaling_list。
[u(1)] sps_dep_quant_enabled_flag:dep_quant。
[u(1)] sps_sign_data_hiding_enabled_flag:sign_data_hiding。
[u(1)] sps_virtual_boundaries_enabled_flag:virtual_boundaries。

[u(1)] sps_field_seq_flag
[u(1)] sps_vui_parameters_present_flag









VVC解码流程(2)—NAL unit header

一个NALU单元包含两部分,即2个字节的 NALU header 和 NALU payload 组成。NALU payload 即 raw byte sequence payload (RBSP),这里不多赘述,本文只详细介绍 NALU header。

NALU header由固定的两个字节组成,下面这个语法元素表可以看到。

forbidden_zero_bit :始终为0。

nuh_reserved_zero_bit :值为0,解码器应允许 nuh_reserved_zero_bit 的值等于1出现在语法中,并应忽略(即从比特流中删除并丢弃)nuh_reserved_zero_bit 等于1的NALU。

nuh_layer_id: 表示NALU属于哪个层,用于RPR和可扩展编码,对于普通类型的编码,nuh_layer_id为0。

nal_unit_type:表示NALU的类型,5个bit,一共可以表示32种类型,目前VVC共有22中NALU类型,分别是8种VCL NALU和14种non-VCL NALU。

8种VCL NALU如下:

相对于HEVC,GDR是一种新的NALU类型,另外7中类型在HEVC码流中的NALU中有详细介绍。

14种non-VCL NALU如下:

相对于HEVC,新增了OPI_NUT, DCI_NUT, PREFIX_APS_NUT, SUFFIX_APS_NUT, PU_NUT。常用的non-VCL NALU是SPS_NUT, PPS_NUT, PREFIX_APS_NUT, SUFFIX_APS_NUT。

nuh_temporal_id_plus1:表示分层编码中temporal layer,VCL NALU就表示对应的层,例如 IDR_W_RADL 对应的 nuh_temporal_id_plus1 为1, STSA_NUT对应的 nuh_temporal_id_plus1 应该大于1。对于non-VCL NALU,nuh_temporal_id_plus1的值有一些特殊限制,但一般情况下的值基本都是1。

VVC解码流程(1)—NALU start code

视频码流是由多个NALU组成的,start code是为了识别NALU,当解码器识别出start code,就认为是一个新的NALU到来。

NALU start code是0x000001或者0x00000001,如果NALU是DCI_NUT, OPI_NUT, VPS_NUT, SPS_NUT, PPS_NUT, PREFIX_APS_NUT, or SUFFIX_APS_NUT这些类型,则NALU start code是0x00000001,否则是0x000001

跟随在NALU start code后面的两个字节为 NAL unit header syntax。

下图中黄色的部分是SPS NALU.