协议篇---RTP & RTCP & RTSP

Posted 贺二公子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了协议篇---RTP & RTCP & RTSP相关的知识,希望对你有一定的参考价值。

原文地址:https://blog.csdn.net/qq_22310551/article/details/124097613


文章目录

一、概述

从事或想要从事音视频相关工作的你,或多或少都听过RTP,RTCP,RTMP等等协议的名称,本篇将给大家介绍下流媒体相关的网络协议,话不多说,开始今天的文章。

如下罗列了部分流媒体相关协议,稍后的文章中我们详细介绍这些协议:

  • RTP(Real-time Transport Protocol),实时传输协议。
  • RTCP(Real-time Transport Control Protocol),实时传输控制协议。
  • RTSP(Real Time Streaming Protocol),实时流协议。
  • RTMP(Real Time Messaging Protocol),实时消息传输协议。
  • HLS(HTTP Live Streaming),苹果公司提出的基于HTTP的流媒体网络传输协议。
  • HTTP-FLV,将RTMP等负载信息携带在HTTP协议之上的码流传输协议。

二、(RTP & RTCP & RTSP)

为什么把 RTP、RPCP、RTSP放在一起介绍呢,因为RTP、RTCP这两个协议一般是成对出现,而他们与RTSP协同工作。本篇我们先介绍下这三篇协议。

1. RTP、RTCP、RTSP的关系

RTP负责多媒体的传输,RTCP配合RTP做控制和流量统计, RTSP负责建立和控制会话,下图更直观的的描述了三者的关系:

2. RFC3550

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

官网:RFC 3550 - RTP: A Transport Protocol for Real-Time Applications

3. RTP 实时传输协议

  • RTP建立在UDP协议上;
  • RTP不确保网络底层的可靠性,不提供按时发送机制或其他服务质量(QoS)保证;
  • RTP不保证传送或防止无序传送;
  • RTP提供时间标志,序列号以及其他能够保证在实时数据传输时处理时间的方法;
  • RTP报文格式如下:
    RTP报文由固定头部、(可选)扩展头部和负载三部分组成。头部中的X域标示固定头部后面是否跟随扩展头部,PT域定义负载类型。各部分的详细定义请参考RFC3550。
    • V:RTP协议的版本号,占2位,当前协议版本号为2
    • P:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。
    • X:扩展标志,占1位,如果X=1,则在RTP报头后跟有一个扩展报头
    • CC:CSRC计数器,占4位,指示CSRC 标识符的个数
    • M:标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。
    • PT:有效荷载类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流的,这样便于客户端进行解析。
    • sequence number:序列号,16比特,发送方在每发送完一个RTP包后就将该域的值增加1,接收方可以由该域检测包的丢失及恢复包序列。序列号的初始值是随机的。
    • timestamp时间戳,32比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时间戳是去除抖动和实现同步不可缺少的。
    • SSRC:同步源标识符,32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的RFC1889推荐了MD5随机算法。
    • CSRC:贡献源列表,0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份

4. RTCP(Real-time Transport Control Protocol),实时传输控制协议

  • RTP和RTCP是一起使用的;
  • RTCP的主要功能是为RTP所提供的服务质量提供反馈,RTCP收集媒体连接的统计信息,例如:传输字节数,传输分组数,丢失分组数,时延抖动,单向和双向网络延迟等等;
  • 网络应用程序可以利用RTCP所提供的信息试图提高服务质量,比如限制信息流量或改用压缩比较小的编解码器;
  • RTCP本身不提供数据加密或身份认证,其伴生协议SRTCP(安全实时传输控制协议)则可用于此类用途;
  • RTCP报文格式如下:
    RFC3550根据RTCP报文类型定义SR、RR、SDES、BYE和APP五种报文格式。下图显示了SR(Sender Report)的报文格式,包括固定头部、发送端信息和报告块三部分组成:发送端信息携带NTP时间同步和数据发送统计等内容,报告块则包含发送端接收到数据的统计信息。关于RTCP报文格式的详细信息,请继续参考RFC3550

5. RTSP(Real Time Streaming Protocol),实时流协议

  • RTSP是一种双向实时数据传输协议;
  • RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输;
  • RTSP主要用来控制具有实时特性的数据发送,比如:对流媒体提供诸如播放、暂停、快进等操作;- RTSP负责定义具体的控制消息、操作方法、状态码等,但它本身并不传输数据,而是必须依赖于下层传输协议所提供的某些服务;

参考

学习RFC3550:RTP/RTCP实时传输协议基础知识 - 程序员大本营

以上是关于协议篇---RTP & RTCP & RTSP的主要内容,如果未能解决你的问题,请参考以下文章

RTP与RTCP协议介绍(转载)

Rtp-Rtcp

Rtp-Rtcp

rtp协议详解/rtcp协议详解

超越RFC3550 - RTP/RTCP协议族分析

流媒体专家rtp和rtcp协议详解I