Skip to main content

11. RTP over Network and Transport Protocols (网络和传输协议上的RTP)

RTP 可以与各种底层网络和传输协议一起使用。本节提供了在 UDP 和 IP 组播上使用 RTP 的指南。

11.1 传输地址和端口选择

RTP 依赖于底层协议提供某种机制 (如端口) 来复用 RTP 和 RTCP 数据包。对于 UDP 和类似的协议, RTP 应使用偶数目标端口号, 相应的 RTCP 数据包应使用下一个更高 (奇数) 目标端口号。

对于单播会话的应用程序, RTP 建议将随机选择的偶数端口号用于 RTP 数据包, 将下一个更高的奇数端口号用于 RTCP 数据包。如果应用程序为会话的两端指定了不同的端口对, 则每一端可以使用一对端口用于发送和接收, 从而实现一对一的端口关联。

对于多播会话, RTP 数据包和 RTCP 数据包使用相同的目标传输地址, 该地址是组播组地址和端口对。在 IP 组播的情况下, 目标地址由会话管理机制提供。RTP 应使用规范的网络字节序 (大端) 传输端口号和 IP 地址。

RTP 数据包和 RTCP 数据包可以通过不同的端口号来区分。如果两个端口号都明确指定, 则不需要使用偶数/奇数端口对规则, 尽管仍建议使用该规则以便于诊断。

11.2 与 IP 组播的配合使用

对于 IP 组播, RTP 依赖于底层网络服务提供组播分发和 RTP 不提供的其他功能。RTP 使用标准的 IP 组播服务模型, 其中发送者不知道谁是接收者。

在 IP 组播中, 源可以向组播组地址和端口对发送数据包。要接收这些数据包, 主机必须加入该组播组。加入组播组后, 主机将接收发送到该组的所有数据包。

11.3 RTP 数据包的封装

某些底层协议可能要求定义 RTP 数据包的封装。通常, 底层协议的一个数据包包含一个 RTP 数据包, 但如果封装方法允许, 可能包含多个 RTP 数据包 (参见 Section 5.2)。

11.4 分层编码的传输

对于分层编码, 可以使用多个 RTP 会话, 每个会话对应一个编码层。每个 RTP 会话使用不同的组播组地址和/或端口对来传输。接收者可以通过仅加入与其能力相匹配的层的组播组来控制接收带宽。

在这种情况下, 建议在所有层中使用单一的 SSRC 标识符空间, 并且同一参与者在不同层中应使用相同的 SSRC 标识符 (参见 Section 8.3)。

11.5 多个 RTP 会话的使用

对于由音频和视频媒体组成的电话会议, 它们应作为单独的 RTP 会话传输。也就是说, 为每个媒体使用两个不同的 UDP 端口对和/或组播地址分别传输 RTP 和 RTCP 数据包。在 RTP 级别, 音频和视频会话之间没有直接耦合, 除了参与两个会话的用户应在两个会话的 RTCP 数据包中使用相同的规范 (canonical) 名称 (CNAME), 以便可以关联这些会话。

分离音频和视频的一个动机是允许会议中的某些参与者只接收一种媒体 (如果他们选择的话)。尽管分离, 但可以使用两个会话的 RTCP 数据包中携带的定时信息来实现源的音频和视频的同步播放。