5.8. Fragmentation Units (FUs) (分片单元)
5.8. Fragmentation Units (FUs) (分片单元)
本负载类型允许将 NAL 单元分片到多个 RTP 包。在应用层分片而非依赖下层分片 (例如 IP) 的优点包括:
- 负载格式能够在 IPv4 网络上传输大于 64 kbyte 的 NAL 单元, 预录高清等场景可能出现 (每图像片数有上限, 从而每图像 NAL 单元数有上限, 可能导致很大的 NAL 单元)。
- 分片机制允许对单个 NAL 单元分片并应用第 12.5 节所述的通用前向纠错 (Forward Error Correction, FEC)。
分片仅针对单个 NAL 单元定义, 不适用于聚合包。NAL 单元的分片由该 NAL 单元的连续若干八位组组成。NAL 单元的每个八位组必须 (MUST) 属于且仅属于该 NAL 单元的一个分片。同一 NAL 单元的各分片必须 (MUST) 按 RTP 序号递增的连续顺序发送 (首末分片之间同一 RTP 包流中不得插入其他 RTP 包)。同样, 重组 NAL 单元必须 (MUST) 按 RTP 序号顺序。
NAL 单元经分片并在分片单元 (FU) 中传送时称为分片 NAL 单元。STAP 与 MTAP 必须 (MUST NOT) 被分片。FU 必须 (MUST NOT) 嵌套, 即 FU 内不得再含 FU。
承载 FU 的 RTP 包的 RTP 时间戳设为被分片 NAL 单元的 NALU-time。
图 14 给出 FU-A 的 RTP 负载格式。FU-A 由一字节 FU 指示符, 一字节 FU 头与 FU 负载组成。
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
图 14. FU-A 的 RTP 负载格式
图 15 给出 FU-B。FU-B 由一字节 FU 指示符, 一字节 FU 头, DON (网络字节序) 与 FU 负载组成。即除额外 DON 字段外与 FU-A 结构相同。
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
图 15. FU-B 的 RTP 负载格式
在交错分包模式下, 分片 NAL 单元的第一个分片单元必须 (MUST) 使用 NAL 单元类型 FU-B。FU-B 必须 (MUST NOT) 用于其他任何情况。换言之, 交错模式下每个被分片的 NAL 单元以 FU-B 为首片, 后接若干 FU-A。
FU 指示符八位组格式如下:
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI| Type |
+---------------+
FU 指示符八位组类型字段值为 28 与 29 分别标识 FU-A 与 FU-B。F 位的使用见第 5.3 节。NRI 字段必须 (MUST) 与被分片 NAL 单元中 NRI 字段取值一致。
FU 头格式如下:
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|S|E|R| Type |
+---------------+
S: 1 比特
置 1 时起始位 (Start) 表示分片 NAL 单元的开始。后续 FU 负载若非分片 NAL 单元负载起始, 则 S 清零。
E: 1 比特
置 1 时结束位 (End) 表示分片 NAL 单元结束, 即负载最后一字节亦为该分片 NAL 单元的最后一字节。后续 FU 负载若非最后一片, 则 E 清零。
R: 1 比特
保留位必须 (MUST) 为 0, 接收端必须 (MUST) 忽略。
Type: 5 比特
[1] 表 7-1 所定义的 NAL 单元负载类型。
FU-B 中 DON 的取值按第 5.5 节选择。
说明性注: FU-B 中的 DON 使网关可将 NAL 单元分片为 FU-B 而无需先将入向 NAL 单元整理为解码顺序。
分片 NAL 单元必须 (MUST NOT) 在一个 FU 内完整发送, 即同一 FU 头中 S 与 E 必须 (MUST NOT) 同时为 1。
FU 负载为被分片 NAL 单元负载的片段, 将连续 FU 的 FU 负载顺序拼接可重构该 NAL 单元负载。被分片 NAL 单元的 NAL 单元类型八位组本身不放入 FU 负载, 其信息由 FU 指示符的 F 与 NRI 字段及 FU 头的类型字段传达。FU 负载可以 (MAY) 含任意多个八位组, 也可以 (MAY) 为空。
说明性注: 允许空 FU 是为了在近乎无损环境下降低某类发送端的时延。这类发送端在 NAL 单元完全生成 (从而大小已知) 之前就开始分包。若不允许零长度 NAL 片段, 发送端须至少产生下一片的一比特数据后才能发送当前片。H.264 中有时多个宏块占零比特, 故不允许零长度会增加时延。但 (潜在) 使用零长度 NAL 片段须与因额外包而增加至少部分 NAL 单元丢失风险相权衡。
若某分片丢失, 接收端应该 (SHOULD) 丢弃传输顺序上属于同一分片 NAL 单元的所有后续分片。
端点或 MANE 中的接收端可以 (MAY) 将某 NAL 单元的前 n-1 个分片聚合成 (不完整) NAL 单元, 即使第 n 个分片未收到。此时该 NAL 单元的 forbidden_zero_bit 必须 (MUST) 置 1 以表示语法违规。