在实时通信中,RTCP(RTP Control Protocol)协议用于提供传输质量的反馈信息以及媒体流的同步控制。本文将重点解析RTCP中的SR(Sender Report)包,尤其是第一次发送的SR包。
根据RFC 3550标准文档(https://tools.ietf.org/html/rfc3550#section-6.4.1),SR包主要用于发送者报告其发送的数据包统计信息,帮助接收方评估网络状况和进行同步调整。
下面是一个实际抓取到的SR包示例:
80 c8 00 06 37 51 c9 35 e0 5a be de 4c b8 06 6c
00 00 01 20 00 00 00 01 00 00 00 b7
1
2
80 : 版本号为2,表示当前使用的RTCP版本。
padding : 无填充数据。
reception report count (RC) : 表示后续没有报告块。
接下来是对该包各字段的详细解释:
- 80: 前两位表示RTCP版本号,此处为2;后六位中的前四位表示包类型,此处转换后为200,对应SR包。
- c8: 第一个字节的最后两位标识填充位,此处为0,表示无填充;后六位标识接收报告计数,此处也为0,表示没有附加的接收报告块。
- 00 06: 表示负载长度,即SR包的长度减去12字节的固定头部,共6个32位字,总计28字节。
- 37 51 c9 35: 发送者的SSRC(Synchronization Source Identifier),通常为一个随机数,用于唯一标识一个发送源。
- e0 5a be de: NTP时间戳的整数部分,表示自1900年1月1日以来的秒数。
- 4c b8 06 6c: NTP时间戳的小数部分,表示自1900年1月1日以来的微秒数的4294.967296倍。
- 00 00 01 20: RTP时间戳,与NTP时间戳相对应,单位取决于媒体类型,如视频可能为90kHz,音频则可能为采样率。
- 00 00 00 01: 表示已发送的RTP数据包总数,此处为1。
- 00 00 00 b7: 表示已发送的总字节数,包括RTP头,此处计算为183字节。
以上分析基于音频流的SR包。通过这些字段,接收方可以准确地了解发送方的状态,从而更好地管理会话质量和同步。