协议简介
RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议。RTSP对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,数据的传输通过rtp协议。RTSP的作用相当于流媒体服务器的远程控制。服务器端可以自行选择使用TCP或UDP来传送串流内容该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。
RTSP使用场景安防监控摄像头。在监控领域中RTSP使用比较广泛,监控摄像头相当于一个RTSP服务器,App是一个RTSP客户端,这样我们可以通过手机实时查看摄像头信息。同时还可以通过RTSP协议实现暂停、录制功能。
客户端-服务端协议交互
上图描述了客户端-服务端RTSP交互中必须的流程,还有些可选的方法像PAUSE、RECORD、REDIRECT、SET_PARAMETER等方法也可以在我们需要的时候调用。
客户端-服务端交互抓包
rtsp协议交互抓包图:
rtp抓包图:
上面介绍了rtsp 客户端-服务端交互的过程及抓包分析。这里的抓包软件使用的是WireShark; 像我们平常使用更多的是Charles,它在抓取Http、Https协议挺不错的,但Charles在抓取流媒体协议RTMP、RTSP、RTP等的时候就不是很方便了。 了解一个协议,核心就是掌握其消息格式以及协议交互流程。上面介绍了RTSP协议的交互流程,下面重点分析下每一步的消息格式。
RTSP协议格式
RTSP中所有的操作都是通过服务器和客户端的消息应答机制完成的,其中消息包括请求和应答两种,RTSP是对称的协议,客户机和服务器都可以发送和回应请求。RTSP是一个基于文本的协议,它使用UTF -8编码(RFC2279)和ISO10646字符序列,采用RFC882定义的通用消息格式,每个语句行由CRLF结束。RTSP的消息包括请求和应答两类。
请求消息
消息说明:请求消息包括请求行、请求头、请求体;与Http的消息格式类似;RTSP的请求体部分很少使用,这里不再进行讲解,后面我们抓包分析的时候也会看到请求体基本都是无数据的。 方法:表示RTSP的请求方法OPIONS、DESCRIBE、SETUP、PLAY、TEARDOWN等。 URL:表示接收方地址。例如:rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov 版本:RTSP的版本号,一般为 RTSP/1.0 CR:表示回车 LF:表示换行 请求头:以key:value 的形式封装请求头数据; 我们通过ffplay播放 rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.m,wireshark 抓包一个请求消息:
这里就简单分析下文本部分,16进制数据等后面再详细分析。 消息行:
- 方法:OPTIONS
- URL:rtsp://wowzaec2demo.streamlock.net:554/vod/mp4:BigBuckBunny_115k.mov
- 版本:RTSP/1.0
消息头: CSeq: 表示序列号,由于OPTIONS方法是RTSP请求的第一个方法,所以序列号为1; user-Agent: 表示代理;
回应消息
回应消息的格式如下图所示:
消息说明:回应消息也是包括回应行、回应头、回应体;与Http的回应消息格式也是类似;RTSP的回应体部分很少使用,这里不再进行讲解,后面我们抓包分析的时候也会看到回应体基本都是无数据的。 版本:RTSP的版本号,一般为 RTSP/1.0 状态码:表示请求状态,同http的返回状态,如200,表示OK。 状态码由三位数组成,表示方法执行的结果,定义如下:
- 1XX:保留,将来使用;
- 2XX:成功,操作被接收、理解、接受(received,understand,accepted);
- 3XX:重定向,要完成操作必须进行进一步操作;
- 4XX:客户端出错,请求有语法错误或无法实现;
- 5XX:服务器出错,服务器无法实现合法的请求。
短语:就是状态码的解释; 回应头:以key:value 的形式封装回应头数据; wireshark 抓包一个OPTIONS回应消息:
OPTIONS回应消息参考上面的介绍自行分析。
总结 文章主要是介绍了RTSP消息格式以及协议交互流程,并通过抓包的方式分析RTSP具体的交互过程及交互协议的分析。后面有时间再具体分析每一个具体RTSP消息协议、SDP、RTP、RTCP及场景实践。
|