RTSP(Real Time Streaming Protocol 实时流协议)建立并控制一个或几个时间同步的连续流媒体,对媒体流提供了诸如开始、暂停、快进、停止等控制,RTSP的作用相当于流媒体服务器的远程控制,而它本身并不传输数据。
官方指导文档参考:RFC 2326 - Real Time Streaming Protocol (RTSP)?
它的语法和运作跟HTTP 1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。
RTSP具有重新导向功能,可视实际负载情况来转换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。
RTSP协议与HTTP协议的语法非常类似,且都是纯文本协议,但它们也有区别:
RTSP的有很多优点:
? ?RTSP常用的方法包括:OPTIONS、DESCRIBE、ANNOUNCE、SETUP、TEARDOWN、PLAY、PAUSE、GET_PARAMETER和SET_PARAMETER等。详细使用介绍如下:
方法 | 方向 | 是否必须 | 含义 |
OPTIONS | C->S | 否 | 获在任意时刻由客户端主动发出,取服务器支持的方法。它不影响服务器的状态 |
DESCRIBE | C->S | 否 | 向服务器获取URL指定的媒体对象的描述,其中Accept字段指定了描述格式 |
ANNOUNCE | C->S S->C | 否 | 当客户端向服务器发送时,表示的是将通过请求 URL 识别的表示描述或者媒体对象提交给服务器 当服务器向客户端发送时,表示的是通知客户端更新会话信息 |
SETUP | C->S | 是 | 客户端向服务器请求建立会话并准备传输。请求信息主要包括传输协议和客户端的端口号 |
PLAY | C->S | 是 | 客户端主动通知服务器以SETUP指定的机制开始发送数据。其中Range字段指定了播放的起止时间,当多个PLAY请求到达时,服务器会将PLAY请求排成队列,顺序执行,即必须等待第一个PLAY的时间完成后,才会继续处理第二个PLAY消息。 |
PAUSE | C->S | 否 | 客户端请求服务器的媒体流传输临时暂停。可以通过Range参数在指定时间点暂停,也可以指定某股流暂停,例如如果指定音频流暂停,则播放将是无音状态 |
RECORD | C->S | 否 | RECORD通知服务器方法客户端将会根据之前的描述开始记录媒体数据。 其中timestamp 字段反映开始和结束时间 (UTC)。如果该字段不存在,则会使用媒体描述中的开始或结束时间。 如果会话已经开始,则立即开始录制。 ? ? 服务器决定是将记录的数据存储在 request-URI 下还是另一个 URI 下。 如果服务器不使用 request-URI,则响应应该是 201(已创建)并包含描述请求状态并引用新资源的实体和 Location 标头。 |
REDIRECT | S->C | 否 | 重定向请求通知客户端它必须连接到另一个服务器位置。 它包含强制标头 Location,它指示客户端应该发出对该 URL 的请求。 它可能包含参数Range,表示重定向何时生效。 如果客户端想要继续发送或接收此 URI 的媒体,客户端必须为当前会话发出 TEARDOWN 请求,并在指定主机上为新会话发出 SETUP。 |
GET_PARAMETER | C->S S->C | 否 | GET_PARAMETER 请求检索 URI 中指定的表示或流的参数值。 回复和响应的内容留给实现。 没有实体主体的 GET_PARAMETER 可用于测试客户端或服务器的活跃度(“ping”)。 |
SET_PARAMETER | C->S S->C | 否 | 这个方法请求设置演示或URL指定流的参数值。请求仅应包含单个参数,允许客户端决定某个特殊请求为何失败。如请求包含多个参数,所有参数可成功设置,服务器必须只对该请求起作用。服务器必须允许参数可重复设置成同一值,但不让改变参数值。注意:媒体流传输参数必须用SETUP命令设置。将设置传输参数限制为SETUP有利于防火墙。 |
TEARDOWN | C->S | 是 | TEARDOWN请求停止给定URL流发送,释放相关资源。 |
RTSP有两类报文:请求报文和响应报文。请求报文是指从客户向服务器发送请求报文,响应报文是指从服务器到客户的应答。RTSP报文由三部分组成,即开始行、首部行和实体主体。
在请求报文中,开始行就是请求行,RTSP请求报文的结构如下图所示:
下面是SETUP请求消息的一个Wireshark抓包,我们以此为例进行报文解析:
?从上图的抓包可以明显看出,RTSP的第一行(请求行)的内容包括:
方法名称(SETUP) + 空格 + URL地址 + 空格 + RTSP版本 +?回车符(CR)和换行符(LF)
?第二、第三、第四行表示的是该消息的各字段名称及其对应的值:
字段名 + 空格 + 字段值 +???回车符(CR)和换行符(LF)
?最后一行则直接为回车符(CR)和换行符(LF),表示本次请求报文结束
响应报文的开始行是状态行,RTSP响应报文的结构如下图所示:
下面是SETUP响应消息的一个Wireshark抓包,我们以此为例进行报文解析:?
?从上面的抓包可以看出,RTSP的第一行(状态行)的内容包括:
RTSP版本 + 空格 + 状态码 + 空格 + 状态语? +?回车符(CR)和换行符(LF)
第二、第三、第四、第五行表示的是该消息的各字段名称及其对应的值:
字段名(CSeq:) + 空格 + 字段值 +???回车符(CR)和换行符(LF)
?
?最后一行则也直接为回车符(CR)和换行符(LF),表示报文结束
下面是一个简单的RTSP交互过程,具有一定的代表性:
?
RTSP的响应内容通常包含3位整数响应码以及一个原因短语,短语的目的是给出状态代码的简短文本描述, 客户端不需要检查或显示原因短语。 按照响应码的首位数字区别,可以分为以下五个类别:
当然,RTSP的错误码和RTSP方法是强相关的,某些错误可能只会在特定方法中才会触发,详细错误码信息如下:
错误码 | 原因短语 | 方法 |
---|---|---|
100 | Continue | All |
200 | Success | All |
201 | Created? | RECORD |
250 | Low on Storage Space | RECORD |
300 | Multiple Choices? | All |
301 | Moved Permanently | All |
302 | Moved Temporarily? | All |
303 | See Other? | All |
305 | Use Proxy | All |
400 | Bad Request | All |
401 | Unauthorized | All |
402 | Payment Required | All |
403 | Forbidden | All |
404 | Not Found? | All |
405 | Method Not Allowed? | All |
406 | Not Acceptable ? | All |
407 | Proxy Authentication Required | All |
408 | Request Timeout | All |
410 | Gone | All |
411 | Length Required | All |
412 | Precondition Failed | DESCRIBE, SETUP |
413 | Request Entity Too Larg | All |
414 | Request-URI Too Long | All |
415 | Unsupported Media Type | All |
451 | Invalid parameter | SETUP |
452 | Illegal Conference Identifier | SETUP |
453 | Not Enough Bandwidth | SETUP |
454 | Session Not Found? | All |
455 | Method Not Valid In This State | All |
456 | Header Field Not Valid? | All |
457 | Invalid Range | PLAY |
458 | Parameter Is Read-Only | SET_PARAMETER |
459 | Aggregate Operation Not Allowed | All |
460 | Only Aggregate Operation Allowed | All |
461 | Unsupported Transport ? | All |
462 | Destination Unreachable? | All |
500 | Internal Server Error | All |
501 | Not Implemented? | All |
502 | Bad Gateway ? ? | All |
503 | Service Unavailable? | All |
504 | Gateway Timeout? | All |
505 | ?RTSP Version Not Supported | All |
551 | Option not support ?? | All |