【转】WebRTC之RTCP

转自: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

  • 发送端信息SenderInfo

    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

  • 反馈块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。

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时,只能用指数表示带宽了。

相关文章
相关标签/搜索