音视频相关记录总结

1.DTS和PTS在使用I P P P没有B帧的情况下,两个时间戳是一样的。如果有B帧的情况就不一样。

因为B帧需要参考前后帧,因此在B帧编码的时候,需要先编码前后帧后再编码B帧,编码顺序:I->P->B,那么解码顺序也是I->P->B,但是显示顺序是I->B->P

  DTS:标记帧的解码时间(解码器按DTS顺序处理帧)。

  PTS:标记帧的显示时间(播放器按PTS顺序输出帧)

 

2.NALU header

+---------------+
|F|NRI|  Type   |
+---------------+
 1  2    5 (bits)

1.F (forbidden_zero_bit,1 bit)

  • 必须为 0

  • 如果为 1,说明该 NAL 单元有错误或被丢弃(接收端可忽略或丢弃该 NALU)。

 

2.NRI(nal_ref_idc,2 bit)

表示该 NALU 的参考级别(Reference IDC)。

数值越高,重要性越高。

  • 00:该 NALU 不用于参考(如 B 帧、SEI)。

  • 01:低优先级参考帧。

  • 10:中优先级参考帧。

  • 11:最高优先级参考帧(如 I 帧的 slice)。

 

3.type(nal_unit_type,5 bit)

| type值     | 含义                                              |
| --------- | ----------------------------------------------- |
| 1         | 非 IDR 图像的 slice                                 |
| 5         | IDR 图像的 slice(关键帧)                              |
| 6         | SEI (Supplemental Enhancement Information) 扩展信息 |
| 7         | SPS (Sequence Parameter Set,序列参数集)              |
| 8         | PPS (Picture Parameter Set,图像参数集)               |
| 9         | AUD (Access Unit Delimiter,访问单元分隔符)             |
| 10-23     | 保留给扩展                                           |
| 24-27     | 分片/聚合用(STAP-A, STAP-B, MTAP16, MTAP24)          |
| 28        | FU-A(分片单元,用于 RTP)                               |
| 29        | FU-B(分片单元,用于 RTP)                               |
| 0, 30, 31 | 保留/未定义                                          |

 

3.怎么区分I P B帧

  在 H.264 中,NALU header 里的 Type 字段只能告诉你这是一个 slice(片)还是 SPS/PPS/SEI 等,但它不能直接区分 I / P / B 帧
  要区分 I、P、B 帧,需要进一步看 slice header

NALU header → 确认是不是 slice

  • nal_unit_type = 1 → 非 IDR 图像的 slice(可能是 P、B 或非 IDR 的 I slice)。

  • nal_unit_type = 5 → IDR 图像的 slice(关键帧 I)。

slice header → 确认 slice_type

  • 0 / 5 → P slice

  • 1 / 6 → B slice

  • 2 / 7 → I slice

  • 3 / 8 → SP slice(少用)

  • 4 / 9 → SI slice(少用)

4.SEI SPS PPS

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

  • 作用:描述“视频序列”的全局参数(对一组帧都适用)。

  • 包含内容

    • profile/level(解码能力要求)

    • 图像分辨率(宽/高)

    • 帧率相关(时间戳、时序信息)

    • 参考帧数量上限

    • POC(显示顺序控制)模式

  • 影响范围:一个视频流里 长期不变 的参数。

  • 类比:相当于一本书的“目录页”,告诉解码器:这本书有几章,纸张大小是多少。

 

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

  • 作用:描述“某个图像(或一组图像)”的编码参数。

  • 包含内容

    • 熵编码方式(CAVLC / CABAC)

    • 去块滤波参数

    • 参考帧列表设置

    • slice QP 偏移量

  • 影响范围:比 SPS 更细粒度,可以对不同帧应用不同 PPS。

  • 类比:相当于“章节的具体说明”,比如某一章要用不同的纸张、不同的行距。

 

3. SEI(Supplemental Enhancement Information,补充增强信息)

  • 作用:附加信息,不影响解码正确性,但用于增强体验或同步。

  • 常见类型

    • 时间戳(PTS/DTS)

    • 色彩空间信息

    • HDR 相关信息

    • 用户数据(如字幕、metadata)

  • 影响范围:可选,不解码 SEI 也能正常播放视频。

  • 类比:相当于“脚注或附录”,看不看无所谓,但有时能帮你更好理解内容。

 4. 三者关系

  • SPS:全局层次(视频序列级,像“环境设定”)。

  • PPS:局部层次(图像/帧级,像“局部说明”)。

  • SEI:辅助层次(附加信息,不解码也能播)。

 在实际传输中:

  • 解码器 必须要有 SPS 和 PPS 才能正确解码视频。

  • SEI 可有可无,用于增强(比如流媒体里常用 SEI 来携带时间戳、同步信息)。

 

出场顺序:

[起始部分] 
  ↓
AUD (可选,Access Unit Delimiter,访问单元分隔符)
SPS (序列参数集)
PPS (图像参数集)
SEI (补充信息,可选)
I slice (IDR 图像 slice)
P/B slice (后续帧)
...
[重复] 
  PPS (可能重复发送)
  SEI (可能插入)
  slice 数据

 

SPS/PPS:

初次出现:视频流开始时,必须给解码器一个“说明书”。

再次出现的情况

关键帧(IDR)之前

  • 为了提高解码器兼容性,通常在每个 IDR 帧之前,编码器会重新发一份 SPS/PPS。

  • 这样即使中途加入解码,也能正确解码,不用依赖很久以前的参数。

参数发生变化时

  • 例如分辨率、帧率、色彩格式、参考帧配置等发生变化 → 新的 SPS 或 PPS 必须被发送。

周期性冗余发送

  • 在流媒体/弱网络场景(RTSP、RTP、HLS、DASH),有些编码器会每隔 N 秒或每个 IDR 前都重复发 SPS/PPS,避免丢包造成解码失败。

SEI:

初次出现:通常紧跟在 SPS/PPS 后,用于传递时间戳、HDR、字幕等信息。

再次出现的情况

每个关键帧前

  • 常见于传递时间戳(Picture Timing SEI)、缓冲区控制(Buffering SEI)。

有新的元信息时

  • 比如 HDR 元数据更新、切换字幕轨、用户数据插入。

直播/同步场景

  • 有些直播推流(RTMP、HLS)会在每一帧前都加一个 SEI(携带时间戳信息),方便播放器对齐音视频。

 

  • H.264 标准里没有规定 SPS、PPS、SEI 后面必须是 I 帧(IDR)

  • 它们的作用是 为解码器提供参数/附加信息,并不强制决定后面是哪种帧。

  • 视频流开头(第一次出现 SPS/PPS/SEI)

    • 几乎所有编码器都会安排 IDR 帧(关键帧) 紧随其后。

    • 原因:解码器刚拿到参数,就必须用一个“完整自解码的帧”开始,否则没有参考帧解不出来。

    • 所以在流的开头,SPS+PPS+SEI 后面一般跟着 I 帧(IDR)。

  • 视频流中途(再次出现 SPS/PPS/SEI)

    • 常见情况:在每个 IDR 帧之前重复发送 SPS/PPS(提升容错和解码同步能力),所以很多时候你会看到 SPS/PPS/SEI → I 帧

    • 特殊情况:如果只是编码参数变化(如 SEI 插入 HDR 信息、用户数据),也可能出现在 P/B 帧前,不一定非得是 I 帧。

  • 容错/冗余插入

    • 某些推流器会周期性插入 SPS/PPS,即便当前不是 IDR 帧。解码器只会更新内部参数,并不会强制重置参考。

    • 所以这种情况下可能出现:

      ... P 帧
      SPS
      PPS
      SEI
      P 帧
      B 帧
      ...

       

 

posted @ 2025-09-18 11:13  一个不知道干嘛的小萌新  阅读(12)  评论(0)    收藏  举报