RTCP(一): RR--Receiver Reports 接收者报告 - Go语言中文社区

RTCP(一): RR--Receiver Reports 接收者报告


RTCP RR的格式

接受者报告的RTCP类型是201,如图1.1所示。

图1.1
这里写图片描述

reporter ssrc

rr报告发送者的ssrc,也就是rtp报文接受者自己的ssrc.

reportee ssrc

rr报告接受者的ssrc,也就是rtp报文发送者的ssrc.

cumulative number of packet lost

累积报文丢失总数,该字段是一个24-bits的有符号整数。

理论计算方式, packet lost = 期待得到报文数量 - 实际收到报文的数量

实际计算方式, packet lost = 期待收到最新sequence - 第一次收到报文的sequence。

需要注意的有一下几点:

* sequence为16位,容易翻转
可以通过计算extend_sequence来区分翻转的sequence。
* packet lost可能为负数
因为有rtp报文的重传,如果重传次数多,可能造成负数
* 该值的测量周期是整个会话
测量周期是整个会话,而不是RR的发送间隔

extended highest sequence number received

计算方法,extended_seq_num = seq_num + (65536 * wrap_around_count)

其中wrap_around_count为sequence翻转的次数

Loss fraction

丢包率,它是定义一个rr发送间隔中rtp报文的丢失率。

它是一个8bits的数据段,计算方法为,loss fraction=lost rate x 256.

举例,丢包率为25%,该字段为25%*256=64

interarrival jitter

这里的延时抖动指的是rtp报文发送方的网络传输时间的变量估计值。

计算单位是基于时间戳的基础单位,也是32位无符号整形。

因为rtp的发送和接收方没有时间同步系统,所以不大可能能准确的测量网络传送时间。

相反,传输时间= |rtp的时间戳-rtp接受者本地时间|

因为没有发送和接收方的时间同步机制,所以这里关心的不是传输时间,是两次接收到rtp报文传输时间的对比,计算公式如图1.2。

图1.2
这里写图片描述
* R是接收到的时间戳,Rj是packet j接收到的时间戳,Ri是packet i接收到的时间戳
* S是rtp报文的时间戳,Sj是packet j的rtp时间戳,Si是packet i的rtp时间戳
而Jitter的计算公式如图1.3:

图1.3
这里写图片描述

LSR

LSR: The last sender report timestamp,是最新接收到SR报文的时间戳。
具体值是,SR报文里64位NTP时间戳中的32位bit的时间戳。如果没有收到SR报文,该字段为0.

DLSR

DLSR: The delay since last sender report,是接收到SR报文的时刻与发送该RR报文时刻的时间差值,单位时间是1/65536 seconds. 如果没有收到SR报文,该字段为0.

RTT

RTT: Round-Trip Time,发送者计算的发送来回时间。
发送者可以通过RR报文中的LSR和DLSR来计算RTT。

计算方法: 发送者用接收到RR报文的当前时间-RR报文的LSR,得到发送SR和接收到RR所花费的网络延时。

再进行: (接收到RR报文的当前时间-RR报文的LSR) - RR中的DLSR,也就是去除了在RTP接收者方本地的SR接收和RR发送的延时,这样就得到了RTT。

RTT = 接收到RR报文的当前时间-RR报文的LSR - RR中的DLSR

经验表明,如果RTT大于300ms,这样的质量网络通话无法完成。只能通过降低比特率,降低打包延时或应用好的错误修复机制来完成。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/sweibd/article/details/79335748
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-10-26 22:24:46
  • 阅读 ( 1157 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢