sps sent[103, 66, -64, 12, -85, 64, -96, -3, 8, 0, 0, 3, 0, 8, 0, 0, 3, 0, -9, 2, 0, 8, 61, 0, 4, 30, -74, -79, -80, 60, 80, -86, -128]
;66 Baseline(直播);12 1.2 (CIF and below. 1536000 samples/sec);-85(10110101)色度格式4:4:4;64, -96, -3, 8,
pps sent[40, -50, 60, -128]
一个参数集不对应某一个特定的图像或序列,同一序列参数集可以被多个图像参数集引用,同理,同一个图像参数集也可以被多个图像引用。只在编码器认为需要更新参数集的内容时,才会发出新的参数集。

H.264码流中编码后NALU第一帧是SPS(长度4),第二帧是PPS(长度不固定)。SPS和PPS包含了初始化H.264解码器所需要的信息参数。

SPS(序列参数集):包含的是针对一连续编码视频序列的参数,如标识符seq_parameter_set_id、帧数及POC的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识等。
PPS(图像参数集):对应的是一个序列中某一副图像或者某几幅图像,参数如标识符pic_parameter_set_id、可选的seq_parameter_set_id、熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等。

H.264分层结构由五层组成,分别是序列参数集、图像参数集、片(Slice)、和宏块和子块。参数集是一个独立的数据单位,不依赖于参数集外的其它句法元素。

SPS参数信息(nal_unit_type=7):
第一位:67是sps标识。
第二位:编码等级。
66 Baseline(直播)
77 Main(一般场景,默认的编码等级)
88 Extended
100 High (FRExt)
110 High 10 (FRExt)
122 High 4:2:2 (FRExt)
144 High 4:4:4 (FRExt)
第四位:是每帧最大支持码流范围(level_idc)。标识当前码流的Level,编码的Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定。
10 1 (supports only QCIF format and below with 380160 samples/sec)
11 1.1 (CIF and below. 768000 samples/sec)
12 1.2 (CIF and below. 1536000 samples/sec)
13 1.3 (CIF and below. 3041280 samples/sec)
20 2 (CIF and below. 3041280 samples/sec)
21 2.1 (Supports HHR formats. Enables Interlace support. 5 068 800 samples/sec)
22 2.2 (Supports SD/4CIF formats. Enables Interlace support. 5184000 samples/sec)
30 3 (Supports SD/4CIF formats. Enables Interlace support. 10368000 samples/sec)
31 3.1 (Supports 720p HD format. Enables Interlace support. 27648000 samples/sec)
32 3.2 (Supports SXGA format. Enables Interlace support. 55296000 samples/sec)
40 4 (Supports 2Kx1K format. Enables Interlace support. 62914560 samples/sec)
41 4.1 (Supports 2Kx1K format. Enables Interlace support. 62914560 samples/sec)
42 4.2 (Supports 2Kx1K format. Frame coding only. 125829120 samples/sec)
50 5 (Supports 3672x1536 format. Frame coding only. 150994944 samples/sec)
51 5.1 (Supports 4096x2304 format. Frame coding only. 251658240 samples/sec)

第五位:AC1010 1100,如下图

chroma_format_idc :色彩格式,决定subwidthc和subHeightC,( 0- 3)。当 chroma_format_idc不存在时,应推断其值为 1(4:2:0的色度格式)。0-单色,1-4:2:0,2-4:2:2,3-4:4:4.
bit_depth_luma_minus8 :0 : High 只支持8bit,1 : High10 支持10bit
第六,7,8,9位:D9和41和70和C6,如下图

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

PPS(nal_unit_type=8):
1: pic_parameter_set_rbsp( ) {
2: pic_parameter_set_id 用以指定本参数集的序号,该序号在各片的片头被引用。
2: seq_parameter_set_id 指明本图像参数集所引用的序列参数集的序号。
3: entropy_coding_mode_flag 指明熵编码的选择,本句法元素为0时,表示熵编码使用 CAVLC,本句法元素为1时表示熵编码使用 CABAC
4: pic_order_present_flag POC 的三种计算方法在片层还各需要用一些句法元素作为参数,本句法元素等于1时表示在片头会有句法元素指明这些参数;本句法元素等于0时,表示片头不会给出这些参数,这些参数使用默认值
5:num_slice_groups_minus1 本句法元素加1后指明图像中片组的个数。H.264 中没有专门的句法元素用于指明是否使用片组模式,当本句法元素等于0(即只有一个片组),表示不使用片组模式,后面也不会跟有用于计算片组映射的句法元素。
if( num_slice_groups_minus1 > 0 ) {
6: slice_group_map_type 用以指明片组分割类型。
7: map_units 的定义:
- 当 frame_mbs_only_flag 等于1时,map_units 指的就是宏块
- 当 frame_mbs_only_flag 等于0时
- 帧场自适应模式时,map_units 指的是宏块对
- 场模式时,map_units 指的是宏块
- 帧模式时,map_units 指的是与宏块对相类似的,上下两个连续宏块的组合体。 /

if( slice_group_map_type = = 0 )
for( iGroup = 0; iGroup <= num_slice_groups_minus1; iGroup++ )
8:run_length_minus1[i] 用以指明当片组类型等于0时,每个片组连续的 map_units 个数

else if( slice_group_map_type = = 2 )
for( iGroup = 0; iGroup < num_slice_groups_minus1; iGroup++ ) {
9:top_left[i],bottom_right[i] 用以指明当片组类型等于2时,矩形区域的左上及右下位置。

}
else if( slice_group_map_type = = 3 | |slice_group_map_type = = 4 | |slice_group_map_type = = 5 ) {
10:slice_group_change_direction_flag 与下一个句法元素一起指明确切的片组分割方法。
11:slice_group_change_rate_minus1 用以指明变量 SliceGroupChangeRAte
} else if( slice_group_map_type = = 6 ) {
12: pic_size_in_map_units_minus1 在片组类型等于6时,用以指明图像以 map_units 为单位的大小。
for( i = 0; i <= pic_size_in_map_units_minus1; i++ )
13: slice_group_id[i] 在片组类型等于6时,用以指明某个 map_units 属于哪个片组。
}
}
14: num_ref_idx_l0_active_minus1 加1后指明目前参考帧队列的长度,即有多少个参考帧(包括短期和长期)。值得注意的是,当目前解码图像是场模式下,参考帧队列的长度应该是本句法元素再乘以2,因为场模式下各帧必须被分解以场对形式存在。(这里所说的场模式包括图像的场及帧场自适应下的处于场模式的宏块对) 本句法元素的值有可能在片头被重载。
15: 在序列参数集中有句法元素 num_ref_frames 也是跟参考帧队列有关,它们的区别是num_ref_frames指明参考帧队列的最大值,解码 器用它的值来分配内存空 间;num_ref_idx_l0_active_minus1 指明在这个队列中当前实际的、已存在的参考帧数目,这从它的名字“active”中也可以看出来。图像时,并不是直接传送该图像的编号,而是传送该图像在参考帧队列中的序号。这个序号并不是在码流中传送的,这个句法元素是 H.264 中最重要的句法元素之一,编码器要通知解码器某个运动矢量所指向的是哪个参考而是编码器和解码器同步地、用相同的方法将参考图像放入队列,从而获得一个序号。这个队列在每解一个图像,甚至是每个片后都会动态地更新。维护参考帧队列是编解码器十分重要的工作,而本句法元素是维护参考帧队列的重要依据。参考帧队列的复杂的维护机制是 H.264 重要也是很有特色的组成部分
16: num_ref_idx_l1_active_minus1
17: weighted_pred_flag 用以指明是否允许P和SP片的加权预测,如果允许,在片头会出现用以计算加权预测的句法元素。
18: weighted_bipred_flag 用以指明是否允许 B 片的加权预测,本句法元素等于 0 时表示使用默认加权预测模式,等于 1 时表示使用显式加权预测模式,等于 2 时表示使用隐式加权预测模式。
19: weighted_bipred_idc
20: pic_init_qp_minus26 加 26 后用以指明亮度分量的量化参数的初始值。在 H.264 中,量化参数分三个级别给出:图像参数集、片头、宏块。在图像参数集给出的是一个初始值。 / relative to 26 /
21: pic_init_qs_minus26 / relative to 26 */
22: chroma_qp_index_offset 色度分量的量化参数是根据亮度分量的量化参数计算出来的,本句法元素用以指明计算时用到的参数。
23: deblocking_filter_control_present_flag 编码器可以通过句法元素显式地控制去块滤波的强度,本句法元素指明是在片头是否会有句法元素传递这个控制信息。如果本句法元素等于 0,那些用于传递滤波强度的句法元素不会出现,解码器将独立地计算出滤波强度。
24:constrained_intra_pred_flag 在 P 和 B 片中,帧内编码的宏块的邻近宏块可能是采用的帧间编码。当本句法元素等于 1 时,表示帧内编码的宏块不能用帧间编码的宏块的像素作为自己的预测,即帧内编码的宏块只能用邻近帧内编码的宏块的像素作为自己的预测;而本句法元素等于 0 时,表示不存在这种限制。
25: redundant_pic_cnt_present_flag 指明是否会出现 redundant_pic_cnt 句法元素。
rbsp_trailing_bits( )
}

这里是引用
雷霄骅老师的H.264分析器文章URL:blog.csdn.net/leixiaohua1020/article/details/17933821
PPS和SPS结构参数说明URL:http://blog.csdn.net/heanyu/article/details/6191576
CSDN博主「奔跑的哇牛」:>https://blog.csdn.net/h514434485/java/article/details/51063069https://blog.csdn.net/xiaozhiit/article/details/107095351?spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-11-107095351-blog-107345495.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-11-107095351-blog-107345495.pc_relevant_default
https://blog.csdn.net/sunlifeall/article/details/118070055

视频-sps,pps相关推荐

  1. H.264视频中SPS/PPS缺失时实现补帧

    问题说明 有些视频文件中, 关键帧的SPS/PPS缺失, 导致播放时解码失败. 比如某些mp4视频, 第一个关键帧有SPS/PPS, 其后所有关键帧都没有SPS/PPS, 播放该mp4文件本身是没问题 ...

  2. 视频【编码】原理(H.264 librtmp推流),图像编码中sps ,pps ,nalu ,frame ,silce ect

    视频编码格式:H264, VC-1, MPEG-2, MPEG4-ASP (Divx/Xvid), VP8, MJPEG 等.  音频编码格式:AAC, AC3, DTS(-HD), TrueHD, ...

  3. 【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 封装 SPS / PPS 数据包 )

    文章目录 一. 基本封装数据格式说明 二. 封装 SPS PPS 数据总体说明 三. 封装头数据 四. 封装 SPS 数据 五. 封装 PPS 数据 六. 设置 RTMP 数据包其它参数 七. SPS ...

  4. 【Android RTMP】x264 编码器初始化及设置 ( 获取 x264 编码参数 | 编码规格 | 码率 | 帧率 | B帧个数 | 关键帧间隔 | 关键帧解码数据 SPS PPS )

    文章目录 安卓直播推流专栏博客总结 一. x264 编码器参数设置引入 二. 获取 x264 编码器参数 三. 设置 x264 编码器编码规格 四. 设置 x264 编码器编码图像数据格式 五. 设置 ...

  5. H264帧的分析sps pps

    帧格式 H264帧由NALU头和NALU主体组成. NALU头由一个字节组成,它的语法如下: +---------------+       |0|1|2|3|4|5|6|7|       +-+-+ ...

  6. H264--NALU/SPS/PPS

    H264结构中,一个视频图像编码后的数据叫做一帧,一帧由一个片(slice)或多个片组成,一个片由一个或多个宏块(MB)组成. H264编码过程中的三种不同的数据形式: SODB        数据比 ...

  7. 给h264帧增加start code和sps/pps

    从音视频文件中读取数据,抽取其中的h264视频数据,并保存在文件中,如果想要此文件被播放器正常解码播放,还需要添加在每个帧之前添加start code,在每个关键帧前添加sps/pps. 播放器需要知 ...

  8. srs报错:demux SPS/PPS : avc decode sequence header

    srs报错如下: [31m[2021-10-23 17:43:55.682][Error][31374][5ns94367][4] serve error code=3001 : service cy ...

  9. EasyPusher手机直播之SPS/PPS、关键帧的判断

    最近遇到使用EasyPusher推送视频的时候发现播放的时候只有声音没有画面,这个很奇怪,刚开始以为是手机不兼容的原因,后来在同一部手机上也出现了这种情况,然后就思考了变量在哪儿导致的问题,我修改了分 ...

最新文章

  1. Web应用主动侦测工具Skipfish
  2. vue一二级联动清空二级数据_【周一实用技巧】二级联动还不够,自动更新才最牛。Excel 2013利用数据验证条件制作一级、二级联动和自动更新下拉列表...
  3. Android性能优化系列总篇
  4. JAVA_OA(bug篇)(一):SpringMVC的bug1
  5. iis服务器建立动态网站,09-IIS添加动态网站
  6. linux给文件赋权限找不到,linux 文件赋权限
  7. 论文浅尝 - WWW2020 | 生成多跳推理问题以改善机器阅读理解能力
  8. o型圈沟槽设计软件_265 电机壳体上轴承室和轴承外圈增加的O型圈工艺对轴承外圈(防蠕动)作用有多大?...
  9. kylin cube 增量和全量
  10. SOA与云计算有多大关联?
  11. 英雄联盟大区测试稳定软件,英雄联盟官方公布新界面,部分大区展开测试,你最希望改什么?...
  12. SSIM和PSNR计算
  13. 电路仿真软件详谈(九),proteus电路仿真软件及版本问题
  14. linux 内存清理/释放命令
  15. 计算机结构体系:循环展开题型 (非凭感觉的方法详解)
  16. RDD简介,spark-shell,spark-submit提交任务简单示例
  17. fMRI脑影像特征提取——静息态与任务态,ALFF/fALFF和ReHo(Dpabi,Rest1.8)
  18. 既生Mahout,何生Spark MLlib ?
  19. 继绿联、洛克之后,紫米也被举报涉嫌虚假宣传
  20. 数据分析处理(九)之口红

热门文章

  1. 网站降权的特征和原因有哪些呢?
  2. bnu1257 全能的福娃 C语言版
  3. empty() received an invalid combination of arguments - got (tuple, dtype=NoneType, device=NoneType),
  4. 2012智能手机发展格局解析
  5. 第三方服务器Bmob实现数据存储
  6. php 许愿墙 阶段案例_许愿墙代码
  7. 【ML】主成分分析 PCA(Principal Component Analysis)原理 + 实践 (基于sklearn)
  8. java青蛙过河打字_怎么写出英语单词的游戏 类似金山打字通里的激流勇进(青蛙过河...
  9. Linux网络编程入门
  10. 使用ggplot2画 点图、箱线图、小提琴图、蜂窝图、云雨图