RFC 4585 - Extended RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/AVPF)
RFC 5124 - Extended Secure RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/SAVPF)
译文: http://www.gpssoft.cn/download/protocol/RFC-3550-%E4%B8%AD%E6%96%87%E7%89%88.pdf
参考:
RTCP协议详解_bytxl的博客-CSDN博客
https://www.cnblogs.com/x_wukong/p/5692126.html
几种RTCP报文(携带不同的控制信息):
packet type (PT) = 200, 标识本包是 RTCP SR 报文,发送者报告,wireshark抓包过滤rtcp.pt==200
packet type (PT) = 201, 标识本包是 RTCP RR 报文,接收者报告
packet type (PT) = 202, 标识本包是 RTCP SDES 报文, 源描述,包括 CNAME
packet type (PT) = 203, 标识本包是 RTCP BYE报文, 参与者结束标识
packet type (PT) = 204, 标识本包是 RTCP Application-specific报文
RTCP: Real-time ControlProtocol,实时传输控制协议
在RTP会话期间,每个会话参与者周期性地向所有其他参与者发送RTCP控制信息包,如下图所示:
RTCP功能:
1. 提供分发数据的质量反馈(The primary function is to provide feedback on the quality of the data distribution.)
2. RTCP携带一个名为CNAME的RTP源的持久传输级标识符(RTCP carries a persistent transport-level identifier for an RTP source called the canonical name or CNAME)
3. 必须控制速率使得RTP可以让更多的参与者加入,每个参与者都对其他所有参与者发送他的控制报文,这就使得人人都可以独立的观察参与者的数量。(The rate must be controlled in order for RTP to scale up to a large number of participants. By having each participant send its control packets to all the others, each can independently observe the number of participants. )
几点约束:
1. 每一个周期传送的混合报文必须包含一个报告报文(SR或者RR),并且放在第一个的是报告报文(SR或者RR)以便于确认头。
2. 每一个混合的 RTCP 报文必须包含带有CNAME项的SDES 报文。
SR报文格式
如上图,SR报文由三个部分组成。
第一部分:8个字节头
version(V):2 bit,RTP版本号,同RTP包头域。
padding(P):1 bit,如果设定 padding,在RTCP报文的末端就会包含一个或者多个 padding 字节,不算控制信息。最后一个字节的 padding 是个计数,标识需要忽略多少个 padding 字节(包括自己)。
reception report count (RC): 5 bits ,该SR包中的接收报告块的数目,可以为零。(The number of reception report blocks contained in this packet. A value of zero is valid.)
packet type (PT):8 bits,SR包是200。
length:16 bits,是该SR包以32比特为单位的总长度减一,包括头和 padding(减一是为了零长度有效和避免无限循环来寻找混合的 RTCP 报文,而 32-bit 字是避免对四的倍数的有效检查)。
SSRC of sender(SSRC):32 bits,SR包发送者的同步源标识符。与对应RTP包中的SSRC一样。
第二部分:发送者信息, 20 个字节,在每个 SR 报文中都存在。它是对该sender的数据传输的总结。
NTP timestamp:64 bits,(Network time protocol),SR包发送时的绝对时间值。NTP的作用是同步不同的RTP媒体流。
RTP timestamp:与NTP时间戳对应,与RTP数据包中的RTP时间戳具有相同的单位和随机初始值。
Sender’s packet count:从开始发送包到产生这个SR包这段时间里,发送者发送的RTP数据包的总数. SSRC改变时,这个域清零。
Sender`s octet count:从开始发送包到产生这个SR包这段时间里,发送者发送的净荷数据的总字节数(不包括头部和padding)。发送者改变其SSRC时,这个域要清零。这个域可用来估计平均payload数据速率。
第三部分:根据发送者从上次报告侦听到的其它源的数量来确定零个或更多的接收报告块。每一个接收报告块都含有从单个同步源的关于接收 RTP 报文的统计。(The third section contains zero or more reception report blocks depending on the number of other sources heard by this sender since the last report. Each reception report block conveys statistics on the reception of RTP packets from a single synchronization source.)
SSRC_n (source identifier):32 bits,该报告块中包含的是从该源接收到的包的统计信息。
lost:8 bits,丢失率,表明从上一个SR或RR包发出以来从同步源n(SSRC_n)来的RTP数据包的丢失率。
cumulative number of packets lost:24 bits,累计的包丢失数目,从开始接收到SSRC_n的包到发送SR,从SSRC_n传过来的RTP数据包的丢失总数。
extended highest sequence number received:32 bits,从SSRC_n收到的RTP数据包中最大的序列号,
interarrival jitter:32 bits,接收抖动,RTP数据包接收时间的统计方差估计
Jitter是一个统计变量,它用来表征RTP数据包与包的传输时间之间的差异程度。具体的推算公式如下:
J(i) = J(i-1) + (|D(i-1,i)| - J(i-1))/16
i时刻的jitter是由i-1时刻的jitter推出的。其中D(i-1,i)表达式如下:
D(i,j) = (Rj - Ri) - (Sj - Si) = (Rj - Sj) - (Ri - Si)
Si表示i包里的RTP timestamp,Ri表示i包到达目的端时的timestamp。
Last SR (LSR): 32 bits,上次SR时间戳,取最近从SSRC_n收到的SR包中的NTP时间戳的中间32比特。如果目前还没收到SR包,则该域清零。
Delay since last SR (DLSR) : 32 bits,上次SR以来的延时, 即上次从SSRC_n收到SR包到发送本报告的延时。Unit: 1/65536 s
RR报文格式
相比SR报文,除了 pt = 201,和删除SR报文的第二部分以外,其他与SR报文相同。
SRTCP:
RFC 3711: The Secure Real-time Transport Protocol (SRTP)