【发布时间】:2019-11-07 14:48:44
【问题描述】:
参考RFC3550
同步源(SSRC):RTP流的源 数据包,由携带的 32 位数字 SSRC 标识符标识 RTP 标头,以便不依赖于网络地址。
RFC 声明 SSRC 是一个 32 位数字。 那么,让 SSRC 为零 (SSRC=0x00) 在 RTP 标头中是否可以接受?
【问题讨论】:
标签: network-programming sip rtp tcpdump
参考RFC3550
同步源(SSRC):RTP流的源 数据包,由携带的 32 位数字 SSRC 标识符标识 RTP 标头,以便不依赖于网络地址。
RFC 声明 SSRC 是一个 32 位数字。 那么,让 SSRC 为零 (SSRC=0x00) 在 RTP 标头中是否可以接受?
【问题讨论】:
标签: network-programming sip rtp tcpdump
SSRC 允许从 0 到 2^32 -1 的所有 32 位二进制值。 但正如 RFC 中所述:
SSRC必须检测到冲突。
SSRC:32 位 SSRC 字段标识同步源。这 标识符应该是随机选择的,目的是没有两个 同一 RTP 会话中的同步源将具有 相同的 SSRC 标识符。
SSRC标识符分配和使用
RTP 头和各个字段中携带的 SSRC 标识符 RTCP 数据包的数量是一个随机的 32 位数字,需要 在 RTP 会话中全局唯一。数量很重要 谨慎选择,以便同一网络上的参与者或 在同一时间开始不太可能选择相同的数字。
仅使用本地网络地址是不够的(例如 IPv4 地址)作为标识符,因为该地址可能不是 独特。由于 RTP 转换器和混频器能够实现之间的互操作 具有不同地址空间的多个网络,分配 两个空格内的地址模式可能会导致很多 与随机分配相比,冲突率更高。
在一台主机上运行多个源也会发生冲突。
仅通过以下方式获取 SSRC 标识符也是不够的 调用 random() 而不仔细初始化状态。
【讨论】: