在开发者交流或者面试中,经常会涉及到RTSP、RTP、RTCP、TCP、UDP等一些概念,这些虽然属于计算机网络中的基本概念,但是更多的人知道的其实就是TCP和UDP,对RTP、RTCP和RTSP,反而会陌生。
在OSI(开放系统互连)七层模型中,RTP/RTCP,TCP,UDP同属传输层,而RTSP则应属于应用层,这样就可以想到,RTSP是使用传输层协议实现的,而RTP较为特殊,可以看作传输层的字层,可以基于TCP也可以基于UDP实现,所以有时候也会被理解为应用层的协议,为区别于RTSP协议,我比较认同把它定义为传输层协议。
RTP
以下数据报字段说明:
- 版本号(V): 2比特,用来标志使用的RTP版本。
- 填充位(P): 1比特,如果该位置位,则该RTP包的尾部就包含附加的填充字节。
- 扩展位(X): 1比特,如果该位置位的话,RTP固定头部后面就跟有一个扩展头部。
- CSRC计数器(CC): 4比特,含有固定头部后面跟着的CSRC的数目。
- 标记位(M): 1比特,该位的解释由配置文档(Profile)来承担.
- 载荷类型(PT): 7比特,标识了RTP载荷的类型,包括所采用的编码算法、采样频率、承载通道等。例如,类型2表明该RTP数据包中承载的是用ITU G.721算法编码的语音数据,采样频率为8000Hz,并且采用单声道。
- 序列号(SN): 16比特,发送方在每发送完一个RTP包后就将该域的值增加1,接收方可以由该域检测包的丢失及恢复包序列。序列号的初始值是随机的。
- 时间戳:32比特,记录了该包中数据的第一个字节的采样时刻。时间戳是去除抖动和实现同步不可缺少的。接收方根据时间戳能够确定数据的到达是否受到了延迟抖动的影响,但具体如何来补偿延迟抖动则是应用程序实现。
- 同步源标识符(SSRC):32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐了MD5随机算法。
- 贡献源列表(CSRC List): 0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。
以下图片中为RTP基于TCP的传输实例
RTCP
RTCP协议的功能是通过不同的RTCP数据报来实现的,如图5:
主要有如下几种类型:
- SR:发送端报告,所谓发送端是指发出RTP数据报的应用程序或者终端,发送端同时也可以是接收端。
- RR:接收端报告,所谓接收端是指仅接收但不发送RTP数据报的应用程序或者终端。
- SDES:源描述,主要功能是作为会话成员有关标识信息的载体,如用户名、邮件地址、电话号码等,此外还具有向会话成员传达会话控制信息的功能。
- BYE:通知离开,主要功能是指示某一个或者几个源不再有效,即通知会话中的其他成员自己将退出会话。
- APP:由应用程序自己定义,解决了RTCP的扩展性问题,并且为协议的实现者提供了很大的灵活性。
不同类型对应不同的数据报格式,因为不是很了解,所以不展开,感兴趣的话可以参考文末链接。
RTSP
RTSP,是为有效地在IP网络上传输流媒体数据而提出的应用层协议。RTSP提供一种可扩展的框架,能够提供可控制的,按需传输的实时数据,比如音频和视频文件。源数据可以包括现场数据的反馈和存储的文件。RTSP对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数 据,RTSP的作用相当于流媒体服务器的远程控制。传输数据可以通过传输层的TCP/UDP协议,RTSP也提供了基于RTP传输机制的一些有效的方法。
RTSP通常工作于可靠的传输协议TCP上,用于发起/结束流媒体传输,而RTP一般工作于UDP上,利用的是UDP低延时的特点,UDP不是可靠传输,可以使用RTCP来实时监控数据传输和服务质量。
RTSP消息格式:
RTSP的消息有两大类,一是请求消息(request),一是回应消息(response),两种消息的格式不同。
-
请求消息:
[方法][URI][RTSP版本][CR][LF]
[消息头][CR][LF]
[消息体][CR][LF]- 方法: 包括OPTIONS回应中所有的命令;
- URI是接收方(服务端)的地址;
-
RTSP版本: 一般都是RTSP/1.0。
每行后面的CR LF表示回车换行,需要接收端有相应的解析,最后一个消息头需要有两个CR LF
以下是抓包实例,消息方法为DESCRIBE:
-
回应消息:
[RTSP版本][状态码][解释][CR][LF]
[消息头][CR][LF]
[消息体][CR][LF]- RTSP版本一般都是RTSP/1.0;
- 状态码是一个数值,200表示成功;
- 解释是与状态码对应的文本解释。
以下是抓包实例,返回一个错误码401,Unauthorized(未授权),因为在发送DESCRIBE消息时,没有携带用户名密码
RTSP客户端与服务端交互过程可以参考雷大神的博文,RTSP协议学习笔记
RTSP(Real Time Streaming Protocol,即实时码流协议)
RTP(Real-time Transport Protocol,即实时传输协议)
RTCP(Real-time Transport Control Protocol,即实时传输控制协议),RTP的配套协议,服务于RTP
1.RTCP数据报
2.Wireshark 抓包分析 RTSP/RTP/RTCP 基本工作过程
3.RTP基于UDP和TCP分别实现的解析
4.流媒体协议RTSP、HTTP、HTTPS、SDP四种区别解析
5.RTSP协议学习笔记