上一讲我们讲了RTSP的DESCRIBE指令,本篇接着来看下一条:SETUP。
SETUP 作用
SETUP请求的作用是指明媒体流该以什么方式传输;每个流PLAY之前必须执行SETUP操作;发送SETUP请求时,客户端会指定两个端口,一个端口用于接收RTP数据;另一个端口接收RTCP数据,偶数端口用来接收RTP数据,相邻的奇数端口用于接收RTCP数据!
SETUP格式
我们来看SETUP请求的数据格式:
SETUP表明消息类型;
URI表示请求的RTSP服务器的地址;
RTSP_VER表明RTSP的版本;
TRANSPORT表明媒体流的传输方式,具体包括传输协议如RTP/UDP;指出是单播,组播还是广播;声明两个端口,一个奇数,用于接收RTCP数据,一个偶数,用于接收RTP数据;
CSeq数据包请求序列号;
User-Agent指明用户代理;
Session标识会话ID;
Authorization标识认证信息;
我们来看一个抓包文件:
该SETUP请求中,Transport字段声明了两个端口,26968和26969,同时指明了通过UDP发送RTP数据,26968端口用来接收RTP数据,26969端口用来接收RTCP数据,unicast表示传输方式为单播!
请求之后,如果没有异常情况,RTSP服务器的回复比较简单,回复200 OK消息,同时在Transport字段中增加sever_port,指明对等的服务端RTP和RTCP传输的端口,增加ssrc字段,增加mode字段,同时返回一个session id,用于标识本次会话连接,之后客户端发起PLAY请求的时候需要使用该字段,回复消息大概结构如下图:
我们来看一个抓包文件:
通过该抓包文件,我们可以看出,服务端对应SETUP请求的RTP和RTCP的传输端口分别为8284和8285;ssrc的值为4a7fb757;mode="play"表示当前rtsp连接是播放模式!
SETUP 案例
好了,关于SETUP的介绍,本篇就到这里,老规矩,放一个实际的案例:
request
代码语言:javascript复制SETUP rtsp://192.17.1.63:554/trackID=1 RTSP/1.0
Transport: RTP/AVP/UDP;unicast;client_port=26968-26969
CSeq: 4
User-Agent: Lavf58.42.100
Authorization: Digest username="admin", realm="IP Camera(23306)", nonce="a946c352dd3ad04cf9830d5e72ffb11e", uri="rtsp://192.17.1.63:554/trackID=1", response="e29ca030062df6022faa77fefde40b28"
Response
代码语言:javascript复制RTSP/1.0 200 OK
CSeq: 4
Session: 337474243;timeout=60
Transport: RTP/AVP/UDP;unicast;client_port=26968-26969;server_port=8284-8285;ssrc=4a7fb757;mode="play"
Date: Fri, Apr 10 2020 19:07:19 GMT
好了,RTSP的SETUP消息我们也介绍完了,本篇以后,我们对SETUP的认识就又上一个新的台阶了!本篇就到这里了,下一篇我们继续,开始PLAY,欢迎持续关注!
往期推荐
手撕RTSP协议系列(1)——Rtsp基本流程
手撕RTSP协议系列(2)——Rtsp消息格式
手撕RTSP协议系列(3)——sdp格式详解
手撕RTSP协议系列(4)——OPTION
手撕RTSP协议系列(5)——DESCRIBE