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

【转】WebRTC之RTCP的更多相关文章

  1. Android IOS WebRTC 音视频开发总结(八十六)-- WebRTC中RTP/RTCP协议实现分析

    本文主要介绍WebRTC中的RTP/RTCP协议,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID ...

  2. webrtc系列文章

    WEBRTC RTP/RTCP协议族 2017-02-22 20:15 阅读(144) 评论(0) WebRTC 基于GCC的拥塞控制(下) 2017-02-22 15:44 阅读(108) 评论(0 ...

  3. 小议WebRTC拥塞控制算法:GCC介绍

    网络拥塞是基于IP协议的数据报交换网络中常见的一种网络传输问题,它对网络传输的质量有严重的影响,网络拥塞是导致网络吞吐降低,网络丢包等的主要原因之一,这些问题使得上层应用无法有效的利用网络带宽获得高质 ...

  4. SIP SDP RTSP RTP RTCP webrtc

    rfc1889  rfc2326  rfc3261  rfc3550  rfc3856  rfc6120. SIP SDP RTSP  RTP RTCP,就像他们出现的顺序一样,他们在实际应用中的启用 ...

  5. [webrtc] rtcp模块中rtt时间计算

    RTT指 round-trip time,即计算AB两端的往返时延 这里可以分成两个问题: 如何在A端估算A和B之间的RTT时间? 如何在B端估算A和B之间的RTT时间? 本文参考资料:rfc 355 ...

  6. 5┃音视频直播系统之 WebRTC 中的协议UDP、TCP、RTP、RTCP详解

    一.UDP/TCP 如果让你自己开发一套实时互动直播系统,在选择网络传输协议时,你会选择使用UDP协议还是TCP协议 假如使用 TCP 会怎样呢?在极端网络情况下,TCP 为了传输的可靠性,将会进行反 ...

  7. 使用WebRTC搭建前端视频聊天室——信令篇

    博客原文地址 建议看这篇之前先看一下使用WebRTC搭建前端视频聊天室——入门篇 如果需要搭建实例的话可以参照SkyRTC-demo:github地址 其中使用了两个库:SkyRTC(github地址 ...

  8. Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析

    本文主要介绍WebRTC中丢包重传NACK的实现,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID ...

  9. Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)

    本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...

随机推荐

  1. apache Internal Server Error 解决方法

    https://blog.csdn.net/qq_33684377/article/details/78536548 https://blog.csdn.net/LJFPHP/article/deta ...

  2. python魔法属性

    1.__doc__:表示类的描述信息 class Person(object): '''定义人的类''' def func(self): pass print(Person.__doc__) 结果为: ...

  3. tomcat安全配置参考

    0x01 基本配置 1 删除默认目录 安装完tomcat后,删除$CATALINA_HOME/webapps下默认的所有目录文件  rm -rf /srv/apache-tomcat/webapps/ ...

  4. [CSP-S模拟测试]:打扫卫生(暴力)

    题目描述 有$N$头奶牛,每头那牛都有一个标号$P_i1\leqslant Pi\leqslant M\leqslant N\leqslant 40,000$.现在$Farmer\  John$要把这 ...

  5. DRF 组件

    DRF组件中的认证  授权  频率限制   分页  注册器  url控件

  6. flex embed 使用

    Flex 软件中经常需要使用一些外部的资源,如图片.声音.SWF或字体,虽然你也可以在软件运行的时候引入和载入,但是也可能经常需要直接将这些资源编译(Compile)到软件中,也就是直接嵌入资源(Em ...

  7. python值的引用传递和go语言的值传递

    一:值传递 实参a 原本指向地址 1638212,代表1638212这个地址的值是3.在swap函数中,实参a将值拷贝给形参a,形参a此时也在内存中拥有地址,地址= xxxx,值为3,在所有的函数体内 ...

  8. pycharm中git配置(coding.net为例)

    1.在coding.net注册一个账号 2.登陆coding.net 3.新建项目->输入项目名称.项目描述->初始化仓库选择readme.md并且添加一个appachev2的开源许可证- ...

  9. python-笔记(二)数据类型

    一.数据类型是什么鬼? 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同 ...

  10. 查询IP地址

    在黑窗口里面输入:ipconfig