转自: 有点记不清了,知道的告诉一下??呵呵
1: seq_parameter_set_rbsp( ) {
// profile_idc level_idc 指明所用 profile、level
profile_idc
constraint_set_flag ///0:baseline,1:main 2,extend main 3 high profile
reserved_zero_5bits 在目前的标准中本句法元素必须等于 0,其他的值保留做将来用,解码器应该忽略本句法元素的值。
level_idc /* 指明所用的Level */
seq_parameter_set_id /*这个 id 号将被 picture 参数集引用,本句法元素的值应该在[0,31],,编码需要产生新的序列集时,使用新的id,而不是改变原来参数集的内容 */
// log2_max_frame_num_minus4 这个句法元素主要是为读取另一个句法元素 frame_num 服务的,frame_num 是最重要的句法元素之一,它标识所属图像的解码顺序 。这个句法元素同时也指明了 frame_num 的所能达到的最大值: MaxFrameNum = 2*exp( log2_max_frame_num_minus4 + 4 )
// pic_order_cnt_type 指明了 poc (picture order count) 的编码方法,poc 标识图像的播放顺序。由poc 可以由 frame-num 通过映射关系计算得来,也可以索性由编码器显式地传送。
pic_order_cnt_type
if( pic_order_cnt_type == 0 )
// log2_max_pic_order_cnt_lsb_minus4 指明了变量 MaxPicOrderCntLsb 的值: MaxPicOrderCntLsb = pow(2, (log2_max_pic_order_cnt_lsb_minus4 + 4) )
log2_max_pic_order_cnt_lsb_minus4
else if( pic_order_cnt_type == 1 ) {
// delta_pic_order_always_zero_flag 等于 1 时,句法元素 delta_pic_order_cnt[0]和 delta_pic_order_cnt[1]
不在片头出现,并且它们的值默认为 0; 本句法元素等于 0 时,上述的两个句法元素将在片头出现。
delta_pic_order_always_zero_flag
// offset_for_non_ref_pic 被用来计算非参考帧或场的 POC,本句法元素的值应该在[pow(-2, 31) , pow(2, 31) – 1]。
offset_for_non_ref_pic
// offset_for_top_to_bottom_field 被用来计算帧的底场的 POC, 本句法元素的值应该在[pow(-2, 31) , pow(2, 31) – 1]。
offset_for_top_to_bottom_field
// num_ref_frames_in_pic_order_cnt_cycle 被用来解码POC, 本句法元素的值应该在[0,255]。
num_ref_frames_in_pic_order_cnt_cycle
// offset_for_ref__frame[i] 用于解码 POC,本句法元素对循环num_ref_frames_in_pic_order_cycle 中的每一个元素指定一个偏移。
for( i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++ )
offset_for_ref_frame[ i ]
}
// num_ref_frames 指定参考帧队列可能达到的最大长度,解码器依照这个句法元素的值开辟存储区,这个存储区用于存放已解码的参考帧,H.264 规定最多可用 16 个参考帧,本句法元素的值最大为 16。值得注意的是这个长度以帧为单位,如果在场模式下,应该相应地扩展一倍。
num_ref_frames
// gaps_in_frame_num_value_allowed_flag 这个句法元素等于 1 时,表示允许句法元素 frame_num 可以不连续。当传输信道堵塞严重时,编码器来不及将编码后的图像全部发出,这时允许丢弃若干帧图像。
gaps_in_frame_num_value_allowed_flag
// pic_width_in_mbs_minus1 本句法元素加 1 后指明图像宽度,以宏块为单位: PicWidthInMbs = pic_width_in_mbs_minus1 + 1 通过这个句法元素解码器可以计算得到亮度分量以像素为单位的图像宽度: PicWidthInSamplesL = PicWidthInMbs * 16
pic_width_in_mbs_minus1
// pic_height_in_map_units_minus1 本句法元素加 1 后指明图像高度: PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1
pic_height_in_map_units_minus1
// frame_mbs_only_flag 本句法元素等于 0 时表示本序列中所有图像的编码模式都是帧,没有其他编码模式存在;本句法元素等于 1 时 ,表示本序列中图像的编码模式可能是帧,也可能是场或帧场自适应,某个图像具体是哪一种要由其他句法元素决定。
frame_mbs_only_flag
// mb_adaptive_frame_field_flag 指明本序列是否属于帧场自适应模式。mb_adaptive_frame_field_flag等于1时表明在本序列中的图像如果不是场模式就是帧场自适应模式,等于0时表示本序列中的图像如果不是场模式就是帧模式。。表 列举了一个序列中可能出现的编码模式:
if( !frame_mbs_only_flag )
mb_adaptive_frame_field_flag
// direct_8x8_inference_flag 用于指明 B 片的直接和 skip 模式下运动矢量的预测方法。
direct_8x8_inference_flag
// frame_cropping_flag 用于指明解码器是否要将图像裁剪后输出,如果是的话,后面紧跟着的四个句法元素分别指出左右、上下裁剪的宽度。
frame_cropping_flag
if( frame_cropping_flag ) {
frame_crop_left_offset
frame_crop_right_offset
frame_crop_top_offset
frame_crop_bottom_offset
}
// vui_parameters_present_flag 指明 vui 子结构是否出现在码流中,vui 用以表征视频格式等额外信息。
vui_parameters_present_flag
if( vui_parameters_present_flag )
vui_parameters( )
rbsp_trailing_bits( )
}
pic_parameter_set_rbsp( ) {
// pic_parameter_set_id 用以指定本参数集的序号,该序号在各片的片头被引用。
pic_parameter_set_id
// seq_parameter_set_id 指明本图像参数集所引用的序列参数集的序号。
seq_parameter_set_id
// entropy_coding_mode_flag 指明熵编码的选择,本句法元素为0时,表示熵编码使用 CAVLC,本句法元素为1时表示熵编码使用 CABAC
entropy_coding_mode_flag
// pic_order_present_flag POC 的三种计算方法在片层还各需要用一些句法元素作为参数,本句法元素等于1时表示在片头会有句法元素指明这些参数;本句法元素等于0时,表示片头不会给出这些参数,这些参数使用默认值
pic_order_present_flag
// num_slice_groups_minus1 本句法元素加1后指明图像中片组的个数。H.264 中没有专门的句法元素用于指明是否使用片组模式,当本句法元素等于0(即只有一个片组),表示不使用片组模式,后面也不会跟有用于计算片组映射的句法元素。
num_slice_groups_minus1
if( num_slice_groups_minus1 > 0 ) {
/* slice_group_map_type 用以指明片组分割类型。
map_units 的定义:
- 当 frame_mbs_only_flag 等于1时,map_units 指的就是宏块
- 当 frame_mbs_only_flag 等于0时
- 帧场自适应模式时,map_units 指的是宏块对
- 场模式时,map_units 指的是宏块
- 帧模式时,map_units 指的是与宏块对相类似的,上下两个连续宏块的组合体。 */
slice_group_map_type
if( slice_group_map_type = = 0 )
for( iGroup = 0; iGroup <= num_slice_groups_minus1; iGroup++ )
// run_length_minus1[i] 用以指明当片组类型等于0时,每个片组连续的 map_units 个数
run_length_minus1[ iGroup ]
else if( slice_group_map_type = = 2 )
for( iGroup = 0; iGroup < num_slice_groups_minus1; iGroup++ ) {
// top_left[i],bottom_right[i] 用以指明当片组类型等于2时,矩形区域的左上及右下位置。
top_left[ iGroup ]
bottom_right[ iGroup ]
}
else if( slice_group_map_type = = 3 | |
slice_group_map_type = = 4 | |
slice_group_map_type = = 5 ) {
// slice_group_change_direction_flag 与下一个句法元素一起指明确切的片组分割方法。
slice_group_change_direction_flag
// slice_group_change_rate_minus1 用以指明变量 SliceGroupChangeRAte
slice_group_change_rate_minus1
} else if( slice_group_map_type = = 6 ) {
// pic_size_in_map_units_minus1 在片组类型等于6时,用以指明图像以 map_units 为单位的大小。
pic_size_in_map_units_minus1
for( i = 0; i <= pic_size_in_map_units_minus1; i++ )
// slice_group_id[i] 在片组类型等于6时,用以指明某个 map_units 属于哪个片组。
slice_group_id[ i ]
}
}
// num_ref_idx_l0_active_minus1 加1后指明目前参考帧队列的长度,即有多少个参考帧(包括短期和长期)。值得注意的是,当目前解码图像是场模式下,参考帧队列的长度应该是本句法元素再乘以2,因为场模式下各帧必须被分解以场对形式存在。(这里所说的场模式包括图像的场及帧场自适应下的处于场模式的宏块对) 本句法元素的值有可能在片头被重载。
在序列参数集中有句法元素 num_ref_frames 也是跟参考帧队列有关,它们的区别是num_ref_frames指明参考帧队列的最大值,解码 器用它的值来分配内存空 间;num_ref_idx_l0_active_minus1 指明在这个队列中当前实际的、已存在的参考帧数目,这从它的名字“active”中也可以看出来。图像时,并不是直接传送该图像的编号,而是传送该图像在参考帧队列中的序号。这个序号并不是在码流中传送的,这个句法元素是 H.264 中最重要的句法元素之一,编码器要通知解码器某个运动矢量所指向的是哪个参考而是编码器和解码器同步地、用相同的方法将参考图像放入队列,从而获得一个序号。这个队列在每解一个图像,甚至是每个片后都会动态地更新。维护参考帧队列是编解码器十分重要的工作,而本句法元素是维护参考帧队列的重要依据。参考帧队列的复杂的维护机制是 H.264 重要也是很有特色的组成部分
num_ref_idx_l0_active_minus1
num_ref_idx_l1_active_minus1
// weighted_pred_flag 用以指明是否允许P和SP片的加权预测,如果允许,在片头会出现用以计算加权预测的句法元素。
weighted_pred_flag
// weighted_bipred_flag 用以指明是否允许 B 片的加权预测,本句法元素等于 0 时表示使用默认加权预测模式,等于 1 时表示使用显式加权预测模式,等于 2 时表示使用隐式加权预测模式。
weighted_bipred_idc
// pic_init_qp_minus26 加 26 后用以指明亮度分量的量化参数的初始值。在 H.264 中,量化参数分三个级别给出:图像参数集、片头、宏块。在图像参数集给出的是一个初始值。
pic_init_qp_minus26 /* relative to 26 */
pic_init_qs_minus26 /* relative to 26 */
// chroma_qp_index_offset 色度分量的量化参数是根据亮度分量的量化参数计算出来的,本句法元素用以指明计算时用到的参数。
chroma_qp_index_offset
// deblocking_filter_control_present_flag 编码器可以通过句法元素显式地控制去块滤波的强度,本句法元素指明是在片头是否会有句法元素传递这个控制信息。如果本句法元素等于 0,那些用于传递滤波强度的句法元素不会出现,解码器将独立地计算出滤波强度。
deblocking_filter_control_present_flag
// constrained_intra_pred_flag 在 P 和 B 片中,帧内编码的宏块的邻近宏块可能是采用的帧间编码。当本句法元素等于 1 时,表示帧内编码的宏块不能用帧间编码的宏块的像素作为自己的预测,即帧内编码的宏块只能用邻近帧内编码的宏块的像素作为自己的预测;而本句法元素等于 0 时,
//表示不存在这种限制。
constrained_intra_pred_flag
// redundant_pic_cnt_present_flag 指明是否会出现 redundant_pic_cnt 句法元素。
redundant_pic_cnt_present_flag
rbsp_trailing_bits( )
}
-----------------------------------------------------------------------------
H.264 SPS/PPS成员值含义(转) (2011-04-01 15:14:38)转载▼
标签: 转载
原文地址:H.264 SPS/PPS成员值含义(转)作者:山之西
一、sequence_parameter_set_rbsp_t结构体内成员及用途
1. unsigned profile_idc: 它指的是码流对应的profile.
1.1 基线profile(Baseline profile)
遵循基线profile的码流应该遵循以下的约束:
a) 只有I和P切片存在
b) NAL单元流不应该有范围在2到4的nal_unit_type值,包括2和4.
c) 序列参数集(sps)的frame_mbs_only_fag(之后介绍)应该等于1
d) 图象参数值(psp)的weighted_pred_flag和weighted_bipred_idc都应该为0
e) 图象参数值(psp)的entropy_coding_mode_flag应该等于0
f) 图象参数值(psp)的num_slice_groups_minus1应该在0到7之间,包括0和7
g) 对于基线profile对应的level度应该满足.
符合基线profile的码流的profile_idc被赋66.符合一定level的基线Baseline的解码器应该可以解码
所有的profile_idc等于66的码流或constrained_set0_flag(等会介绍)为1而且level_idc(在level部
分介绍)少于或等于一个指定的level的码流。
1.2 主profile(Main profile)
符合主profile的码流应该遵循以下的约束:
a) 只有I,P,B切片存在.
b) NAL单元流不包括nal_unit_type值范围在2-4之内的值。包括2和4.
c) 不能允许有随意顺序的切片
d) 图像参数集(psp)的num_slice_groups_minus1应该只为0
e) 图像参数集(psp)的redundant_pic_cnt_present_flag应该只为0
f) 对于主profile所要求的level级需要达到。
符合主profile的码流的profile_idc应为77。符合指定level的主profile的解码器应该可以解码所有
的profile_idc为77的或constrained_set1_flag值为1且level_idc值小于或等于指定level的码流。
1.3 扩展profile(Extended profile)
符合扩展profile的码流应该遵循以下的约束:
a) 序列参数集的direct_8x8_inference_flag值应该为1
b) 图像参数集的entropy_coding_mode_flag值应该为0
c) 图像参数集的num_slice_groups_minus1的值范围为0到7,包括0和7
d) 对于扩展profile指定的level级应该被达到
符合指定level级的扩展profile的解码器可以解码所有的profile_idc值为88的或
constrained_set2_flag值为1的,而且level_idc小于等于指定level级的码流。
符合指定level级的扩展profile的解码器可以解码所有的profile_idc值为66的或
constrained_set0_flag值为1的,而且level_idc小于等于指定level级的码流。
2. constrained_set0_flag
当constrained_set0_flag值为1的时候,就说明码流应该遵循基线profile(Baseline profile)的所有约
束.constrained_set0_flag值为0时,说明码流不一定要遵循基线profile的所有约束。
3. constrained_set1_flag
当constrained_set1_flag值为1的时候,就说明码流应该遵循主profile(Main profile)的所有约束.
constrained_set1_flag值为0时,说明码流不一定要遵循主profile的所有约束。
4. constrained_set2_flag
当constrained_set2_flag值为1的时候,就说明码流应该遵循扩展profile(Extended profile)的所有约
束.constrained_set2_flag值为0时,说明码流不一定要遵循扩展profile的所有约束。
注意:当constraint_set0_flag,constraint_set1_flag或constraint_set2_flag中不只一个值为1的话,
那么码流必须满足所有相应指明的profile约束。
5. level_idc
它指的是码流对应的level级.
5.1 独立于profile的level约束
{ 让fR是这样一个变量:
a) 如果图像n是一帧,fR设为1/172
b) 如果图像n是一个场,fR设为1/(172*2)
任何profile下的指定的level都应该满足如下约束:
a) 理论上可访问单元n从CPB中的移除时间满足这样的约束:t(n)-t(n-1)要比Max
(PicSizeInMbs,MaxMBPS,fR)值大或相等,MaxMBPS是说在level表中指出的对于图像n的值,
PicSizeInMbs是指在图像n中的宏块数。
b) 如果图像n是一个输出图像而且它不是码流的最后一个输出图象,从DPB中取出的连续的输出图象
差满足:Dt(n) >= Max(PicSizeInMbs, MaxMBPS, fR), MaxMBPS是指对于图象n来说的相应的值。
PicSizeInMbs指图象n的宏块。
c) 对于可访问单元0的NumBytesInNALunit变量的总和少于或等于256*ChromaFormatFactor*
(PicSizeInMbs+MaxMBPS*tr(0)-trn(0)/MinCR,MaxMBPS和MinCR是图象0在level表中相应的
值,PicSizeInMbs是图象0的宏块数量。
d) 对于可访问单元n的NumBytesInNALunit值的总和是小于或等于256*ChromaFormatFactor*MaxMBPS*
(tr(n)-trn(n-1))/MinCR,MaxMBPS和MinCR的值是图像n在level级表中对应的值。
e) PicWidthInMbs * FrameHeightInMbs <= MaxFS, MaxFS是在level表中指定的值。
f) PicWidthInMbs <= Sqrt(MaxFS * 8)
g) FrameHeightInMbs <= Sqrt(MaxFS * 8)
h) max_dec_frame_buffering <=MaxDpbSize, MaxDpbSize等于Min(1024 * MaxDPB /
(PicWidthInMbs * FrameHeightInMbs * 256 * ChromaFormatFactor,16),MaxDPB是对于1024字节
单元的MaxDPB值,max_dec_frame_buffering也叫做DPB大小值。
i) 对于VCL HRD参数值,至少对于一个SchedSelIdx值来说,码率BitRate[SchedSelIdx] <= 1000 *
MaxBR且CpbSize[SchedSelIdx] <= 1000 * MaxCPB。MaxBR和MaxCPB是对于1000bits/s和1000位单
元对应于level级表的值。码流应该为0到cpb_cnt_minus1中的一个值,包括0和
cpb_cnt_minus1.CpbSize[SchedSelIdx]也叫做CPB大小值。
j) 对于NAL HRD参数来说,BitRate[SchSelIdx] <= 1200 * MaxBR且CpbSize[SchedSelIdx] <= 1200
* MaxCPB,MaxBR和MaxCPB是在1200bits/s和1200位的单元值在极限level下的值。码流应该满足至
少SchedSelIdx值从0到cpb_cnt_minus1中的一个值。
k) 在亮度帧采样中,垂直运动向量元素范围不能超过MaxVmvR,MaxVmvR值在level极限表中提供
l) 在亮度帧采样单元中,水平运动向量范围不能超过-2048到2047.75,包括-2048和2047.75。
m) 按解码顺序的两个连续的宏愉的运动向量的数量不超过MaxMvsPer2Mb(对于当前宏块的最后一个切
片和下一个宏块的第一个切片也适用),MaxMvsPer2Mb值在level极限表中提供.
n) 对于任何宏块的macroblock_layer()的位数值都不能大于128 + 2048 * ChromaFormatFactor.依
赖于entropy_coding_mode_flag值,macroblock_layer()的值由如下方式计算
如果entropy_coding_mode_flag值为0的话,macroblock_layer()的值由macroblock_layer()的对
于一个macroblock的语法结构给出
其他情况下,对于一个宏块的macroblock_layer()值是由read_bits(1)给出的.
}
5.2 与profile相关的level级
对于基线profile,主profile和扩展profile的相应的level级约束在H.264的文档中有表可查。
6. seq_parameter_set_id
seq_parameter_set_id指定了由图像参数集指明的序列参数集。seq_parameter_set_id值应该是从0到31,包括0和31
注意: 当可用的情况下,编码器应该在sps值不同的情况下使用不同的seq_parameter_set_id值,而不是变化某一特定值的seq_parameter_set_id的参数集的语法结构中的值。
7. log2_max_frame_num_minus4
log2_max_frame_num_minus4指定了变量MaxFrameNum的值,MaxFrameNum = 2(log2_max_frame_num_minus4+4)
log2_max_frame_num_minus的值应该在0到12之间,包括0和12.
8. pic_order_cnt_type
pic_order_cnt_type指定了解码图像顺序的方法。pic_order_cnt_type的值是0,1,2。
pic_order_cnt_type在当一个编码视频序列有如下限定时不为2
a) 包含非参考帧的可访问单元,并紧接着一个包含非参考可访问单元
b) 两个可访问单元,它们分别包含两个场中的一个,它们一块儿组成了一个互补的非参考场对,被紧接着一个包括非参考图像的可访问单元。
c) 一个包含非参考场的可访问单元,并紧接着一个包含另一个非参考图像的可访问单元,它们不组成互补的非参考场对。
9. log2_max_pic_order_cnt_lsb_minus4
log2_max_pic_order_cnt_lsb_minus4指出变量MaxPicOrderCntLsb的值,它是在解码过程中使用到的图像顺序计算值:
MaxPicOrderCntLsb = 2(log2_max_pic_order_cnt_lsb_minus4+4)
log2_max_pic_order_cnt_lsb_minus4的值为包括0和12以及它们之间的值。
10. delta_pic_order_always_zero_flag
delta_pic_order_always_zero_flag等于1的时候表示当delta_pic_order_cnt[0]和delta_pic_order_cnt[1]在序列的切片头中不存在,并被认为是0。delta_pic_order_always_zero_flag值等于0时表示delta_pic_order_cnt[0]在序列的切片头中存在而delta_pic_order_cnt[1]可能在序列的切片头中存在。
11. offset_for_non_ref_pic
offset_for_non_ref_pic被用来计算一个非参考图像的图像顺序值。offset_for_non_ref_pic值取值范围为(-2)^(31)到2^(31)-1,包括边界值。
12. offset_for_top_to_bottom_field
offset_for_top_to_bottom_field被用来计算一帧中的下场的图像顺序值。offset_for_top_to_bottom_field值的取值范围为(-2)^(31)到(2)^(31)-1,包括边界值。
13. num_ref_frames_in_pic_order_cnt_cycle
num_ref_frames_in_pic_order_cnt_cycle在解码过程中被用来计算图像顺序值。num_ref_frames_in_pic_order_cnt_cycle在0到255之间取值,包括边界值。
14. offset_for_ref_frame[i]
offset_for_ref_frame[i]是一列num_ref_frames_in_pic_order_cnt_cycle中的一个元素,它被在解码过程的解码顺序值中使用。offset_for_ref_frame[i]的值为(-2)^31到(2)^(31)-1,包括边界值。
15. num_ref_frames
num_ref_frames指定了长期的和短期的参考帧的最大总数目,互补的参考场对和在解码过程中对于任何序列使用的帧间预测的非配对的参考场。num_ref_frames也决定了滑动窗口的操作大小过程。num_ref_frames值在0-16之间,包括边界值。
16. gaps_in_frame_num_value_allowed_flag
gaps_in_frame_num_value_allowed_flag值指明了frame_num允许的值和解码过程中的frame_num的差距值。
17. pic_width_in_mbs_minus1
pic_width_in_mbs_minus1加1指明了对于每个解码图像中的宽度值。在宏块单元中的图像宽度的变量值为:
PicWidthInMbs = pic_width_in_mbs_minus1+1;
对于亮度元素来说图像宽度变量的值:PicWidthInSamplesL = PicWidthInMbs * 16;
对于色度元素来说图像宽度变量的值:PicWidthInSamplesC = PicWidthInMbs * 8
18. pic_height_in_map_units_minus1
pic_height_in_map_units_minus1指明了解码帧或场中的一个切片组的高度。变量PicHeightInMapUnits的值和PicSizeInMapUnits:
PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1;
PicSizeInMapUnits = PicWidthInMbs * PicHeightInMapUnits
19.frame_mbs_only_flag
frame_mbs_only_flag等于0指明了视频序列的编码图象可能是编码场或编码帧。frame_mbs_only_flag等于1指明了每个编码视频序列的编码图像都是只含帧宏块的编码帧。
依赖于frame_mbs_only_flag的值,pic_height_in_map_units_minus1如下定义:
如frame_mbs_only_flag等于0,pic_height_in_map_units_minus1就是宏块单元的场高
如frame_mbs_only_flag等于1,pic_height_in_map_units_minus1就是宏块单元的场宽
FrameHeightInMbs的值:
FrameheightInMbs = ( 2 - frame_mbs_only_flag ) * PicHeightInMapUnits
20. mb_adaptive_frame_field_flag
mb_adaptive_frame_field_flag等于0表明在一个图像内不能切换使用帧和场宏块。mb_adaptive_frame_field_flag等于1表示在一帧中有可能使用场和帧的切换,当mb_adaptive_frame_field_flag没有设定的时候,应该赋给0.
21. direct_8x8_inference_flag
direct_8x8_inference_flag指明了在亮度运动向量生成B_Skip,B_Direct_16x16和B_Direct_8x8的方法。当frame_mbs_only_flag为0时,direct_8x8_inference_flag应为1
22. frame_cropping_flag
frame_cropping_flag等于1表明在sps中下一个使用的帧剪切偏移量参数。frame_cropping_flag等于0表明帧剪切偏移量不存在。
23. frame_crop_left_offset,frame_crop_right_offset,frame_crop_top_offset,frame_crop_bottom_offset指明了在一个窗中一帧的采样值。
24. vui_parameters_present_flag
vui_parameters_present_flag等于1表示vui_parameters()在码流中是存在的,vui_parameters_present_flag等于0表明vui_parameters()在码流中不存在。