上一篇我们熟悉了RTSP_SETUP消息,SETUP可以说是PLAY的准备流程,只有SETUP请求被成功回复之后,客户端才可以发起PLAY请求。本篇我们就来看一下PLAY消息。
PLAY的作用
PLAY消息是客户端发送的播放请求,发送播放请求的时候可以指定播放区间!发起播放请求后,如果连接正常,则服务端开始播放,即开始向客户端按照之前在TRASPORT中约定好的方式发送音视频数据包!播放流程便这样开始了!
PLAY的格式
我们先来看一下PLAY消息中常包含的一些字段:
RTSP URI表明请求的RTSP 地址;
RTSP version表明版本号;
CSeq 表示请求的序列号;
User-Agent表示用户代理;
Session 表示会话id,值为SETUP请求之后,服务端返回的session id的值;
Authorizatiuon表示认证信息;
Range是PLAY消息特有的,代表请求播放的时间段,使用ntp时间来表示。
我们来看一个直观的抓包文件:
通过抓包文件,我们可以看到,该请求是第6条交互指令,会话id是之前setup请求的回复消息返回的session id,Range的值为"npt=0.0000-",表示从开始播放,默认一直播放!
同样,客户端发送PLAY请求之后,服务端会回复RTSP消息,常见的回复字段格式如下:
Rtsp Version表示RTSP的版本;
状态码表示当前消息的状态,没有异常的情况下一般为200;
状态描述是针对状态码的描述,如200对应的描述为OK;
CSeq表示RTSP包的序号;
Session表示会话ID,SETUP返回时确定的ID;
RTP-Info表示RT;
Date表示日期;
我们来看一个抓包文件
CSeq,Session, Date就不多介绍了,主要看下RTP-info:
第一个url表示视频播放的地址,第一个seq表示第一个rtp视频数据包开始的序列号,第一个rtptime表示视频开始播放的时间戳,后面的一组表示音频播放相关的信息,同样也包括url,seq,rtptime!
PLAY 案例
好了,最后放上一个实例:
RTSP PLAY (requst)
PLAY rtsp://192.17.1.63:554/ RTSP/1.0\r\n
Range: npt=0.000-\r\n
CSeq: 6\r\n
User-Agent: Lavf58.42.100\r\n
Session: 337474243\r\n
Authorization: Digest username="admin", realm="IP Camera(23306)", nonce="a946c352dd3ad04cf9830d5e72ffb11e", uri="rtsp://192.17.1.63:554/", response="9ea6c2659d3bce8d129ca3549ecc7fbf"\r\n\r\n
RTSP PLAY (response)
RTSP/1.0 200 OK\r\n
CSeq: 6\r\n
Session: 337474243\r\n
RTP-Info: url=rtsp://192.17.1.63:554/trackID=1;seq=3658;rtptime=1710363406,url=rtsp://192.17.1.63:554/trackID=2;seq=6598;rtptime=4065225152\r\n
Date: Fri, Apr 10 2020 19:07:20 GMT\r\n\r\n
好了,关于RTSP play的介绍就到这里,我们下一讲见!