RTP/RTCP协议与RTSP协议 您所在的位置:网站首页 rtp和rtcp协议 RTP/RTCP协议与RTSP协议

RTP/RTCP协议与RTSP协议

2023-08-10 17:20| 来源: 网络整理| 查看: 265

基本概念 流式传输

包括顺序流式传输(Progressive Streaming)和实时流式传输(Real-time Streaming)。直播场景中使用progressive streaming和real-time streaming都ok,但real-time的延迟应当更低。

RTP/RTCP/RTSP

Real-time Transport Protocol(RTP实时传输协议)是网络传输协议。其实和RTCP是配套的。RTP用来为IP网上的语音、图像、传真等多种需要实时传输的多媒体数据提供端到端的实时传输服务。RTP为Internet上端到端的实时传输提供时间信息和流同步,但并不保证服务质量,服务质量由RTCP来提供。举个栗子:我们在直播推流的时候,流媒体数据这些都是通过RTP来传输,但具体怎么建立连接,顺序乱了肿么办,怎么控制数据包,就是RTCP来完成了。

RTP:实时传输协议(Real-time Transport Protocol) RTP/RTCP是实际传输数据的协议 RTP传输音频/视频数据,如果是PLAY,Server发送到Client端,如果是RECORD,可以由Client发送到Server 整个RTP协议由两个密切相关的部分组成:RTP数据协议和RTP控制协议(即RTCP) RTP载荷封装设计文本的传输是基于IP协议,所以MTU为1500B,按IP-UDP-RTP的封装结构,减掉至少20B的IP头,8B的UDP头,12B的RTP头,则最大载荷为1460B。 RTSP:实时流协议(Real Time Streaming Protocol,RTSP)是完全的应用层协议。 RTSP的请求主要有DESCRIBE,SETUP,PLAY,PAUSE,TEARDOWN,OPTIONS等,顾名思义可以知道起对话和控制作用。 RTSP的对话过程中SETUP可以确定RTP/RTCP使用的端口,PLAY/PAUSE/TEARDOWN可以开始或者停止RTP的发送,等等。 RTSP控制的流媒体一般传输ts,mp4之类的格式。 RTSP在网络模型中位于RTP和RTCP之上,可以使用TCP或RTP完成流媒体数据传输。 RTCP:实时传输控制协议(Real-time transport control protocol)包括Sender Report和Receiver Report,负责管理传输质量,在当前应用进程之间交换控制信息,提供流量控制和拥塞控制服务,是一种控制协议。

streaming

理解RTCP

RTP协议实际上是比较简单的,只负责实时数据传输,而且基于UDP协议,不保证传输的顺序,也不提供流量控制和拥塞控制。

RTCP同样是基于UDP的,但是每一个RTCP包都只包含一些控制信息,因而会很短,可以把多个RTCP分组封装在一个UDP包中。RTCP的原理是向会话中的所有成员周期性地发送控制包来实现的,应用程序通过接收这些控制数据包,从中获取会话参与者的相关资料,以及网络状况、分组丢失概率等反馈信息,从而能够对服务质量进行控制或者对网络状况进行诊断.

RTCP协议的不同数据包:

SR(Sender Report),类型200. 发送端报告,所谓发送端是指发出RTP数据报的应用程序或者终端,发送端同时也可以是接收端。 RR(Receiver Report),类型201. 接收端报告,所谓接收端是指仅接收但不发送RTP数据报的应用程序或者终端。 SDES,类型202. 源描述,主要功能是作为会话成员有关标识信息的载体,如用户名、邮件地址、电话号码等,此外还具有向会话成员传达会话控制信息的功能。 BYE,类型203. 通知离开,主要功能是指示某一个或者几个源不再有效,即通知会话中的其他成员自己将退出会话。 APP,类型204. 由应用程序自己定义,解决了RTCP的扩展性问题,并且为协议的实现者提供了很大的灵活性。 RTP结构解析

RTP header如下(前12个字节是固定出现的,仅仅在被混合器插入时,才出现CSRC识别符列表):

rtp header

版本号(V):2比特,用来标志使用的RTP版本。 填充位(P):1比特,如果该位置位,则该RTP包的尾部就包含附加的填充字节。 扩展位(X):1比特,如果该位置位的话,RTP固定头部后面就跟有一个扩展头部。 CSRC计数器(CC):4比特,含有固定头部后面跟着的CSRC的数目。 标记位(M):1比特,该位的解释由配置文档(Profile)来承担. 载荷类型(PT):7比特,标识了RTP载荷的类型。 序列号(SN):16比特,发送方在每发送完一个RTP包后就将该域的值增加1,接收方可以由该域检测包的丢失及恢复包序列。序列号的初始值是随机的。 时间戳:32比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时间戳是去除抖动和实现同步不可缺少的。 同步源标识符(SSRC):32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐了MD5随机算法。 贡献源列表(CSRC List):0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。 RTCP结构解析 版本(V):同RTP包头域。 填充(P):同RTP包头域。 接收报告计数器(RC):5比特,该SR包中的接收报告块的数目,可以为零。 包类型(PT):8比特,SR包是200。 长度域(Length):16比特,其中存放的是该SR包以32比特为单位的总长度减一。 同步源(SSRC):SR包发送者的同步源标识符。与对应RTP包中的SSRC一样。 NTP Timestamp(Network time protocol)SR包发送时的绝对时间值。NTP的作用是同步不同的RTP媒体流。 RTP Timestamp:与NTP时间戳对应,与RTP数据包中的RTP时间戳具有相同的单位和随机初始值。 Sender’s packet count:从开始发送包到产生这个SR包这段时间里,发送者发送的RTP数据包的总数. SSRC改变时,这个域清零。 Sender`s octet count:从开始发送包到产生这个SR包这段时间里,发送者发送的净荷数据的总字节数(不包括头部和填充)。发送者改变其SSRC时,这个域要清零。 同步源n的SSRC标识符:该报告块中包含的是从该源接收到的包的统计信息。 丢失率(Fraction Lost):表明从上一个SR或RR包发出以来从同步源n(SSRC_n)来的RTP数据包的丢失率。 累计的包丢失数目:从开始接收到SSRC_n的包到发送SR,从SSRC_n传过来的RTP数据包的丢失总数。 收到的扩展最大序列号:从SSRC_n收到的RTP数据包中最大的序列号, 接收抖动(Interarrival jitter):RTP数据包接受时间的统计方差估计 上次SR时间戳(Last SR,LSR):取最近从SSRC_n收到的SR包中的NTP时间戳的中间32比特。如果目前还没收到SR包,则该域清零。 上次SR以来的延时(Delay since last SR,DLSR):上次从SSRC_n收到SR包到发送本报告的延时。 RTSP工作流程 首先,客户端连接到流服务器并发送一个RTSP描述命令(DESCRIBE)。 流服务器通过一个SDP描述来进行反馈,反馈信息包括流数量、媒体类型等信息。 客户端再分析该SDP描述,并为会话中的每一个流发送一个RTSP建立命令(SETUP),RTSP建立命令告诉服务器客户端用于接收媒体数据的端口。流媒体连接建立完成。 客户端发送一个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。 最后,客户端可发送一个终止命令(TERADOWN)来结束流媒体会话


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有