转自:https://blog.csdn.net/momo0853/article/details/88051312#RTPFBTransport_layer_FB_messagesNACKTransportFeedback_245dom
文章目录ide
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文档ui
一、RFC3550,SR/RR/BYE/APP/SDES
二、RFC4585,RTPFB/PSFB
三、draft-holmer-rmcat-transport-wide-cc-extensions-01,RTPFB扩展TransportFeedbackspa
RTCP通用头部以下.net
V,RTCP的版本号,必定等于2
P,是否存在填充信息,包的最后一个byte用于存储填充数据的长度,也就是padding_size_ = payload_[payload_size_ - 1]
RC,ReportBlock的个数
PT,RTCP的负载类型
lenght,头部的长度,不包括通用头部,长度等于4*lenght3d
SR(Sender Report RTCP Packet)视频
发送端经过发送SR包告诉接收端发送端的信息,SR包分为三部分:头部header,发送者信息senderInfo和反馈块ReportBlock。若是发送端也做为接收端,那么才会存在ReportBlock,当存在多个码流的时候就会反馈多个ReportBlock。SR包的负载类型是200。blog
SSRC 同步源
64位的NTP,NTP timestamp, most significant word前面32位是秒, least significant word后面32位是分
RTP timestamp
sender’s packet count 到发送此SR包时已经发送包的个数
sender’s octet count 到发送此SR包时已经发送包的大小(Byte)ip
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)
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。
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。
TransportFeedback
FMT是15,WebRTC对应的代码是transport_feedback.cc。
这个是WebRTC自顶的一个FB,用于反馈接收端收到的包和间隔。这些信息是给发送端用于拥塞检测。
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请求关键帧,而且是第几回请求。当发送端存在多个视频发送源的时候,接收端就须要指明向那个源请求关键帧。
REMB
FMT是15,WebRTC对应的代码是remb.cc。
向发送方发送接收端估算的最大带宽。这个是WebRTC自定义的一个FB类型。
Num SSRC指明SSRC的个数,带宽用一个uint64_t类型表示,可是传输的时候须要把64位封装到24位里面。WebRTC的作法是当码率大于18位能表示最大数0x3FFF时,只能用指数表示带宽了。