什么是RTSP

RTSP(Real Time Streaming Protocol)是早期常用的流媒体协议,它用来建立客户端与服务器之间的会话,客户端发布播放暂停等命令,协议由RealNetworks、Netscape和哥伦比亚大学合作开发,
并由IETF标准化(即RFC2326,此外尚有RFC7826发布的RTSP2.0协议)。

RTSP协议的默认端口是554,RTSP与HTTP与相比,HTTP请求由客户机发出,服务器作出响应,但是RTSP客户机和服务器都可以发出请求,即RTSP可以是双向的。

RTSP是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,实际传输时所用的网络通讯协定并不在其定义的范围内。
RTSP通常与RTP和RTCP协议共同使用,真正的流媒体数据通过RTP或RTCP进行传输。同时因为RTSP具有重定向功能,可视实际负载情况来转换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。

RTSP是如何工作的

首先RTSP是基于文本的协议,采用 ISO10646 字符集,使用 UTF-8 编码方案。

RTSP 中所有的操作都是通过服务器和客户端的消息应答机制完成的,其中消息包括请 求和应答两种。

基于文本的协议使其以自描述方式增加可选参 数更容易,接口中采用 SDP 作为描述语言。关于SDP的简介,可以参考下笔者之前的学习笔记《WebRTC之SDP协议》

RTSP、RTP、RTCP协议简介_webrtc

从图中我们可以看出主要有七个阶段,每个阶段所负责的事情大概如下:

OPTIONS阶段:
客户端向服务器端发现 OPTIONS,请求可用的方法。
服务器端回复客户端,消息中包含当前可用的方法。

DESCRIBE阶段:
客户端向服务器请求媒体描述文件,一般通过rtsp开头的url来发起请求,格式为 sdp。
服务器回复客户端 sdp 文件,该文件告诉客户端服务器有哪些音视频流,有什么属性,如编 解码器信息,帧率等。

SETUP阶段:
为音视频数据的传输准备通道,客户端向服务器端发起建立连接请求,请求建立会话连接,准备开始接收音视频数据,请求信息描述了期望音视频数据包基于UDP还是TCP传输,
指定了RTP,RTCP的端口,以及是单播还是组播等相关信息。

服务器端收到客户端请求后,根据客户端请求的端口号确定发送控制数据的端口以及音视频数据的端口。

SET_PARAMETER阶段:
传输参数设定阶段,比如共同采用那种编码格式,采用的分辨率等。

PLAY阶段:
客户端向服务端请求播放媒体。
服务器回复客户端 200 OK! 之后开始通过SETUP中指定的端口开始发送数据!

RTP/RTCP阶段:
使用约定的RTP或RTCP端口传输流媒体数据传输阶段,这个没什么好说的。

TEAR DOWN阶段:
结束阶段,请求停止给定URL流发送,释放相关资源,这个也没什么好说的。

RTP/RTCP

RTP(Real-time Transport Protocol)实时传输协议,是用于网络上针对多媒体数据流的一种传输层协议。RTP协议和RTP控制协议RTCP一起使用,RTP的典型应用建立在UDP上,但也可以在TCP等其他协议之上工作。

因为RTP本身只保证实时数据的传输,并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,所以它需要依靠RTCP提供这些服务。

RTCP(Real-Time Transport Control Protocol)实时传输控制协议。它是RTP的一个姐妹协议,与RTP进行搭配使用能以有效的反馈和最小的开销使传输效率最佳化,既达到了实时传输的目的,又弥补了RTP传输不可靠的缺陷。

RTCP协议本身并不发送数据,而是收集客户端的统计信息,包括传输字节数、传输分组数、丢失分组数、网络延迟、Jitter(抖动)等,服务器可籍此改变码率或调节数据发送速度。

RTCP如何保证RTP的传输质量?

当应用程序开始一个RTP会话时将使用两个端口:一个给RTP,一个给RTCP。
在RTP的会话之间周期的发放一些RTCP包以用来传监听服务质量和交换会话用户信息等功能。
RTCP包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,服务器可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。

RTCP和RTP配合使用,它们能以有效的反馈和最小的开销使传输效率最佳化,因而特别适合传送网上的实时数据。根据用户间的数据传输反馈信息,可以制定流量控制的策略,而会话用户信息的交互,可以制定会话控制的策略。

SRTP

SRTP(Secure Real-time Transport Protocol)是对RTP协议的扩展,旨在提供数据加密、消息认证、完整性保证和重放保护等。
SRTP使用AES对RTP/RTCP数据包的载荷进行加密保护,使用HMAC-SHA1提供完整性保护和消息认证。

SRTP和RTP的关系大概就像HTTPS与HTTP的关系,一个是安全的一个是非安全的。

关注我,一起进步,人生不止coding!!!

RTSP、RTP、RTCP协议简介_客户端_02