RTSP常用方法
上一篇,我们介绍了RTSP的基本知识点,接下来开始我们介绍RTSP常用的方法。
一.OPTION(request)
OPTIONS一般为RTSP客户端发起的第一条请求指令,得到服务端提供了哪些方法,我们来详细说下各个字段:
OPTIONS:标识请求命令的类型;
RTSP URI:请求的服务端的URI,以rtsp://开头的地址,一般为rtsp://ip:554(rtsp默认端口号);
RTSP VER:标识RTSP 版本号,一般常见RTSP/1.0;
CSeq:数据包序列号,由于OPTIONS一般而言为RTSP请求的第一条指令,一般而言,针对OPTIONS,该值为1;
User-Agent:用户代理;
我们来看一个抓包文件:
该抓包文件中,OPTIONS请求的服务器的URI为rtsp://192.168.0.110:8554;RTSP的版本号为RTSP/1.0;CSeq为数据包的序列号,这里为2;User-Agent用户代理的值为User-Agent: LibVLC/3.0.1 (LIVE555 Streaming Media v2018.02.18)。
回复消息的结构
OPTIONS的回复遵循RTSP response消息的格式,第一行回复RTSP的版本,状态码,状态描述;然后是序列号,与OPTION请求中的序列号相同;之后是Public字段,用于描述服务器当前提供了哪些方法;最后是Date字段,表示日期。
我们来看一个抓包文件:
抓包文件中:
回复的消息中RTSP版本为RTSP/1.0,
状态码为200, 表示正常,
状态描述字符为OK;
CSeq的值为2,与OPTIONS请求中的序列号一致;
Public表示了服务端支持的方法:DESCRIBE,PLAY,PAUSE,SETUP,TEARDOWN,SET_PARAMERTER,GET_PARAMETER;
二、DESCRIBE
向服务器请求会话描述信息(SDP)。
DESCRIBE的格式
1.请求格式:·
首先用DESCRIBE描述请求类型;然后在URI中请求的服务器端地址;RTSP_VER表示RTSP的版本号,在加入\r\n消息头结束;
消息体包含以下字段:
CSeq:RTSP序列号,一般DESCRIBE包在RTSP请求过程中的序列号为3,之后加入\r\n表示此条目结束;
UserAgent : 指明用户代理,由于是最后一个条目,之后加入\r\n表示此条目结束。
Accept:指明接收数据的格式,如application/sdp表示接收sdp信息,加入两组\r\n表示结束;
我们来看一个抓包文件:
回复数据看一下抓包数据:
三、SETUP
SETUP请求的作用是指明媒体流该以什么方式传输;每个流PLAY之前必须执行SETUP操作;发送SETUP请求时,客户端会指定两个端口,偶数端口用来接收RTP数据,相邻的奇数端口用于接收RTCP数据看一下抓包数据:
该SETUP请求中,Transport字段声明了两个端口,38340和38341,同时指明了通过UDP发送RTP数据,,unicast表示传输方式为单播!请求之后RTSP服务器的回复比较简单,回复200 OK消息,同时在Transport字段中增加sever_port,指明对等的服务端RTP和RTCP传输的端口,增加ssrc字段,增加mode字段,同时返回一个session id,用于标识本次会话连接,之后客户端发起PLAY请求的时候需要使用该字段。看一下抓包数据:
通过该抓包文件,我们可以看出,服务端对应SETUP请求的RTP和RTCP的传输端口分别为55013和55014;ssrc的值为2D0BF75A;mode="play"表示当前rtsp连接是播放模式!
四、PLAY
PLAY消息是客户端发送的播放请求,发送播放请求的时候可以指定播放区间!发起播放请求后,如果连接正常,则服务端开始播放,即开始向客户端按照之前在TRASPORT中约定好的方式通过RTP包发送音视频数据包!播放流程便这样开始了!直接看图:
通过抓包文件,我们可以看到,该请求是第6条交互指令(笔者做实验做包时vlc的steup发了两条),会话id是之前setup请求的回复消息返回的session id,Range的值为"npt=0.0000-",表示从开始播放,默认一直播放!同样,客户端发送PLAY请求之后,服务端会回复RTSP消息如下:
可以看到,该请求是第6条交互指令,会话id是之前setup请求的回复消息返回的session id。 第一个url表示视频播放的地址,第一个seq表示第一个rtp视频数据包开始的序列号,第一个rtptime表示视频开始播放的时间戳,后面的一组表示音频播放相关的信息,同样也包括url,seq,rtptime!
五、TEARDOWN作用
T就是结束流传输,同时释放与之相关的资源,TEARDWON之后,整个RTSP连接也就结束了!好了,接下来我们来仔细看一下:
如图中,TEARDOWN消息中,最后还会通过RTCP发送bye。关于RTCP协议我们日后再讲。
至此,关于RTSP的知识都讲的差不多了基本上够用了,更多的细节在以后的工作中遇到了再深入了解。