实时流协议(RTSP)简介

RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学、网景(Netscape)和Real Networks公司提交的IETF RFC标准。该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。HTTP与RTSP相比,HTTP请求由客户机发出,服务器作出响应;使用RTSP时,客户机和服务器都可以发出请求,即RTSP可以是双向的RTSP是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通讯协定并不在其定义的范围内,服务器端可以自行选择使用TCP或UDP来传送串流内容,它的语法和运作跟HTTP 1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。而前面提到的允许同时多个串流需求控制(Multicast),除了可以降低服务器端的网络用量,更进而支持多方视讯会议(Video Conference)。因为与HTTP1.1的运作方式相似,所以代理服务器(Proxy)的快取功能(Cache)也同样适用于RTSP,并因RTSP具有重新导向功能,可视实际负载情况来转换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。

RTSP是由Real Network和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。RTSP对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,RTSP的作用相当于流媒体服务器的远程控制。服务器端可以自行选择使用TCP或UDP来传送串流内容,它的语法和运作跟HTTP 1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。

RTSP是应用级协议,控制实时数据的发送。RTSP提供了一个可扩展框架,使实时数据,如音频与视频的受控点播成为可能。数据源包括现场数据与存储在剪辑中数据。该协议目的在于控制多个数据发送连接,为选择发送通道,如UDP、组播UDP与TCP,提供途径,并为选择基于RTP上发送机制提供方法。

RTSP建立并控制一个或几个时间同步的连续流媒体。尽管连续媒体流与控制流交换是可能的,通常它本身并不发送连续流。换言之,RTSP充当多媒体服务器的网络远程控制。RTSP连接没有绑定到传输层连接,如TCP。RTSP连接期间,RTSP用户可打开或关闭多个对服务器的可传输连接以发出RTSP请求。此外,可使用无连接传输协议,如UDP。RTSP流控制的流可能用到RTP,但RTSP操作并不依赖用于携带连续媒体的传输机制。

RTSP中并没有连接(connection)的概念,服务器(Server)只管理通过标识符进行标记的会话(session)。RTSP会话也从并未绑定至任何传输层连接(如TCP)。在一个RTSP会话生命周期中,RTSP客户端(Client)可能打开、关闭许多可靠传输层连接以向服务器发出RTSP请求(request)。此外,RTSP也有可能使用如UDP的无连接传输协议。

一次基本的RTSP操作过程是

(1). 首先,客户端连接到流服务器并发送一个RTSP描述命令(DESCRIBE)。

(2). 流服务器通过一个SDP描述来进行反馈,反馈信息包括流数量、媒体类型等信息。

(3). 客户端再分析该SDP描述,并为会话中的每一个流发送一个RTSP建立命令(SETUP),RTSP建立命令告诉服务器客户端用于接收媒体数据的端口。

(4). 流媒体连接建立完成后,客户端发送一个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。

(5). 最后,客户端可发送一个终止命令(TERADOWN)来结束流媒体会话。

RTSP用于C/S模型,是一种基于文本的协议,采用UTF-8编码中的ISO 10646字符集。一行可通过CRLF终止,但接收端需要做好解释CR和LF作为一行终止符的准备。

RTSP请求可以几种不同方式传送

(1). 持久传输连接,用于多个请求/响应传输;

(2). 每个请求/响应传输一个连接;

(3). 无连接模式。

RTST方法定义:P----演示,S----流,C----用户端,S----服务器端,如下图所示:

实时流协议(RTSP)简介_第1张图片

RTST状态:RTSP控制通过单独协议发送的数据流,与控制通道无关。例如,RTSP控制可通过TCP连接,而数据流通过UDP。因此,即使媒体服务器没有收到请求,数据也会继续发送。在连接生命期,单个媒体流可通过不同TCP连接顺序发出请求来控制。所以,服务器需要维持能联系流与RTSP请求的连接状态。RTSP中很多方法与状态无关,但下列方法在定义服务器流资源的分配与应用上起着重要的作用:

(1). SETUP:让服务器给流分配资源,启动RTSP连接。

(2). PLAY与RECORD:启动SETUP分配流的数据传输。

(3). PAUSE:临时停止流,而不释放服务器资源。

(4). TEARDOWN:释放流的资源,RTSP连接停止。

标识状态的RTSP方法使用连接头段识别RTSP连接,为响应SETUP请求,服务器连接产生连接标识。

RTSP协议与HTTP协议区别:

(1). RTSP引入了几种新的方法,比如DESCRIBE、PLAY、SETUP 等,并且有不同的协议标识符,RTSP为rtsp 1.0,HTTP为http 1.1。

(2). HTTP是无状态的协议,而RTSP为每个会话保持状态。

(3). RTSP协议的客户端和服务器端都可以发送Request请求,而在HTTPF协议中,只有客户端能发送Request请求。

(4). 在RTSP协议中,载荷数据一般是通过带外方式来传送的(除了交织的情况),及通过RTP协议在不同的通道中来传送载荷数据。而HTTP协议的载荷数据都是通过带内方式传送的,比如请求的网页数据是在回应的消息体中携带的。

(5). 使用ISO10646(UTF-8) 而不是ISO 8859-1,以配合当前HTML的国际化。

(6). RTSP使用URI请求时包含绝对URI。而由于历史原因造成的向后兼容性问题,HTTP/1.1只在请求中包含绝对路径,把主机名放入单独的标题域中。

RTSP特点

(1). 可扩展性:新方法和参数很容易加入RTSP。

(2). 易解析:RTSP可由标准HTTP或MIME解析器解析。

(3). 安全:RTSP使用网页安全机制。

(4). 独立于传输:RTSP可使用不可靠数据报协议(EDP)、可靠数据报协议(RDP);如要实现应用级可靠,可使用可靠流协议。

(5). 多服务器支持:每个流可放在不同服务器上,用户端自动与不同服务器建立几个并发控制连接,媒体同步在传输层执行。

(6). 记录设备控制:协议可控制记录和回放设备。

(7). 流控与会议开始分离:仅要求会议初始化协议提供,或可用来创建惟一会议标识号。特殊情况下,可用SIP或H.323来邀请服务器入会。

(8). 适合专业应用:通过SMPTE时标,RTSP支持帧级精度,允许远程数字编辑。

(9). 演示描述中立:协议没强加特殊演示或元文件,可传送所用格式类型;然而,演示描述至少必须包括一个RTSP URL。

(10). 代理与防火墙友好:协议可由应用和传输层防火墙处理。防火墙需要理解SETUP方法,为UDP媒体流打开一个”缺口”。

(11). HTTP友好:此处,RTSP明智地采用HTTP观念,使现在结构都可重用。结构包括Internet内容选择平台(PICS)。由于在大多数情况下控制连续媒体需要服务器状态,RTSP不仅仅向HTFP添加方法。

(12). 适当的服务器控制:如用户启动一个流,必须也可以停止一个流。

(13). 传输协调:实际处理连续媒体流前,用户可协调传输方法。

(14). 性能协调:如基本特征无效,必须有一些清理机制让用户决定哪种方法没生效。这允许用户提出适合的用户界面。

RTSP会话(RTSP session):包括由客户端建立媒体流传输机制(SETUP),使用播放(PLAY)或录制(RECORD)开始传送流,用停止(TEARDOWN)关闭流。

SDP(Session Description Protocol )会话描述协议:用于描述多媒体会话,它为会话通知、会话初始和其它形式的多媒体会话初始等操作提供服务。SDP的设计宗旨是通用性协议,所以它可以应用于很大范围的网络环境和应用程序,但SDP不支持会话内容或媒体编码的协商操作。

客户端要播放RTSP媒体流,就需要知道媒体源的URL,RTSP的URL格式一般如下

(1). rtsp://10.1.125.144:8554/test

(2). rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov

(3). rtsp://admin:[email protected]:554

注:以上内容均来自网络整理,主要参考:

1. https://baike.baidu.com/item/RTSP/1276768?fromtitle=RTSP%E5%8D%8F%E8%AE%AE&fromid=3361755

2. https://blog.csdn.net/leixiaohua1020/article/details/11955341

3. https://www.jianshu.com/p/b0474f65e729

GitHub: https://github.com/fengbingchun/OpenCV_Test 

你可能感兴趣的:(OpenSSL/HTTP,Network,protocol/Socket)