概述
下面我们先看看总的RTSP的推流和拉流过程
步骤 | RTSP推流 | RTSP拉流 |
第一步 | OPTION 查询服务器端可⽤⽅法 | OPTION 查询服务器端可⽤⽅法 |
第二步 | ANNOUNCE 发送媒体描述信息 | DESCRIBE得到媒体描述信息 |
第三步 | SETUP建⽴RTSP会话 | SETUP建⽴RTSP会话 |
第四步 | RECORD请求传送数据 | PLAY请求开始传送数据 |
第五步 | RTP数据推送 | RTP数据传送播放中 |
第六步 | TEARDOWN关闭会话,退出 | TEARDOWN关闭会话,退出 |
可以看出,推流和拉流的过程还是很相似的,下面我们抓包分析一下
RTSP推流
第一步:OPTION 查询服务器端可⽤⽅法
1.C->S:OPTION request //询问S有哪些⽅法可⽤
1.S->C:OPTION response //S回应信息的public头字段中包括提供的所有可⽤⽅法
第⼆步:ANNOUNCE 发送媒体描述信息
2.C->S:ANNOUNCE request //客户端发送媒体描述信息给服务器
2.S->C:ANNOUNCE response //S回应媒体描述信息,并返回了Session ID
第三步:SETUP建⽴RTSP会话
3.1C->S:SETUP request //通过Transport头字段列出可接受的传输选项,请求S建⽴会话
RTP:31590 RTCP:31591
3.1 S->C:SETUP response //S建⽴会话,通过Transport头字段返回选择的具体转输选项,并返
回建⽴的Session ID;
C->S
RTP: 31590 -> 59472
RTCP: 31591 -> 59473
3.2C->S:SETUP request //通过Transport头字段列出可接受的传输选项,请求S建⽴会话
3.2 S->C:SETUP response //S建⽴会话,通过Transport头字段返回选择的具体转输选项
第四步:RECORD请求传送数据
4.C->S:RECORD request //C向S请求发送数据
4.S->C:RECORD response //S回应该允许的信息
第五步: RTP数据推送
C->S:发送流媒体数据 // 通过RTP协议传送数据
视频
音频
第六步:TEARDOWN关闭会话,退出
6.C->S:TEARDOWN request //C请求关闭会话
6.S->C:TEARDOWN response //S回应该请求
RTSP拉流
第⼀步:查询服务器端可⽤⽅法
1.C->S:OPTION request //询问S有哪些⽅法可⽤
1.S->C:OPTION response //S回应信息的public头字段中包括提供的所有可⽤⽅法
第⼆步:DESCRIBE得到媒
2.C->S:DESCRIBE request //要求得到S提供的媒体描述信息体描述信息
2.S->C:DESCRIBE response //S回应媒体描述信息,⼀般是sdp信息
第三步:SETUP建⽴RTSP会话
3.1 C->S:SETUP request //通过Transport头字段列出可接受的传输选项,请求S建⽴会话
3.1 S->C:SETUP response //S建⽴会话,通过Transport头字段返回选择的具体转输选项
3.2 C->S:SETUP request //通过Transport头字段列出可接受的传输选项,请求S建⽴会话
3.2 S->C:SETUP response //S建⽴会话,通过Transport头字段返回选择的具体转输选项
第四步:PLAY请求开始传送数据
4.C->S:PLAY request //C请求S开始发送数据
4.S->C:PLAYresponse //S回应该请求的信息
可能流已经播放了⼀段时间,npt=起始时间
第五步: RTP数据传送播放中
S->C:发送流媒体数据 // 通过RTP协议传送数据
视频 这⾥的ssrc 来⾃服务器
第六步:TEARDOWN关闭会话,退出
6.C->S:TEARDOWN request //C请求关闭会话
6.S->C:TEARDOWN response //S回应该请求