转自: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. nginx 缓存设置

    浏览器缓存原理 浏览器缓存 HTTP协议定义的缓存机制(如:Expires:Cache-control等) 2.浏览器无缓存 3.客户端有缓存 校验过期机制 校验是否过期                ...

  2. 「HNOI2016」矿区

    https://loj.ac/problem/2052 题解 平面图转对偶图.. 首先我们转的话需要给所有的平面标号,然后找到每条边看看他们隔开了哪两个平面. 做法就是对每个点维护它的所有排好序的出边 ...

  3. Java数据结构之单链表

    这篇文章主要讲解了通过java实现单链表的操作,一般我们开始学习链表的时候,都是使用C语言,C语言中我们可以通过结构体来定义节点,但是在Java中,我们没有结构体,我们使用的是通过类来定义我们所需要的 ...

  4. 解决 UIAlterController 不居中问题

    最后更新:2017-06-30 现象描述 新公司做的解决的第一个bug 就是 UIAlterController 不居中,莫名其妙的飞出屏幕之外 找了很久的答案,最终在苹果论坛看到了相关的描述 We ...

  5. foreach(增强for循环)和for的区别

    https://www.cnblogs.com/XiaojianGo/p/7471860.html 首先说一下foreach有的也叫增强for循环,foreach其实是for循环的一个特殊简化版. 再 ...

  6. 学习C#20天有感

    自学C#有20多天了,期间出差去深圳一周,每天平均学习4小时左右,看书+视频,之前有点C语言基础(仅限于基础哈哈),计划30内把C#的基本语法和SQL的基本语法熟悉,把面向对象相对深入的理解一些,然后 ...

  7. Qt 之 ZIP开源库 QuaZIP

    2013-10-31 21:46 10856人阅读 评论(0) 收藏 举报  分类: Qt(12)  版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   一.简介     ...

  8. ANativeWindow_fromSurface

    c++后台若使用ANativeWindow_fromSurface将surface转化为ANativeWindow: 需要头文件:#include <android/native_window_ ...

  9. ORA-00972

    SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') as 日期时间 from dual;select to_char(sysdate,'YY ...

  10. VS Project Property Manage

    概念:Project Property 和 Property Sheet. Project Property:项目属性,是你当前项目的属性配制,保存在你工程的配制文件中,rojectName.vcxp ...