WebRTC开发者社区为开发者提供最新最全的WebRTC资料
目录
  • 首页
  • WebRTC概念与基础
  • WebRTC项目与应用
  • WebRTC教程资料
  • WebRTC开发资源
  • WebRTC源码分析
  • WebRTC服务端开发
  • WebRTC网络与通信
  • WebRTC编码与解码
  • WebRTC问题与缺陷
  • WebRTC-Androd端开发
  • WebRTC-RFC文档

学习RFC3550:RTP/RTCP实时传输协议基础知识

2020-07-12 14:49:51

学习RFC3550:RTP/RTCP实时传输协议基础知识

海2100 2018-11-16 13:57:57  300  收藏
分类专栏: sip
 

1、前言


RF3550定义了实时传输协议RTP和它的控制协议RTCP。RTP协议是Internet上针对实时流媒体传输的基础协议,该协议详细说明在互联网上传输音视频的标准数据包格式。RTP本身只保证实时数据的传输,并不能提供可靠传输、流量控制和拥塞控制等服务质量保证,这需要RTCP协议提供这些服务。

RTCP协议负责流媒体的传输质量保证,提供流量控制和拥塞控制等服务。在RTP会话期间,各参与者周期性彼此发送RTCP报文。报文中包含各参与者数据发送和接收等统计信息,参与者可以据此动态控制流媒体传输质量。RTP和RTCP配合使用,通过有效反馈使使流媒体传输效率最佳化。

IETF的RFC3550定义了RTP/RTCP协议的基本内容,包括报文格式、传输规则等。除此之外,IETF还定义一系列扩展协议,包括RTP扩展,RTCP报文类型扩展,等等。本文对这些协议进行初步归纳总结,在分析RFC3550的基础上,重点分析RTP系列协议,并以报文类型为主线分析RTCP系列协议。

2、RFC3550协议


RFC3550 - RTP: A Transport Protocol for Real-Time Applications (RTP)
RFC3550协议定义RTP和RTCP协议的最基本内容,包括报文格式及头部扩展、发送和接收规则、RTP Mixer和Translator、协议安全等内容。详细内容都在协议中定义,这里只简述RTP和RTCP报文的基本格式。

RTP报文头部格式:

学习RFC3550:RTP/RTCP实时传输协议基础知识_1.png 

RTP报文由固定头部、(可选)扩展头部和负载三部分组成,如图1所示。头部中的X域标示固定头部后面是否跟随扩展头部,PT域定义负载类型。各部分的详细定义请参考RFC3550[1]。

RTCP报文Sender Report头部格式:

学习RFC3550:RTP/RTCP实时传输协议基础知识_2.png 

RFC3550根据RTCP报文类型定义SR、RR、SDES、BYE和APP五种报文格式。图2显示了SR(Sender Report)的报文格式,包括固定头部、发送端信息和报告块三部分组成:发送端信息携带NTP时间同步和数据发送统计等内容,报告块则包含发送端接收到数据的统计信息。关于RTCP报文格式的详细信息,请继续参考RFC3550。

3、RTP档次扩展


RFC3550关于RTP档次的定义如下:“档次定义了一系列负载类型和对应的负载格式,也定义了特定于具体应用的RTP扩展和修改。典型地,某个应用仅基于一个档次运行。”

IETF针对RFC3550在档次方面定义了一系列扩展协议,总结如下表:

学习RFC3550:RTP/RTCP实时传输协议基础知识_3.png 

RFC3551(RTP/AVP)在RFC3550的基础上针对RTP档次进行补充形成RTP/APVP档次,被用在具有最小会话控制的音视频会议中,是其它扩展档次的基础。该档次在没有参数协商和成员控制的会话中非常有用。该档次也为音视频定义一系列编码和负载格式。对于具体的流媒体负载格式,IETF也定义一系列协议详细描述,如VP8视频负载格式和H264视频负载格式,等等。

RFC3711(SRTP,也即RTP/SAVP)是RTP/AVP在安全方面进行扩展形成的档次,为RTP/RTCP提供数据加密、消息认证、重放保护等功能。SRTP具有高吞吐量和低数据膨胀等特点,是异构环境下对RTP/RTCP数据的有效保护。

RFC4585(RTP/AVPF)是RTP/AVP在及时反馈方面进行扩展形成的档次,使得接收端能够向发送端提供及时反馈,实现短时调整和基于反馈的修复机制。该协议定义早期RTCP报文以实现及时反馈,并定义一系列通用RTCP反馈报文和特定于应用的反馈报文,如NACK、PLI、SLI、RPSI等。

RTC5124(RTP/SAVPF)则是RTP/SAVP和RTP/AVPF的综合。SAVP和AVPF在使用时,需要参与者借助于SDP协议[8]就档次和参数信息达成一致。但是对一个RTP会话来说,这两种档次不能同时被协商。而实际应用中,我们有同时使用这两种档次的需要。因此,RTP/SAVPF档次应运而生,它能够使得RTP会话同时具有安全和及时反馈两方面的特性。

本节对RFC3550在档次方面扩展形成的一系列协议进行初步分析。可以看到,RFC3550只定义最基本的内容,在实际应用中会对其在安全性、及时反馈等方面进行扩展。

4、RTCP报文类型扩展


RFC 3550定义五种RTCP报文,类型在报文头部的PT域定义。下图对它们作简单描述。

RFC3550定义的五种RTCP报文:

学习RFC3550:RTP/RTCP实时传输协议基础知识_4.png 

SR报文用于发送端报告本端的数据发送统计信息和数据接收统计信息,RR报文用于报告本端的数据接收统计信息,SDES报文用于报告本端的描述性信息,BYE在本端离开会话时发送,而APP则是特定于应用的数据。

IETF根据实际需求对RTCP的报文类型进行扩展,定义了一系列协议。对这类RTCP报文总结如下表所示:

学习RFC3550:RTP/RTCP实时传输协议基础知识_5.png 

下面对这些RFC做进一步分析。

RFC5450 - Transmission Time Offsets in RTP Streams:
该协议在定义一种更精细地描述传输时间的方法的基础上,定义一种改进的Jitter报告报文,负载类型为195。

RFC5104 - Codec Control Messages in the RTP Audio-Visual Profile with Feedback (AVPF):
该协议对RFC4585 AVPF档次进一步补充,定义一系列传输层和特定于负载的RTCP报文格式。该系列报文对SR/RR报文的RC域重定义为FMT域,用以区分报文的子类型。综合RFC4585所定义的报文,如下表所示:

学习RFC3550:RTP/RTCP实时传输协议基础知识_7.png 

RFC3611 - RTP Control Protocol Extended Reports (RTCP XR):
该协议定义RTCP扩展报告块,负载类型为207。RTCP扩展报告块在SR/RR报告块的基础上传输更多的信息。RFC3661定义了7种子报告块,总结如表5:

学习RFC3550:RTP/RTCP实时传输协议基础知识_8.png 

本节以报文类型为主线,归纳总结RTCP报文及其扩展报文,内容比较多也比较繁琐。这些报文为RTP提供更丰富的控制信息和统计数据。

5、小结


本文在分析RTP/RTCP基础协议RFC3550的基础上,以档次为主线分析RTP系列扩展协议,以报文类型为主线分析RTCP系列扩展协议。通过以上工作,得到一个较为清晰的框架和流程,为进一步学习RTP/RTCP协议打下良好基础。

转自:http://www.52im.net/thread-590-1-1.html

By:rasp | WebRTC概念与基础 |

  • 分类目录

    • WebRTC概念与基础 (225)
    • WebRTC项目与应用 (33)
    • WebRTC教程资料 (38)
    • WebRTC开发资源 (13)
    • WebRTC源码分析 (12)
    • WebRTC服务端开发 (23)
    • WebRTC网络与通信 (26)
    • WebRTC编码与解码 (15)
    • WebRTC问题与缺陷 (2)
    • WebRTC-Androd端开发 (2)
    • WebRTC-RFC文档 (1)
  • 最新文章

    • 音视频相关的书籍,多媒体技术
    • SFU级联解决方案——Jitsi
    • SFU级联解决方案——Licode
    • Janus源码分析(6)——Streaming分析
    • janus Streaming插件推流指南
    • 流媒体服务器 
    • WebRTC+libwebsockets+Janus的秒开实践
    • 基于WebRTC的直播CDN
    • 不需要SFU实现WebRTC联播实践  
    • webrtc 开启Simulcast功能
    • Migrating your native/mobile application to Unified Plan/WebRTC 1.0 API
    • WebRTC源码分析rfc4588 RTP重传有效载荷格式
    • WebRTC网关服务器搭建:开源技术 vs 自行研发
    • WebRTC网关服务器搭建:开源技术 vs 自行研发
    • 自研WebRTC网关服务器架构的实践之路
    • WEBRTC三种类型(Mesh、MCU 和 SFU)的多方通信架构  
    • janus的videoroom插件
    • WebRTC+libwebsockets+Janus的秒开实践
    • Janus源码分析(7)——videoroom分析
    • Janus源码分析(5)——echotest分析
    • Janus源码分析(4)——信令交互过程
    • WebRTC+libwebsockets+Janus的秒开实践
    • 前向纠错码(FEC)的RTP荷载格式
    • WebRTC 开发实践:从一对一通话到多人会议
    • Distord如何使用WebRTC处理250万用户同时进行的音频交流
    • 了不起的WebRTC:生态日趋完善,或将实时音视频技术白菜化
    • 基于WebRTC技术的多人音视频解决方案
    • 谁是最好的WebRTC SFU?
    • WebRTC媒体服务器
    • 使用Janus作为对讲服务器的后台框架和业务流程
  • 链接

    • WebRTC官网
    • xSky 实验室
    • 树莓派技术圈
    • 声网 Agora
    • WebRTC中文网
    • web性能权威指南
    • WebRTC官网
    • webrtc在线源码
    • webrtc在线源码
    • webrtc
    • webrtc示例
    • LiveVideoStack
    • 雷霄骅(leixiaohua1020)的专栏
  • 开源项目


Powered By xblog Copyright 0xsky.com All Rights Reserved.

Copyright WebRTC.ren All Rights Reserved.