H264参数SPS(序列参数集)和PPS(图像参数集)说明

在文章开始之前,先看图一:

图一

从图一中我们看到SPS,PPS。这是符合H.264码流中第一个NALU是SPS,第二个NALU是PPS。SPS和PPS包含了

初始化H.264解码器所需要的信息参数。

SPS包含的是针对一连续编码视频序列的参数,如标识符seq_parameter_set_id、帧数及POC的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识等。

PPS对应的是一个序列中某一副图像或者某几幅图像,参数如标识符pic_parameter_set_id、可选的seq_parameter_set_id、熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等。

通过以上可知,如果H.264码流中无PPS或者SPS的话,解码器是无法解析码流数据,自然是无法播放。

说完了PPS和SPS的重要性之后,接下来描述下PPS和SPS结构体元素信息。

SPS:

图二

图二的SPS参数信息是通过雷霄骅老师的H.264分析器软件分析数据所得。

针对这些参数信息,说明如下:

<span class="lnum" style="color: rgb(96, 96, 96);">   1:  </span>seq_parameter_set_rbsp( ) {  
   2:      // profile_idc  level_idc  指明所用  profile、level 
<span class="lnum" style="color: rgb(96, 96, 96);">   3:  </span>    profile_idc   
   4:      // constraint_set0_flag  等于 1 时表示必须遵从附录 A.2.1 所指明的所有制约条件。等于 0 时表示不必遵从所有条件。 
<span class="lnum" style="color: rgb(96, 96, 96);">   5:  </span>    constraint_set0_flag   
   6:      // constraint_set1_flag  等于 1 时表示必须遵从附录 A.2.2 所指明的所有制约条件。等于 0 时表示不必遵从所有条件。 
<span class="lnum" style="color: rgb(96, 96, 96);">   7:  </span>    constraint_set1_flag    
   8:      // constraint_set2_flag  等于 1 时表示必须遵从附录 A.2.3 所指明的所有制约条件。等于 0 时表示不必遵从所有条件。 
<span class="lnum" style="color: rgb(96, 96, 96);">   9:  </span>   constraint_set2_flag   
  10:      // reserved_zero_5bits  在目前的标准中本句法元素必须等于 0,其他的值保留做将来用,解码器应该忽略本句法元素的值。 
<span class="lnum" style="color: rgb(96, 96, 96);">  11:  </span>    reserved_zero_5bits <span class="rem" style="color: rgb(0, 128, 0);">/* equal to 0 */</span>    
  12:      level_idc      /* 指明所用的Level */
<span class="lnum" style="color: rgb(96, 96, 96);">  13:  </span>    seq_parameter_set_id    <span class="rem" style="color: rgb(0, 128, 0);">/* 指明本序列参数集的  id 号,这个 id 号将被 picture 参数集引用,本句法元素的值应该在[0,31],,编码需要产生新的序列集时,使用新的id,而不是改变原来参数集的内容 */</span>  
  14:      // log2_max_frame_num_minus4  这个句法元素主要是为读取另一个句法元素 frame_num  服务的,frame_num  是最重要的句法元素之一,它标识所属图像的解码顺序 。这个句法元素同时也指明了 frame_num 的所能达到的最大值: MaxFrameNum = 2*exp( log2_max_frame_num_minus4 + 4 ) 
<span class="lnum" style="color: rgb(96, 96, 96);">  15:  </span>    log2_max_frame_num_minus4   
  16:      // pic_order_cnt_type  指明了 poc  (picture  order  count)  的编码方法,poc 标识图像的播放顺序。由poc 可以由 frame-num 通过映射关系计算得来,也可以索性由编码器显式地传送。 
<span class="lnum" style="color: rgb(96, 96, 96);">  17:  </span>    pic_order_cnt_type         
  18:      if( pic_order_cnt_type    ==    0 )   
<span class="lnum" style="color: rgb(96, 96, 96);">  19:  </span>       <span class="rem" style="color: rgb(0, 128, 0);">// log2_max_pic_order_cnt_lsb_minus4  指明了变量  MaxPicOrderCntLsb 的值: MaxPicOrderCntLsb = pow(2, (log2_max_pic_order_cnt_lsb_minus4 + 4) ) </span>
  20:          log2_max_pic_order_cnt_lsb_minus4    
<span class="lnum" style="color: rgb(96, 96, 96);">  21:  </span>    <span class="kwrd" style="color: rgb(0, 0, 255);">else</span> <span class="kwrd" style="color: rgb(0, 0, 255);">if</span>( pic_order_cnt_type    ==    1 ) {    
  22:          // delta_pic_order_always_zero_flag  等于 1 时,句法元素 delta_pic_order_cnt[0]和 delta_pic_order_cnt[1] 
<span class="lnum" style="color: rgb(96, 96, 96);">  23:  </span>不在片头出现,并且它们的值默认为 0;  本句法元素等于 0 时,上述的两个句法元素将在片头出现。  
  24:          delta_pic_order_always_zero_flag    
<span class="lnum" style="color: rgb(96, 96, 96);">  25:  </span>        <span class="rem" style="color: rgb(0, 128, 0);">// offset_for_non_ref_pic   被用来计算非参考帧或场的 POC,本句法元素的值应该在[pow(-2, 31)  , pow(2, 31)  – 1]。  </span>
  26:         offset_for_non_ref_pic    
<span class="lnum" style="color: rgb(96, 96, 96);">  27:  </span>        <span class="rem" style="color: rgb(0, 128, 0);">// offset_for_top_to_bottom_field  被用来计算帧的底场的 POC,  本句法元素的值应该在[pow(-2, 31)  , pow(2, 31)  – 1]。  </span>
  28:          offset_for_top_to_bottom_field    
<span class="lnum" style="color: rgb(96, 96, 96);">  29:  </span>       <span class="rem" style="color: rgb(0, 128, 0);">// num_ref_frames_in_pic_order_cnt_cycle  被用来解码POC, 本句法元素的值应该在[0,255]。 </span>
  30:          num_ref_frames_in_pic_order_cnt_cycle    
<span class="lnum" style="color: rgb(96, 96, 96);">  31:  </span>        <span class="rem" style="color: rgb(0, 128, 0);">// offset_for_ref__frame[i]  用于解码 POC,本句法元素对循环num_ref_frames_in_pic_order_cycle 中的每一个元素指定一个偏移。 </span>
  32:          for( i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++ )  
<span class="lnum" style="color: rgb(96, 96, 96);">  33:  </span>            offset_for_ref_frame[ i ]    
  34:      }    
<span class="lnum" style="color: rgb(96, 96, 96);">  35:  </span>    <span class="rem" style="color: rgb(0, 128, 0);">// num_ref_frames   指定参考帧队列可能达到的最大长度,解码器依照这个句法元素的值开辟存储区,这个存储区用于存放已解码的参考帧,H.264 规定最多可用 16 个参考帧,本句法元素的值最大为 16。值得注意的是这个长度以帧为单位,如果在场模式下,应该相应地扩展一倍。 </span>
  36:      num_ref_frames   
<span class="lnum" style="color: rgb(96, 96, 96);">  37:  </span>   <span class="rem" style="color: rgb(0, 128, 0);">// gaps_in_frame_num_value_allowed_flag  这个句法元素等于 1 时,表示允许句法元素 frame_num 可以不连续。当传输信道堵塞严重时,编码器来不及将编码后的图像全部发出,这时允许丢弃若干帧图像。 </span>
  38:     gaps_in_frame_num_value_allowed_flag   
<span class="lnum" style="color: rgb(96, 96, 96);">  39:  </span>    <span class="rem" style="color: rgb(0, 128, 0);">// pic_width_in_mbs_minus1  本句法元素加 1 后指明图像宽度,以宏块为单位: PicWidthInMbs = pic_width_in_mbs_minus1 + 1 通过这个句法元素解码器可以计算得到亮度分量以像素为单位的图像宽度: PicWidthInSamplesL = PicWidthInMbs * 16  </span>
  40:      pic_width_in_mbs_minus1    
<span class="lnum" style="color: rgb(96, 96, 96);">  41:  </span>    <span class="rem" style="color: rgb(0, 128, 0);">// pic_height_in_map_units_minus1   本句法元素加 1 后指明图像高度: PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1  </span>
  42:      pic_height_in_map_units_minus1    
<span class="lnum" style="color: rgb(96, 96, 96);">  43:  </span>    <span class="rem" style="color: rgb(0, 128, 0);">// frame_mbs_only_flag   本句法元素等于 0 时表示本序列中所有图像的编码模式都是帧,没有其他编码模式存在;本句法元素等于 1 时  ,表示本序列中图像的编码模式可能是帧,也可能是场或帧场自适应,某个图像具体是哪一种要由其他句法元素决定。 </span>
  44:      frame_mbs_only_flag    
<span class="lnum" style="color: rgb(96, 96, 96);">  45:  </span>    <span class="rem" style="color: rgb(0, 128, 0);">// mb_adaptive_frame_field_flag   指明本序列是否属于帧场自适应模式。mb_adaptive_frame_field_flag等于1时表明在本序列中的图像如果不是场模式就是帧场自适应模式,等于0时表示本序列中的图像如果不是场模式就是帧模式。。表  列举了一个序列中可能出现的编码模式: </span>
  46:      if( !frame_mbs_only_flag )   
<span class="lnum" style="color: rgb(96, 96, 96);">  47:  </span>        mb_adaptive_frame_field_flag    
  48:      // direct_8x8_inference_flag    用于指明 B 片的直接和 skip 模式下运动矢量的预测方法。 
<span class="lnum" style="color: rgb(96, 96, 96);">  49:  </span>    direct_8x8_inference_flag    
  50:      // frame_cropping_flag   用于指明解码器是否要将图像裁剪后输出,如果是的话,后面紧跟着的四个句法元素分别指出左右、上下裁剪的宽度。 
<span class="lnum" style="color: rgb(96, 96, 96);">  51:  </span>    frame_cropping_flag   
  52:      if( frame_cropping_flag ) {   
<span class="lnum" style="color: rgb(96, 96, 96);">  53:  </span>        frame_crop_left_offset    
  54:          frame_crop_right_offset   
<span class="lnum" style="color: rgb(96, 96, 96);">  55:  </span>        frame_crop_top_offset   
  56:         frame_crop_bottom_offset    
<span class="lnum" style="color: rgb(96, 96, 96);">  57:  </span>    }   
  58:      // vui_parameters_present_flag      指明 vui 子结构是否出现在码流中,vui 用以表征视频格式等额外信息。 
<span class="lnum" style="color: rgb(96, 96, 96);">  59:  </span>    vui_parameters_present_flag   
  60:       if( vui_parameters_present_flag )   
<span class="lnum" style="color: rgb(96, 96, 96);">  61:  </span>        vui_parameters( )         
  62:       rbsp_trailing_bits( )        
<span class="lnum" style="color: rgb(96, 96, 96);">  63:  </span>}  

PPS:

图三

图三是分析器分析的PPS参数内容例子,PPS的参数元素说明如下:

<span class="lnum" style="color: rgb(96, 96, 96);">   1:  </span>pic_parameter_set_rbsp( ) {   
   2:      // pic_parameter_set_id 用以指定本参数集的序号,该序号在各片的片头被引用。 
<span class="lnum" style="color: rgb(96, 96, 96);">   3:  </span>   pic_parameter_set_id   
   4:      // seq_parameter_set_id  指明本图像参数集所引用的序列参数集的序号。 
<span class="lnum" style="color: rgb(96, 96, 96);">   5:  </span>    seq_parameter_set_id   
   6:     // entropy_coding_mode_flag  指明熵编码的选择,本句法元素为0时,表示熵编码使用 CAVLC,本句法元素为1时表示熵编码使用 CABAC  
<span class="lnum" style="color: rgb(96, 96, 96);">   7:  </span>    entropy_coding_mode_flag   
   8:      // pic_order_present_flag        POC 的三种计算方法在片层还各需要用一些句法元素作为参数,本句法元素等于1时表示在片头会有句法元素指明这些参数;本句法元素等于0时,表示片头不会给出这些参数,这些参数使用默认值 
<span class="lnum" style="color: rgb(96, 96, 96);">   9:  </span>    pic_order_present_flag   
  10:      // num_slice_groups_minus1  本句法元素加1后指明图像中片组的个数。H.264  中没有专门的句法元素用于指明是否使用片组模式,当本句法元素等于0(即只有一个片组),表示不使用片组模式,后面也不会跟有用于计算片组映射的句法元素。  
<span class="lnum" style="color: rgb(96, 96, 96);">  11:  </span>    num_slice_groups_minus1   
  12:      if( num_slice_groups_minus1 > 0 ) {    
<span class="lnum" style="color: rgb(96, 96, 96);">  13:  </span>        <span class="rem" style="color: rgb(0, 128, 0);">/* slice_group_map_type  用以指明片组分割类型。  </span>
  14:             map_units 的定义: 
<span class="lnum" style="color: rgb(96, 96, 96);">  15:  </span><span class="rem" style="color: rgb(0, 128, 0);">          -  当 frame_mbs_only_flag 等于1时,map_units 指的就是宏块 </span>
  16:            -  当 frame_mbs_only_flag 等于0时  
<span class="lnum" style="color: rgb(96, 96, 96);">  17:  </span><span class="rem" style="color: rgb(0, 128, 0);">              -  帧场自适应模式时,map_units 指的是宏块对 </span>
  18:                -  场模式时,map_units 指的是宏块 
<span class="lnum" style="color: rgb(96, 96, 96);">  19:  </span><span class="rem" style="color: rgb(0, 128, 0);">              -  帧模式时,map_units 指的是与宏块对相类似的,上下两个连续宏块的组合体。      */</span> 
  20:          slice_group_map_type        
<span class="lnum" style="color: rgb(96, 96, 96);">  21:  </span>        <span class="kwrd" style="color: rgb(0, 0, 255);">if</span>( slice_group_map_type    = =    0 )         
  22:              for( iGroup = 0; iGroup <= num_slice_groups_minus1; iGroup++ )         
<span class="lnum" style="color: rgb(96, 96, 96);">  23:  </span>                <span class="rem" style="color: rgb(0, 128, 0);">// run_length_minus1[i]     用以指明当片组类型等于0时,每个片组连续的 map_units 个数 </span>
  24:                  run_length_minus1[ iGroup ]    
<span class="lnum" style="color: rgb(96, 96, 96);">  25:  </span>        <span class="kwrd" style="color: rgb(0, 0, 255);">else</span> <span class="kwrd" style="color: rgb(0, 0, 255);">if</span>( slice_group_map_type    = =    2 )         
  26:              for( iGroup = 0; iGroup < num_slice_groups_minus1; iGroup++ ) {         
<span class="lnum" style="color: rgb(96, 96, 96);">  27:  </span>                <span class="rem" style="color: rgb(0, 128, 0);">// top_left[i],bottom_right[i]   用以指明当片组类型等于2时,矩形区域的左上及右下位置。 </span>
  28:                  top_left[ iGroup ]   
<span class="lnum" style="color: rgb(96, 96, 96);">  29:  </span>                bottom_right[ iGroup ]   
  30:              }         
<span class="lnum" style="color: rgb(96, 96, 96);">  31:  </span>        <span class="kwrd" style="color: rgb(0, 0, 255);">else</span> <span class="kwrd" style="color: rgb(0, 0, 255);">if</span>(    slice_group_map_type    = =    3    | |     
  32:                      slice_group_map_type    = =    4    | |     
<span class="lnum" style="color: rgb(96, 96, 96);">  33:  </span>                    slice_group_map_type    = =    5 ) { 
  34:              // slice_group_change_direction_flag 与下一个句法元素一起指明确切的片组分割方法。  
<span class="lnum" style="color: rgb(96, 96, 96);">  35:  </span>           slice_group_change_direction_flag    
  36:             // slice_group_change_rate_minus1       用以指明变量 SliceGroupChangeRAte 
<span class="lnum" style="color: rgb(96, 96, 96);">  37:  </span>            slice_group_change_rate_minus1    
  38:          } else if( slice_group_map_type    = =    6 ) {    
<span class="lnum" style="color: rgb(96, 96, 96);">  39:  </span>           <span class="rem" style="color: rgb(0, 128, 0);">// pic_size_in_map_units_minus1   在片组类型等于6时,用以指明图像以 map_units 为单位的大小。      </span>
  40:              pic_size_in_map_units_minus1    
<span class="lnum" style="color: rgb(96, 96, 96);">  41:  </span>            <span class="kwrd" style="color: rgb(0, 0, 255);">for</span>( i = 0; i <= pic_size_in_map_units_minus1; i++ )         
  42:                  // slice_group_id[i]           在片组类型等于6时,用以指明某个 map_units 属于哪个片组。 
<span class="lnum" style="color: rgb(96, 96, 96);">  43:  </span>                slice_group_id[ i ]    
  44:          }         
<span class="lnum" style="color: rgb(96, 96, 96);">  45:  </span>    }         
  46:     // num_ref_idx_l0_active_minus1  加1后指明目前参考帧队列的长度,即有多少个参考帧(包括短期和长期)。值得注意的是,当目前解码图像是场模式下,参考帧队列的长度应该是本句法元素再乘以2,因为场模式下各帧必须被分解以场对形式存在。(这里所说的场模式包括图像的场及帧场自适应下的处于场模式的宏块对)  本句法元素的值有可能在片头被重载。  
<span class="lnum" style="color: rgb(96, 96, 96);">  47:  </span>      在序列参数集中有句法元素 num_ref_frames 也是跟参考帧队列有关,它们的区别是num_ref_frames指明参考帧队列的最大值,解码 器用它的值来分配内存空 间;num_ref_idx_l0_active_minus1 指明在这个队列中当前实际的、已存在的参考帧数目,这从它的名字“active”中也可以看出来。图像时,并不是直接传送该图像的编号,而是传送该图像在参考帧队列中的序号。这个序号并不是在码流中传送的,这个句法元素是 H.264 中最重要的句法元素之一,编码器要通知解码器某个运动矢量所指向的是哪个参考而是编码器和解码器同步地、用相同的方法将参考图像放入队列,从而获得一个序号。这个队列在每解一个图像,甚至是每个片后都会动态地更新。维护参考帧队列是编解码器十分重要的工作,而本句法元素是维护参考帧队列的重要依据。参考帧队列的复杂的维护机制是 H.264 重要也是很有特色的组成部分  
  48:      num_ref_idx_l0_active_minus1   
<span class="lnum" style="color: rgb(96, 96, 96);">  49:  </span>    num_ref_idx_l1_active_minus1  
  50:      // weighted_pred_flag  用以指明是否允许P和SP片的加权预测,如果允许,在片头会出现用以计算加权预测的句法元素。 
<span class="lnum" style="color: rgb(96, 96, 96);">  51:  </span>   weighted_pred_flag    
  52:      // weighted_bipred_flag   用以指明是否允许 B 片的加权预测,本句法元素等于 0 时表示使用默认加权预测模式,等于 1 时表示使用显式加权预测模式,等于 2 时表示使用隐式加权预测模式。  
<span class="lnum" style="color: rgb(96, 96, 96);">  53:  </span>    weighted_bipred_idc    
  54:      // pic_init_qp_minus26  加 26 后用以指明亮度分量的量化参数的初始值。在 H.264 中,量化参数分三个级别给出:图像参数集、片头、宏块。在图像参数集给出的是一个初始值。 
<span class="lnum" style="color: rgb(96, 96, 96);">  55:  </span>    pic_init_qp_minus26    <span class="rem" style="color: rgb(0, 128, 0);">/* relative to 26 */</span>    
  56:      pic_init_qs_minus26    /* relative to 26 */   
<span class="lnum" style="color: rgb(96, 96, 96);">  57:  </span>    <span class="rem" style="color: rgb(0, 128, 0);">// chroma_qp_index_offset   色度分量的量化参数是根据亮度分量的量化参数计算出来的,本句法元素用以指明计算时用到的参数。 </span>
  58:      chroma_qp_index_offset    
<span class="lnum" style="color: rgb(96, 96, 96);">  59:  </span>   <span class="rem" style="color: rgb(0, 128, 0);">// deblocking_filter_control_present_flag  编码器可以通过句法元素显式地控制去块滤波的强度,本句法元素指明是在片头是否会有句法元素传递这个控制信息。如果本句法元素等于 0,那些用于传递滤波强度的句法元素不会出现,解码器将独立地计算出滤波强度。 </span>
  60:      deblocking_filter_control_present_flag   
<span class="lnum" style="color: rgb(96, 96, 96);">  61:  </span>    <span class="rem" style="color: rgb(0, 128, 0);">// constrained_intra_pred_flag  在 P 和 B 片中,帧内编码的宏块的邻近宏块可能是采用的帧间编码。当本句法元素等于 1 时,表示帧内编码的宏块不能用帧间编码的宏块的像素作为自己的预测,即帧内编码的宏块只能用邻近帧内编码的宏块的像素作为自己的预测;而本句法元素等于 0 时,表示不存在这种限制。 </span>
  62:      constrained_intra_pred_flag   
<span class="lnum" style="color: rgb(96, 96, 96);">  63:  </span>    <span class="rem" style="color: rgb(0, 128, 0);">// redundant_pic_cnt_present_flag 指明是否会出现 redundant_pic_cnt  句法元素。 </span>
  64:      redundant_pic_cnt_present_flag   
<span class="lnum" style="color: rgb(96, 96, 96);">  65:  </span>    rbsp_trailing_bits( )        
  66:  }

注:
雷霄骅老师的H.264分析器文章URL:blog.csdn.net/leixiaohua1020/article/details/17933821
PPS和SPS结构参数说明引用至这位兄弟,URL:http://blog.csdn.net/heanyu/article/details/6191576
时间: 2024-11-04 14:44:23

H264参数SPS(序列参数集)和PPS(图像参数集)说明的相关文章

[转]【流媒體】H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流

[流媒體]H264—MP4格式及在MP4文件中提取H264的SPS.PPS及码流 SkySeraph Apr 1st 2012  Email:[email protected].com 一.MP4格式基本概念 MP4格式对应标准MPEG-4标准(ISO/IEC14496) 二.MP4封装格式核心概念 1  MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象编码的第12部分: ISO 基本媒体文件格式/Information technology Coding of a

多媒体开发之---h264 图像参数级语义

(四)图像参数集语义 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时,表

sklearn获得某个参数的不同取值在训练集和测试集上的表现的曲线刻画

from sklearn.svm import SVC from sklearn.datasets import make_classification import numpy as np X,y = make_classification() def plot_validation_curve(estimator,X,y,param_name="gamma", param_range=np.logspace(-6,-1,5),cv=5,scoring="accuracy&

38 py改变函数参数的值关键字参数和参数默认值函数中可变参数将序列中的元素值作为函数对应的参数值传

第五课:改变函数参数的值 一个python函数可以有任意多个参数,在一个函数的外部来定义变量,然后把变量作为参数传入到函数内,并且在函数的内部来修改函数的参数值,函数结束之后,这些变量的值在如何变化呢? 给函数传递值有2种:1种是值传递,1种是引用传递 # 改变函数参数的值 # 值传递(数值.字符串.布尔 这些都是值传递) 在函数的内部修改变量值,不改变原参数定义的参数值,解释为: 这个在函数中不会改变原来定义(函数外部)的值 这是因为函数里面会有一个占的概念,外边的变量的值会复制给 占 里面,

负载均衡集群ipvsadm常见参数以及基本用法

---- 固定调度 rr:论调 wrr:加权论调 weight,加权 sh:source hash ,源地址hash 动态调度lc:最少链接 active*256+inactivewlc:加权最少链接 (active*256+inactive)/weightsed:最短期望延迟 (active+1)*256/weightnq:never queue (永不排队) LBLC:基于本地的最少链接LBLCR:基于本地的带复制功能的最少链接 ----lvs ipvsadm:管理集群服务的命令行工具 管理

如何从H264原始数据SPS里面得到视频的长宽

有这样一种需求,给你一个h264原始数据文件,让你直接播放出来,如何实现? 思路是这样的,H264原始数据格式都是 0x00000001后面跟0x67 0x68 0x65 0x41这样的数据,解码需要一个完整的NAL数据单元,我们需要将每个0x00000001以及下一个0x00000001之前的数据读出来,交给解码器解码. 读文件我就不啰嗦了,本文主要讲解如何从SPS获取视频长宽,SPS即0x67开头数据,读到0x00000001 后一个字节是0x67的后面跟的数据就是SPS了.我们看一个封包里

[ jquery 过滤器 nextUntil([exp|ele][,fil]) ] 此方法用于在选择器的基础之上搜索被选元素的后面的所有同级元素,方法返回 selector 与 stop 之间的每个元素之后的所有同级元素,并且提供第二个参数来用于实现过滤效果,多个参数使用逗号相隔

此方法用于在选择器的基础之上搜索被选元素的后面的所有同级元素,方法返回 selector 与 stop 之间的每个元素之后的所有同级元素,并且提供第二个参数来用于实现过滤效果,多个参数使用逗号相隔,参数解释如下: 概述: 查找当前元素之后所有的同辈元素,直到遇到匹配的那个元素为止. 如果提供的jQuery代表了一组DOM元素,.nextUntil()方法也能让我们找遍所有元素所在的DOM树,直到遇到了一个跟提供的参数匹配的元素的时候才会停下来.这个新jQuery对象里包含了下面所有找到的同辈元素

@requesMapping的可配置参数和标注的处理方法的可选参数

使用@requesMapping标注的处理函数包括的可选参数,除了HttpServletRequest, HttpServletResponse, HttpSession这些web应用中常见的参数及之前提到过的@PathVariable外,还可以包括以下可选的参数,其中大部分参数的顺序没有特殊要求的. java.util.Locale 当前请求所属的区域设置. java.io.InputStream或java.io.Reader 用来读取request content,相当于 request.g

[c language] getopt 其参数optind 及其main(int argc, char **argv) 参数解释

getopt被用来解析命令行选项参数.#include <unistd.h> extern char *optarg; //选项的参数指针extern int optind, //下一次调用getopt的时,从optind存储的位置处重新开始检查选项. extern int opterr, //当opterr=0时,getopt不向stderr输出错误信息.extern int optopt; //当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,该选项存储在optopt