手撕RTSP协议系列(6)——SETUP

2020-10-30 14:38:04 浏览数 (1)

上一讲我们讲了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

0 人点赞