RTSP协议 是一种基于C/S架构的并用于双方通信约定的流媒体协议。全称实时流协议(Real Time Streaming Protocol). 集成了网络实时控制、数据传输接收功能。客户端遵循协议发送指令控制多媒体的资源的功能如播放、暂停、停止、获取多媒体信息熟悉功能。
一:框架协议层次
RTSP协议遵循TCP/IP协议, 从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。其和ISO 七层模型的关系如下:
TCP/IP结构对应OSI结构
TCP/IP |
OSI |
应用层 |
应用层 表示层 会话层 |
主机到主机层(TCP)(又称传输层) |
传输层 |
网络层(IP)(又称互联层) |
网络层 |
网络接口层(又称链路层) |
数据链路层 |
物理层 |
详情可以参考 百科解释
https://baike.so.com/doc/2883582-3043043.html#2883582-3043043-1_1
RTSP 是一种基于文本的应用层协议,RTSP 本身的处于应用层,本身用于信令的交互。
其和TCP/IP 和ISO 七层的关系如下
二:协议通信流程
RTSP 遵循C/S的架构,客户端主动按照TCP三次模式协议规范连接服务器, 实现查询,获取多媒体信息,连接等功能。依据rfc2326的第十章的规定, RTSP 本身功能上包含如下的功能
method direction object requirement
DESCRIBE C->S P,S recommended
ANNOUNCE C->S, S->C P,S optional
GET_PARAMETER C->S, S->C P,S optional
OPTIONS C->S, S->C P,S required
(S->C: optional)
PAUSE C->S P, Srecommended
PLAY C->S P, Srequired
RECORD C->S P, Soptional
REDIRECT S->C P,S optional
SETUP C->S Srequired
SET_PARAMETER C->S, S->C P,S optional
TEARDOWN C->S P,S required
P: 呈现(Presentation),S:流(Stream)
详细描述如下
2.1RTSP的主要方法:
方法 |
方向 |
对象 |
要求 |
含义 |
DESCRIBE |
C->S |
P,S |
推荐 |
检查演示或媒体对象的描述, 也允许使用接收头指定用户理解的描述格式。 DESCRIBE的答复-响应组成媒体RTSP初始阶段 |
ANNOUNCE |
C->S S->C |
P,S |
可选 |
当从用户发往服务器时, ANNOUNCE将请求URL识别的演示或媒体对象描述发送给服务器; 反之,ANNOUNCE实时更新连接描述。 如新媒体流加入演示,整个演示描述再次发送, 而不仅仅是附加组件,使组件能被删除 |
GET_PARAMETER |
C->S S->C |
P,S |
可选 |
GET_PARAMETER 请求检查RUL指定的演示与媒体的参数值。 没有实体体时, GET_PARAMETER也许能用来测试用户与服务器的连通情况 |
OPTIONS |
C->S S->C |
P,S |
要求 |
可在任意时刻发出OPTIONS请求, 如用户打算尝试非标准请求,并不影响服务器状态 |
PAUSE |
C->S |
P,S |
推荐 |
PAUSE请求引起流发送临时中断。 如请求URL命名一个流,仅回放和记录被停止; 如请求URL命名一个演示或流组, 演示或组中所有当前活动的流发送都停止。 恢复回放或记录后,必须维持同步。 在SETUP消息中连接头超时参数所指定时段期间被暂停后, 尽管服务器可能关闭连接并释放资源,但服务器资源会被预订 |
PLAY |
C->S |
P,S |
要求 |
PLAY告诉服务器以SETUP指定的机制开始发送数据; 直到一些SETUP请求被成功响应,客户端才可发布PLAY请求。 PLAY请求将正常播放时间设置在所指定范围的起始处, 发送流数据直到范围的结束处。 PLAY请求可排成队列,服务器将PLAY请求排成队列,顺序执行 |
RECORD |
C->S |
P,S |
可选 |
该方法根据演示描述初始化媒体数据记录范围, 时标反映开始和结束时间; 如没有给出时间范围,使用演示描述提供的开始和结束时间。 如连接已经启动,立即开始记录, 服务器数据请求URL或其他URL决定是否存储记录的数据; 如服务器没有使用URL请求,响应应为201(创建), 并包含描述请求状态和参考新资源的实体与位置头。 支持现场演示记录的媒体服务器必须支持时钟范围格式, smpte格式没有意义 |
REDIRECT |
S->C |
P,S |
可选 |
重定向请求通知客户端连接到另一服务器地址 。它包含强制头地址,指示客户端发布URL请求; 也可能包括参数范围,以指明重定向何时生效。 若客户端要继续发送或接收URL媒体, 客户端必须对当前连接发送TEARDOWN请求, 而对指定主执新连接发送SETUP请求 |
SETUP |
C->S |
S |
要求 |
对URL的SETUP请求指定用于流媒体的传输机制。 客户端对正播放的流发布一个SETUP请求, 以改变服务器允许的传输参数。 如不允许这样做,响应错误为"455 Method Not Valid In This State”。 为了透过防火墙,客户端必须指明传输参数, 即使对这些参数没有影响 |
SET_PARAMETER |
C->S S->C |
P,S |
可选 |
请求设置演示或URL指定流的参数值。 请求仅应包含单个参数, 允许客户端决定某个特殊请求为何失败。 如请求包含多个参数,所有参数可成功设置, 服务器必须只对该请求起作用。 服务器必须允许参数可重复设置成同一值,但不让改变参数值。 注意:媒体流传输参数必须用SETUP命令设置。 将设置传输参数限制为SETUP有利于防火墙。 将参数划分成规则排列形式,结果有更多有意义的错误指示 |
TEARDOWN |
C->S |
P,S |
要求 |
TEARDOWN请求停止给定URL流发送,释放相关资源 。如URL是此演示URL,任何RTSP连接标识不再有效。 除非全部传输参数是连接描述定义的, SETUP请求必须在连接可再次播放前发布 |
注:P---演示,C---客户端,S---服务器, S(对象栏)---流
2.2 一次流程的过程如下
1.客户端按照协议标准 发送OPTIONS 获取服务器的功能信息。
2.服务器 回复OPTIONS 告知rtsp服务器提供的服务功能。
3.客户端 发送DESCRIBE针对一个多媒体文件的描述请求
4.服务器 回复 告知该文件的SDP 描述信息。
5.客户端 发送 SETUP 命令 要求服务端建立改文件的传输机制。
6.服务器 回复 告知OK。
7.客户端 发送 PLAY 执行播放功能
8.服务器 回复告知OK.
流程图如下
三:协议信息语法单位
RTSP 有着自身规定的语法结构组成。
3.1 RTSP URL的语法结构
不管我们是用VLC还是其他自己的开发的客户端去观看流媒体, 总是要遵循RTSP的 URL语法结构规范。详情参见RFC2326的第三节
3 Protocol Parameters
rtsp_URL = ( "rtsp:" | "rtspu:" )"//" host [ ":" port ] [ abs_path ]
The "rtsp" and "rtspu" schemes are used to refer to network resources via the RTSP protocol. This section defines the scheme-specific
syntax and semantics for RTSP URLs.
RTSP 或者RTSPU 表示遵循RTSP的协议规范。
host = <A legal Internet host domain name of IP address(in dotted decimal form), as defined by Section 2.1of RFC 1123 \cite{rfc1123}>
host 表示服务器的IP地址
port = *DIGIT
port 表示端口号
abs_path is defined in [H3.2.1].
abs_path 表示RTSPServer端的流媒体文件的标记描述
比如:rtsp://192.168.11.100:8554/h264ESVideoTest
表示 按照RTSP协议请求播放IP地址为192.168.11.100 端口号为8554的h264ESVideoTest文件
3.2 RTSP 报文数据语法结构
RTSP 采用模仿HTTP基于文本的形式,数据+CRLF的组合构成每一行信息。针对发送的方向,又分为如下的两种类型。
请求报文,请求报文是客户端发出,发向服务端,请求实现一些功能或者查询信息。
根据语法 RTSP的报文由三部分构成,开始行、首部行和实体主体。
开始行(请求端就是请求行):
Method 空格 Request-URI 空格 RTSP-Version CRLF
其中
RTSP请求报文的方法包括:OPTIONS、DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE、GET_PARAMETER和SET_PARAMETER。
URL:表示目标的IP地址+端口号+流媒体文件的标记描述
RTSP-Version: 表示 RTSP的协议版本
例如
OPTIONS rtsp://192.168.11.100:8554/h264ESVideoTest RTSP/1.0
首部行:首部行包含的信息导致本身往往有多行
“首部字段名” + “:” + “VALU值” + “CRLF” 组成
首部字段名 (
Require-Header)包括如下的功能
request-header =Accept |
Accept-Encoding |
Accept-Language |
Authorization |
Proxy-Require |
User-Agent |
Range |
Scale |
Session |
Speed |
Transport
例子如下:
CSeq: 2
User-Agent: LibVLC/2.2.6 (LIVE555 Streaming Media v2016.02.22)
实体主体
实体往往不用
因此 请求报文整体上如下图
响应报文,相应报文是服务端发出, 发向客户端,响应客户端请求的功能。
同发送报文,相应报文也是有三部分组成
开始行(请求端就是请求行):
Method 空格 Request-URI 空格 RTSP-Version CRLF
其中
RTSP请求报文的方法包括:OPTIONS、DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE、GET_PARAMETER和SET_PARAMETER。
URL:表示目标的IP地址+端口号+流媒体文件的标记描述
RTSP-Version: 表示 RTSP的协议版本
例如
Response: RTSP/1.0 200 OK\r\n
首部行:首部行包含的信息导致本身往往有多行
“首部字段名” + “:” + “VALU值” + “CRLF” 组成
首部字段名 (
Response-Header)包括如下的功能
Response-header = Location
| Proxy-Authenticate
| Public
| Retry-After
| Server
| Vary
| WWW-Authenticate
例子如下:
CSeq: 2
Date: Mon, Sep 18 2017 00:02:36 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN,PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER
实体主体
实体往往不用
因此 响应报文整体上如下图