WebRTC之RTCP
作者:互联网
文章目录
RTCP
SR(Sender Report RTCP Packet)
RR(Receiver Report RTCP Packet)
SDES(Source Description RTCP Packet)
BYE(Goodbye RTCP Packet)
APP(Application-Defined RTCP Packet)
RTPFB(Transport layer FB messages)[NACK/TransportFeedback]
NACK
TransportFeedback
PSFB(Payload-specific FB messages)[PLI/FIR/REMB]
PLI
FIR
REMB
RTCP
涉及到的相关RFC文档
1、RFC3550,SR/RR/BYE/APP/SDES
2、RFC4585,RTPFB/PSFB
3、draft-holmer-rmcat-transport-wide-cc-extensions-01,RTPFB扩展TransportFeedback
RTCP通用头部如下
V,RTCP的版本号,一定等于2
P,是否存在填充信息,包的最后一个byte用于存储填充数据的长度,也就是padding_size_ = payload_[payload_size_ - 1];
RC,ReportBlock的个数
PT,RTCP的负载类型
lenght,头部的长度,不包括通用头部,长度等于4*lenght
SR(Sender Report RTCP Packet)
发送端通过发送SR包告诉接收端发送端的信息,SR包分为三部分:头部header,发送者信息senderInfo和反馈块ReportBlock。如果发送端也作为接收端,那么才会存在ReportBlock,当存在多个码流的时候就会反馈多个ReportBlock。SR包的负载类型是200。
发送端信息SenderInfo
SSRC 同步源
64位的NTP,NTP timestamp, most significant word前面32位是秒,NTP timestamp, least significant word后面32位是分
RTP timestamp
sender’s packet count 到发送此SR包时已经发送包的个数
sender’s octet count 到发送此SR包时已经发送包的大小(Byte)
反馈块ReportBlock
fraction lost丢包率,到发送此ReportBlock时丢包率计算
cumulative number of packets lost总共丢失的包个数
extended highest sequence number received 收到的包序号,前16位表示第几圈,后16位表示当前的序号
interarrival jitter包之间的平均间隔
Last SR上一个SR包的时间戳
Delay since last SR距离上一个LSR的时间间隔
RR(Receiver Report RTCP Packet)
接收端通过RR包反馈接收端的接收情况,RR包分为两个部分:头部header和反馈块ReportBlock。参考SR包,RR包的负载类型是201。
SDES(Source Description RTCP Packet)
发送源信息描述,可以用于描述发送端的名字,邮箱,电话等信息,SDES的负载类型是202。SDES分为两部分:头部header和描述信息chunk。chunk内需要包含一个SSRC和至少一个SEDS item,每个item用于描述不同的信息。item中的lenght字段是用于表示后面描述信息的长度(byte)
CNAME(Canonical End-Point Identifier SDES Item)
负载类型1,用于描述规范点标识符,长度lenght(指后面的长度),具体信息user and domain name
NAME(User Name SDES Item)
负载类型等于2,用于描述用户名字
EMAIL: Electronic Mail Address SDES Item
负载类型等于3,用于描述邮箱信息
PHONE: Phone Number SDES Item
负载类型等于4,用于描述电话号码
LOC: Geographic User Location SDES Item
负载类型等于5,用于描述用户位置信息
TOOL: Application or Tool Name SDES Item
负载类型等于6,用于描述应用程序或者工具名字
NOTE: Notice/Status SDES Item
负载类型等于7,用于描述用户状态的信息
PRIV: Private Extensions SDES Item
负载类型等于8,用于定义用户私有的扩展信息
BYE(Goodbye RTCP Packet)
发送端主动停止发送,最后会发送一个BYE包,有可能会说明离开信息(reason for leaving)
APP(Application-Defined RTCP Packet)
用于描述用户信息的,这个包在WebRTC中并没有看到发送。
RTPFB(Transport layer FB messages)[NACK/TransportFeedback]
负载类型是205,WebRTC对应的代码是rtpfb.cc。传输层反馈信息目前只有NACK,用于反馈接接收端未收到什么包。
通用头部信息,前面四个Byte的信息和普通的RTCP头是一样的,看前面就好了,这里FMT用于区分FCI的类型,它会加上SSRC of packet sender发送者的SSRC和SSRC of media source反馈者的SSRC。
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC of packet sender |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC of media source |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: Feedback Control Information (FCI) :
: :
1
2
3
4
5
6
7
8
9
10
11
NACK
FMT是1,WebRTC对应的代码是nack.cc。
NACK的FCI个数如下,其中PID(Packet ID)是第一个丢失的序号,BLP(bitmask of following lost packets)是继第一个序号之后的16个包的丢失情况,当丢失之后,此二进制位就会被mark为1。例如PID等于666,如果668和692也丢失了,那么BLP等于100010。当后续丢失的包序号大于第一个丢失的包序号16以上就需要重新使用一个新的FCI反馈包表示。NACK包可以存在多个FCI。
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PID | BLP |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1
2
3
4
5
TransportFeedback
FMT是15,WebRTC对应的代码是transport_feedback.cc。
这个是WebRTC自顶的一个FB,用于反馈接收端收到的包和间隔。这些信息是给发送端用于拥塞检测。
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=15 | PT=205 | length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC of packet sender |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC of media source |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| base sequence number | packet status count |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| reference time | fb pkt. count |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| packet chunk | packet chunk |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| packet chunk | recv delta | recv delta |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| recv delta | recv delta | zero padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
PSFB(Payload-specific FB messages)[PLI/FIR/REMB]
负载类型是205,WebRTC对应的代码是psfb.cc。
PLI
FMT是1,WebRTC对应的代码是pli.cc。
向发送方请求关键帧。
FIR
FMT是4,WebRTC对应的代码是fir.cc。
向发送方请求关键帧。和PLI不同的地方是,它会指明向那个SSRC请求关键帧,并且是第几次请求。当发送端存在多个视频发送源的时候,接收端就需要指明向那个源请求关键帧。
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Seq nr. | Reserved = 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1
2
3
4
5
6
7
REMB
FMT是15,WebRTC对应的代码是remb.cc。
向发送方发送接收端估算的最大带宽。这个是WebRTC自定义的一个FB类型。
Num SSRC指明SSRC的个数,带宽用一个uint64_t类型表示,但是传输的时候需要把64位封装到24位里面。WebRTC的做法是当码率大于18位能表示最大数0x3FFF时,只能用指数表示带宽了。
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=15 | PT=206 | length |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
0 | SSRC of packet sender |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4 | Unused = 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
8 | Unique identifier 'R' 'E' 'M' 'B' |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 | Num SSRC | BR Exp | BR Mantissa |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
16 | SSRC feedback |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: ... :
---------------------
作者:StoneLiuXS
来源:CSDN
原文:https://blog.csdn.net/momo0853/article/details/88051312
版权声明:本文为博主原创文章,转载请附上博文链接!
标签:SDES,SSRC,Packet,发送,RTCP,WebRTC 来源: https://www.cnblogs.com/eleclsc/p/10869243.html