1.和服务端建立TCP连接
2.建立会话
使用建立的TCP连接进行会话,会话报文以两个\r\n结尾;
2.1.OPTIONS会话
客户端发送:
OPTIONS rtsp://192.168.200.199:8010/designated_ch1 RTSP/1.0
User-Agent: MultiCoreServer
CSeq: 1
服务端回复:
RTSP/1.0 200 OK
CSeq: 1
Date: 2021-05-24 11:28:32 GMT
Public: OPTIONS, DESCRIBE, ANNOUNCE,SETUP, TEARDOWN, PLAY,RECORD,GET_PARAMETER
2.2.ANNOUNCE会话
客户端需要主动提供推流的信息描述,格式需要符合SDP文件格式;
客户端发送:
ANNOUNCE rtsp://192.168.200.199:8010/designated_ch1 RTSP/1.0
User-Agent: MultiCoreServer
CSeq: 2
Content-Type: application/sdp
Content-Length: 175
v=0
o=- 1464329709034587 1 IN IP4 127.0.0.1
s=MPEG Transport Stream, streamed by mscore(Email:sugao_cn@163.com)
m=video 0 RTP/AVP 33
c=IN IP4 0.0.0.0
a=control:trackid1
服务端回复:
RTSP/1.0 200 OK
CSeq: 2
Date: 2021-05-24 11:28:32 GMT
2.3.SETUP会话
SETUP会话完成后,服务端会分配唯一的会话标识ID,此后的会话都需要携带该会话标识ID;
客户端推流采用RTSP(OVER TCP)还是RTSP(OVER UDP),或者其他方式(此处不扩展),是由客户端和服务端协商确定的。由客户端主动发起协商方式,如果服务端支持则回复成功,如果服务端回复不支持,则客户端应更换其他方式再次进行尝试;
2.3.1.RTSP(OVER TCP)
客户端发送:
SETUP rtsp://192.168.200.199:8010/designated_ch1/trackid1 RTSP/1.0
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record
User-Agent: MultiCoreServer
CSeq: 3
服务端回复:
RTSP/1.0 200 OK
CSeq: 3
Date: 2021-05-24 11:28:32 GMT
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record;
Session: 0xa2fd474b
2.3.2.RTSP(OVER UDP)
服务端回复的server_port=12002-22002,分别为服务端的RTP和RTCP的接收端口
客户端发送:
SETUP rtsp://192.168.200.199:8010/designated_ch1/trackid1 RTSP/1.0
Transport: RTP/AVP/UDP;unicast;client_port=21534-21535;mode=record
User-Agent: MultiCoreServer
CSeq: 3
服务端回复:
RTSP/1.0 200 OK
CSeq: 3
Date: 2021-05-24 11:28:32 GMT
Transport: RTP/AVP/UDP;unicast;client_port=21534-21535;mode=record;server_port=12002-22002
Session: 0xa2fd4749
2.4.RECORD会话
客户端发送:
RECORD rtsp://192.168.200.199:8010/designated_ch1 RTSP/1.0
Session: 0xa2fd474b
User-Agent: MultiCoreServer
CSeq: 4
服务端回复:
RTSP/1.0 200 OK
CSeq: 4
Date: 2021-05-24 11:28:32 GMT
Session: 0xa2fd474b
3.数据推流
数据封装见文章RTP和RTCP讲解
3.1.RTSP(OVER TCP)
- 使用TCP连接进行数据推送,推送RTP(OVER TCP)流;
- 使用TCP连接进行会话,无需定时进行心跳发送;
3.2.RTSP(OVER UDP)
- 使用SETUP会话中,服务端回复的server_port=12002-22002,基于UDP协议分别进行RTP和RTCP数据的发送;
- 使用TCP连接进行会话,要求定时进行心跳发送,保持会话连接;
4.断开会话
客户端发送:
TEARDOWN rtsp://192.168.200.199:8010/designated_ch1 RTSP/1.0
Session: 0xa2fd474b
User-Agent: MultiCoreServer
CSeq: 4
服务端回复:
RTSP/1.0 200 OK
CSeq: 4
Date: 2021-05-24 11:28:32 GMT
Session: 0xa2fd474b