【音视频】RTP封包H264信息

H264-RTP封包逻辑

单个NALU

结构分析

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |F|NRI|  Type   |                                               |
    +-+-+-+-+-+-+-+-+                                               |
    |                                                               |
    |               Bytes 2..n of a single NAL unit                 |
    |                                                               |
    |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                               :...OPTIONAL RTP padding        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    Figure 2.  RTP payload format for single NAL unit packet

第一个字节 

  • RTP负载的第一个字节
    • 这个字节 既是 RTP 负载头,又是 NAL 单元头。 在单个 NAL 单元包的上下文中,它们是合二为一的(这三个字段是由高位到地位)
    • F (Forbidden zero bit, 1 bit): 禁止位。在 H.264 标准中,这个位 必须为 0。如果解码器遇到 F 位为 1 的 NAL 单元,应该将其视为语法错误。 在 RTP 封装中,这个位从原始 NAL 单元的 F 位直接复制过来
    • NRI (NAL Ref ID, 2 bits): NAL 单元参考 ID (NAL unit_ref_idc)。 指示 NAL 单元的 重要性,用于解码过程中的参考帧管理。 
      • NRI 为 0 表示该 NAL 单元是 非参考帧,可以被丢弃而不影响后续帧的解码质量 (当然,画面质量会下降)。
      •  NRI 大于 0 表示该 NAL 单元是 参考帧,对于解码后续帧非常重要,不能随意丢弃。
      •  NRI 的值从原始 NAL 单元的 NRI 位直接复制过来
    • Type (NAL unit type, 5 bits): NAL 单元类型 (nal_unit_type)
      • 类型 1-5: VCL (Video Coding Layer) NAL 单元,包含实际的视频编码数据 (例如 Slice, IDR Slice 等)
      • 类型 6: SEI (Supplemental Enhancement Information) NAL 单元,包含补充增强信息,例如图像定时信息、显示信息等
      • 类型 7: SPS (Sequence Parameter Set) NAL 单元,序列参数集,包含序列级别的参数,例如profile, level, 图像尺寸等
      • 类型 8: PPS (Picture Parameter Set) NAL 单元,图像参数集,包含图像级别的参数,例如slice groups, slice order 等
      • 类型 9: AUD (Access Unit Delimiter) NAL 单元,访问单元分隔符,用于指示一个新的访问单元 (通常对应一帧图像) 的开
      • 类型13: SPS subset (序列参数集子集)

总结: RTP 负载的第一个字节,通过 F, NRI, Type 这三个字段,完整地携带了 NAL 单元的关键头部信息。 你可以把它想象成 NAL 单元的 "身份证",包含了它的基本属性 (是否重要、类型是什么)

中间部分Nalu

 Nalu中的数据部分

  • 这部分包含了 NAL 单元的剩余字节,也就是 NAL 单元的负载数据 (NAL unit payload data)
    •  如果 NAL 单元只有一个字节 (只有头部),那么这部分就为空
    • 对于包含视频编码数据的 VCL NAL 单元,这部分会包含压缩后的视频数据
    • 对于 SPS, PPS, SEI 等参数集或补充信息 NAL 单元,这部分会包含相应的参数或信息数据

最后一行

  •  NAL 单元数据之后,是 可选的 RTP 填充 (padding)
  • RTP padding 的目的是为了 满足某些 RTP 应用或底层传输协议对 RTP 包长度的要求
  • 总结:这部分是 RTP 包的 "化妆",为了满足一些特殊需求而添加的填充数据,对于 NAL 单元本身的内容没有影响

聚合包

将 多个小的 NAL 单元 打包到一个 RTP 包的负载中, 共享同一个 RTP 头部。 这样可以减少 RTP 包头的数量,提高传输效率,尤其是在 MTU 较小的网络环境下

存在原因

  • MTU 差异问题: 文档指出,两种典型的目标网络有显著的 MTU 差异
    • 有线 IP 网络: 例如以太网,MTU 通常较大,约为 1500 字节
    • 无线通信系统:一般是254字节或者更小
  • 媒体转码和开销
    • 如果只使用 "单个 NAL 单元包" 这种简单的方式,在 MTU 较小的无线网络中,每个 RTP 包只能包含一个 NAL 单元,导致 RTP 头部开销占比过高,传输效率低下

主要类型和规则

单时间聚合包 (Single-Time Aggregation Packet, STAP)

  • 聚合具有相同 NALU-time 的 NAL 单元。 这意味着 STAP 中聚合的 NAL 单元应该在 同一个时间点 被解码或呈现
  • 主要有两种STAP类型
    • STAP-A: 不包含 DON 相关字段。适用于不需要考虑解码顺序的应用场景
    • STAP-B: 包含 DON 相关字段 (DON, DONB, DOND)。适用于需要处理解码顺序的应用场景

多时间聚合包 (Multi-Time Aggregation Packet, MTAP)

  • 聚合 NALU-time 可能不同的 NAL 单元。 这意味着 MTAP 中聚合的 NAL 单元可能属于 不同的时间点
  • 定义了两种 MTAP 子类型,区别在于 NAL 单元时间戳偏移量 (timestamp offset) 的长度
    • MTAP16: 使用 16 位的 timestamp offset 字段
    • MTAP24: 使用 24 位的 timestamp offset 字段。 选择 16 位还是 24 位取决于时间戳偏移量的范围需求

RTP结构分析

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |F|NRI|  Type   |                                               |
    +-+-+-+-+-+-+-+-+                                               |
    |                                                               |
    |             one or more aggregation units                     |
    |                                                               |
    |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                               :...OPTIONAL RTP padding        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    Figure 3.  RTP payload format for aggregation packets

详细分析

  • 第一行F NRI Type分析
    •  RTP 负载的 第一个字节 (Byte 1)
    • 聚合包头: 与单个 NAL 单元包类似,聚合包的第一个字节也充当了 聚合包的头部,包含了 F, NRI, Type 字段
    • Type 字段: 关键! 对于聚合包,Type 字段的值 不再是原始 NAL 单元的类型,而是 聚合包类型 的指示
      • 因此,看到 RTP 负载的第一个字节的 Type 字段值为 24, 25, 26 或 27,就表示这是一个聚合包,而不是单个 NAL 单元包或分片单元包
Table 4.  Type field for STAPs and MTAPs

  Type   Packet    Timestamp offset   DON-related fields
                   field length       (DON, DONB, DOND)
                   (in bits)          present
  --------------------------------------------------------
  24     STAP-A       0                 no
  25     STAP-B       0                 yes
  26     MTAP16      16                 yes
  27     MTAP24      24                 yes

聚合结构分析

单时间聚合包(STAP)
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                   :        NAL unit size          |               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               |
   |                                                               |
   |                           NAL unit                            |
   |                                                               |
   |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                               :
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Figure 6.  Structure for single-time aggregation unit
  •  NAL unit size: 每个聚合单元都以一个 16 位的无符号整数 NAL unit size 开始,同样以 网络字节序 存储。 这个字段指示了 紧随其后的 NAL 单元的大小 (字节数)
  • NAL unit: NAL unit size 字段之后,就是 实际的 NAL 单元数据,包括它的 NAL 单元头 和 NAL 单元数据部分
  • 字节对齐: single-time aggregation unit 在 RTP payload 中是 字节对齐 的,这意味着它的起始位置是字节边界

STAP 的核心思想是聚合。在视频编码和传输中,我们通常会将视频数据分割成更小的单元,称为 NAL 单元 (Network Abstraction Layer Units)。 在某些情况下,可能会有多个 NAL 单元具有相同的 NALU-time (NAL 单元时间戳,可以理解为它们属于同一个时间点的视频帧或切片)。 STAP 的目的就是将这些具有相同 NALU-time 的 NAL 单元 打包 成一个 RTP包进行传输,从而提高传输效率,减少 RTP 包头的开销

存在原因

在视频传输中,每个 RTP 包都有自己的头部信息(RTP Header)。如果每个 NAL 单元都单独封装成一个 RTP 包,那么头部开销就会比较大,尤其是在传输大量小 NAL 单元时。 STAP 通过将多个 NAL 单元聚合到一个 RTP 包中,共享同一个 RTP 包头,从而有效地减少了头部开销,提高了带宽利用率

类型一:STAP-A

 该类型不包含DON,结构也更简单,主要用于解码顺序不重要或者解码顺序可以通过其他机制保证的情况。简单来说就是将多个具有相同的NALU_time的NALU拼接在一起

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                   :                                               |
   +-+-+-+-+-+-+-+-+                                               |
   |                                                               |
   |                single-time aggregation units                  |
   |                                                               |
   |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                               :
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Figure 4.  Payload format for STAP-A

类型二:STAP-B

其中包含16位DON,结构较为复杂,比较适用于解码顺序很重要的情况,例如需要处理丢包或者乱序到达的情况

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                   :  decoding order number (DON)  |               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               |
   |                                                               |
   |                single-time aggregation units                  |
   |                                                               |
   |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                               :
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Figure 5.  Payload format for STAP-B
  • DON的作用和递增规则
    • DON 字段指定了 STAP-B 中 第一个 NAL 单元的解码顺序号
    • 具体方法:对于 STAP-B 中 后续 的 NAL 单元(按照它们在 STAP-B 中出现的顺序),它们的 DON 值是 前一个 NAL 单元的 DON 值加 1,然后对 65536 取模

STAR-A的RTP包

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          RTP Header                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |STAP-A NAL HDR |         NALU 1 Size           | NALU 1 HDR    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         NALU 1 Data                           |
   :                                                               :
   +               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               | NALU 2 Size                   | NALU 2 HDR    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         NALU 2 Data                           |
   :                                                               :
   |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                               :...OPTIONAL RTP padding        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Figure 7.  An example of an RTP packet including an STAP-A
               containing two single-time aggregation units

STAR-B的RTP包

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          RTP Header                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |STAP-B NAL HDR | DON                           | NALU 1 Size   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | NALU 1 Size   | NALU 1 HDR    | NALU 1 Data                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
   :                                                               :
   +               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               | NALU 2 Size                   | NALU 2 HDR    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       NALU 2 Data                             |
   :                                                               :
   |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                               :...OPTIONAL RTP padding        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Figure 8.  An example of an RTP packet including an STAP-B
               containing two single-time aggregation units
多时间聚合包(MTAP)

与单时间聚合包不同的是其可以将NALU_time不同的NALU聚集到一个RTP包中

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                    :  decoding order number base   |               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               |
    |                                                               |
    |                 multi-time aggregation units                  |
    |                                                               |
    |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                               :
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    Figure 9.  NAL unit payload format for MTAPs

    类型一:MTAP16

         0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        :        NAL unit size          |      DOND     |  TS offset    |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |  TS offset    |                                               |
        +-+-+-+-+-+-+-+-+              NAL unit                         |
        |                                                               |
        |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                               :
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    
        Figure 10.  Multi-time aggregation unit for MTAP16
    • NAL unit size: 16 位无符号整数,网络字节序,表示 紧随其后的 NAL 单元的大小 (不包括 size 字段本身,但包括 NAL 单元类型字节)
    • NOND:参考单时间聚合包中的笔记内容
    • TS offset:16位时间戳偏移量,网络字节序。TS offset 表示当前 NAL 单元的 NALU-time 与 MTAP RTP 包的 RTP timestamp 之间的偏移量
    • Nalu
         0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                          RTP Header                           |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |MTAP16 NAL HDR |  decoding order number base   | NALU 1 Size   |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |  NALU 1 Size  |  NALU 1 DOND  |       NALU 1 TS offset        |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |  NALU 1 HDR   |  NALU 1 DATA                                  |
        +-+-+-+-+-+-+-+-+                                               +
        :                                                               :
        +               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |               | NALU 2 SIZE                   |  NALU 2 DOND  |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |       NALU 2 TS offset        |  NALU 2 HDR   |  NALU 2 DATA  |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               |
        :                                                               :
        |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                               :...OPTIONAL RTP padding        |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    
        Figure 12.  An RTP packet including a multi-time aggregation
                    packet of type MTAP16 containing two multi-time
                    aggregation units

    类型二:MTAP24

         0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        :        NAL unit size         |      DOND     |  TS offset    |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |         TS offset             |                               |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
        |                              NAL unit                         |
        |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                               :
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    
        Figure 11.  Multi-time aggregation unit for MTAP24
    • NAL unit size: 与 MTAP16 相同,16 位 NAL 单元大小
    • DOND: 与 MTAP16 相同,8 位 DOND
    • TS offset: 24 位 时间戳偏移量,网络字节序
         0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                          RTP Header                           |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |MTAP24 NAL HDR |  decoding order number base   | NALU 1 Size   |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |  NALU 1 Size  |  NALU 1 DOND  |       NALU 1 TS offs          |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |NALU 1 TS offs |  NALU 1 HDR   |  NALU 1 DATA                  |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
        :                                                               :
        +               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |               | NALU 2 SIZE                   |  NALU 2 DOND  |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |       NALU 2 TS offset                        |  NALU 2 HDR   |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |  NALU 2 DATA                                                  |
        :                                                               :
        |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                               :...OPTIONAL RTP padding        |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    
        Figure 13.  An RTP packet including a multi-time aggregation
                    packet of type MTAP24 containing two multi-time
                    aggregation units

    分片传输

    了解

    当单个Nalu大小超过MTU限制的时候,无法在一个RTP包转给你传输,那么就会对NALU分割成多段进行处理,然后将每个片段封装成RTP包中,从而实现对大型Nalu进行可靠传输

    分片基本规则了解

    • 单个 NAL 单元分片: FU 机制 只用于分片单个 NAL 单元。 聚合包 (STAP, MTAP) 不能被分片
    • 连续的字节片段: 每个分片 (FU payload) 必须包含 原始 NAL 单元的连续字节
    • 完整覆盖: 原始 NAL 单元的 每个字节必须且仅能属于一个分片
    • 顺序传输: 同一 NAL 单元的所有分片必须按照 RTP 序列号升序的顺序连续发送。 在同一个 RTP 流中,在同一 NAL 单元的首个分片和最后一个分片之间,不能发送属于其他 NAL 单元的 RTP 包
    • 顺序重组: 接收端必须 按照 RTP 序列号的顺序重组分片,才能还原出原始的 NAL 单元
    • 禁止嵌套 FU: FU 不能嵌套使用,即一个 FU 的 payload 中不能包含另一个 FU
    • RTP 时间戳: 携带 FU 的 RTP 包的时间戳 (RTP timestamp) 必须设置为被分片的 NAL 单元的 NALU-time

    FU-A

    不包含DON,结构简单

         0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        | FU indicator  |   FU header   |                               |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
        |                                                               |
        |                         FU payload                            |
        |                                                               |
        |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                               :...OPTIONAL RTP padding        |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    
        Figure 14.  RTP payload format for FU-A

    FU-B

    包含DON,结构较为复杂

         0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        | FU indicator  |   FU header   |               DON             |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
        |                                                               |
        |                         FU payload                            |
        |                                                               |
        |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                               :...OPTIONAL RTP padding        |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    
        Figure 15.  RTP payload format for FU-B

    FU的注意事项总结

    • FU 不能用于聚合包 (STAP, MTAP): 只能分片原始的 NAL 单元
    • FU-B 的特殊用途: FU-B 主要用于 interleaved packetization mode 的首个分片
    • 顺序传输和重组是关键: 必须保证分片的顺序性和完整性
    • 丢包影响: 丢失一个分片通常会导致整个分片 NAL 单元的丢失

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值