跳到主要内容

4. 重传载荷格式 (Retransmission Payload Format)

重传分组的格式如下所示:

 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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OSN | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| Original RTP Packet Payload |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

RTP 首部的用法如下:

在会话复用情况下, 原始流与重传流 MUST 使用相同的 SSRC 值. 若在原始会话或重传会话中发生 SSRC 冲突, RTP 规范要求在发生冲突的会话中发送 RTCP BYE 分组. 此外, MUST 在关联流所在会话中也发送 RTCP BYE 分组. 获得新的 SSRC 标识符后, 两个流的 SSRC MUST 均设为该值.

在 SSRC 复用情况下, 按 RTP 要求, 原始流与重传流 MUST 使用两个不同的 SSRC 值. 若检测到原始流或重传流发生 SSRC 冲突, RTP 规范要求为该流发送 RTCP BYE 分组. MUST NOT 为关联流发送 RTCP BYE 分组. 因此, 只有经历 SSRC 冲突的流 MUST 选择新的 SSRC 值. 接收端对原始流与重传流 SSRC 关联的影响见第 5.3 节.

对任一复用方案, 序列号具有标准含义; 即, MUST 比重传流中前一发送分组的序列号大一.

重传分组的 RTP 时间戳 MUST 设为原始时间戳, 即原始分组的时间戳. 因此, 重传流第一个分组的初始 RTP 时间戳不是随机的, 而是等于首个被重传分组的原始时间戳. 安全影响见本文档的安全考虑一节.

实现者须注意, 重传流的 RTCP 抖动值并不反映实际网络抖动, 因为分组重传时刻与其原始时间戳之间可能几乎没有相关性.

载荷类型为动态的. 若原始流中存在多种使用重传的载荷类型, 则对其中每一种 MUST 将某一动态载荷类型映射到重传载荷格式. 如何通过会话描述协议 (SDP, Session Description Protocol) 完成原始与重传载荷类型之间的映射见第 8.1 节.

由于重传分组时间戳携带原始媒体时间戳, 重传载荷类型所使用的时间戳时钟频率 MUST 与关联的原始载荷类型相同. 因此, 若某 RTP 流承载多种不同时钟频率的载荷类型, 其关联的重传流也将如此. 注意, RTP 流通常不会承载多种不同时钟频率的载荷类型.

RTP 重传分组的载荷由重传载荷首部后接原始 RTP 分组的载荷构成. 重传载荷首部长度为 2 个八位组. 该载荷首部仅含一个字段 OSN (original sequence number, 原始序列号), MUST 设为关联的原始 RTP 分组的序列号. 原始 RTP 分组载荷, 包括特定于原始载荷类型的任何可能载荷首部, MUST 紧接在重传载荷首部之后放置.

对于支持多种速率编码的载荷格式, 发送端 MAY 不以与原始 RTP 分组相同的载荷进行重传, 而以相同数据以较低速率编码后重传. 目的在于限制重传流的带宽占用. 这样做时, 发送端 MUST 确保接收端仍能解码已发送的原始分组载荷, 这些载荷可能基于已丢失原始分组的载荷进行编码. 此外, 若发送端选择以较低速率重传, 原始 RTP 分组载荷首部中的取值可能不再适用于重传分组, 可能需要在重传分组中修改以反映速率变化. 发送端 SHOULD 在带宽节省与以较低速率重发造成的质量下降之间权衡.

若原始 RTP 首部带有任何概要专用扩展, 重传分组 SHOULD 在固定 RTP 首部之后立即包含相同扩展, 以符合该概要下应用的预期. 此时, 重传载荷首部 MUST 放在概要专用扩展之后.

若原始 RTP 首部带有 RTP 首部扩展, 重传分组 SHOULD 携带相同首部扩展. 该首部扩展 MUST 紧接在固定 RTP 首部之后, 如 RTP [3] 所规定. 此时, 重传载荷首部 MUST 放在首部扩展之后.

若原始 RTP 分组包含 RTP 填充, 在构造重传分组前 MUST 去除该填充. 若需要对重传分组填充, MUST 按任意 RTP 分组的方式执行填充, 并 MUST 设置填充位.

原始 RTP 首部中的标记位 (M), CSRC 计数 (CC) 与 CSRC 列表 MUST 原样复制到重传分组的 RTP 首部中.