当前位置: 首页 > 工具软件 > rtc-ssh > 使用案例 >

WebRTC RTCP

贝嘉泽
2023-12-01

RTCP作为RTP控制协议,对于弱网下音视频质量和会话控制具有重要的作用。

一、RTCP Header

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |V=2|P|   FMT   |      PT       |             length            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • V:RTCP的版本号,一定等于2;
  • P:如果设置,填充位表示数据包包含末尾的附加填充八位字节,不属于控制信息,但包含在长度字段中;
  • FMT:反馈消息类型,并根据PT类型的不同而含义不同。比如当PT=200时,表示ReportBlock的个数;当PT=205时,表示反馈包的类型,1:NACK丢包重传,15:TWCC拥塞控制
  • PT:负载类型,详细请看下表
  • length:此数据包的长度(以32位字节为单位减去1),包括Header和任何填充。

二、RTCP Payload

Payload TypeRepresentDescription
200SR (Sender Report)发送端报告
201RR (Receiver Report)接收端报告
202SDES (Source Description)源端描述
203BYE结束
204APP自定义
205RTPFB (Generic RTP Feedback)传输反馈,比如NACK丢包重传,twcc拥塞控制报告
206PSFB (Payload-Specific Feedback)负载反馈,比如picture重传、关键帧重传
207XR (Extended Reports)扩展报告

RTCP 主要涉及到 3 个 RFC 文档

三、RTCP发送端报告(SR)

官方文档:RFC 3550 - RTP: A Transport Protocol for Real-Time Applications

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
header |V=2|P|   FMT   |   PT=SR=200   |             length            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         SSRC of sender                        |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
sender |              NTP timestamp, most significant word             |
info   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |             NTP timestamp, least significant word             |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         RTP timestamp                         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                     sender packet count                       |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                      sender octet count                       |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
report |                 SSRC_1 (SSRC of first source)                 |
block  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1    | fraction lost |       cumulative number of packets lost       |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |           extended highest sequence number received           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                      interarrival jitter                      |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         last SR (LSR)                         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                   delay since last SR (DLSR)                  |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
  • FMT:在SR中,FMT表示后面跟的report block个数,可以是0个(只发送流),也可以是多个。
  • SSRC of sender:同步源标识符,SR数据包的发起者的编号
  • NTP timestamp:64位无符号整型,表示该SR报文发送的时刻的系统NTP时间;
  • RTP timestamp:32位无符号整型,表示该SR报文发送的时刻的RTP时间,RTP时间戳初始值是随机的,是相对时间,加到最大值后会翻转从0开始;
  • packet count:发送端发送的包总的个数;
  • packet octet:发送端发送的总的字节数;
  • report block相关参数和RR一致,放后面介绍。

四、RTCP接收端报告(RR)

官方文档:RFC 3550 - RTP: A Transport Protocol for Real-Time Applications

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
header |V=2|P|   FMT   |   PT=RR=201   |             length            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                     SSRC of packet sender                     |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
report |                 SSRC_1 (SSRC of first source)                 |
block  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1    | fraction lost |       cumulative number of packets lost       |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |           extended highest sequence number received           |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                      interarrival jitter                      |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         last SR (LSR)                         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                   delay since last SR (DLSR)                  |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
  • FMT:在RR中,FMT同样表示后面跟的report block个数
  • SSRC of sender:同步源标识符,RR数据包的发起者的编号
  • SSRC_1:接收报告块中的信息所属的源的SSRC标识符
  • fraction lost:丢包率,表示来自源 SSRC_n 的 RTP 数据包在上一个 SR 或 RR 包被发送后丢失的部分,表示为一个定点数,二进制点位于字段的左边缘。
  • cumulative number of packets lost:丢失数据包的累积数量,表示自接收开始以来丢失的来自源SSRC_n的RTP数据包的总数。
  • extended highest sequence number received:接收到的扩展最高序列号,低16位表示接收到的RTP包最大序列号,高16位表示RTP包序列号翻转次数。
  • interarrival jitter:到达间隔抖动,指RTP数据包到达间隔时间的统计方差估计值。
    计算公式如下:
    定义到达间隔抖动值:J,定义偏差值:D,
    如果Ri是数据包i以RTP时间戳为单位的到达时间,Si是数据包i的RTP时间戳,那么对于两个数据包i和j,D可以表示为
    D(i,j) = (Rj - Ri) - (Sj - Si) = (Rj - Sj) - (Ri - Si)
    J(i) = J(i-1) + (|D(i-1,i)| - J(i-1))/16
    增益参数1/16 提供了良好的降噪比,同时保持了合理的收敛速度
  • LSR:最后接收的SR包里的NTP时间戳,只截取了中间的32bit。如果还没有收到SR,则该字段设置为0。
  • DLSR:自最后接收SR包以来到发送RR包之间的延迟,以 1/65536 秒为单位
 类似资料:

相关阅读

相关文章

相关问答