rtcp webrtc 接收_【转】WebRTC之RTCP

转自:https://blog.csdn.net/momo0853/article/details/88051312#RTPFBTransport_layer_FB_messagesNACKTransportFeedback_245

文章目录

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位是秒, 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。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值