跳至主要內容

RTSP推流流程

ZLMediaKit大约 2 分钟

1、客户端发送 ANNOUNCE 命令

此步骤主要传输 SDP,一般而言在这个命令之前还需要 OPTIONS 命令侦探服务器是否支持推流协议,但是为了减少交互次数,可以直接发送 ANNOUNCE 命令,如果不支持,服务器自然响应错误代码。

ANNOUNCE rtsp://10.0.9.130:554/live/2.sdp RTSP/1.0
CSeq: 1
User-Agent: EasyPusher v1.2.16.1105
Content-Type: application/sdp
Content-Length: 541

v=0
o=- 0 0 IN IP4 127.0.0.1
s=EasyDarwin
i=EasyDarwin
c=IN IP4 127.0.0.1
t=0 0
a=x-qt-text-nam:EasyDarwin
a=x-qt-text-inf:EasyDarwin
a=x-qt-text-cmt:source application::EasyDarwin
a=x-qt-text-aut:
a=x-qt-text-cpy:
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;sprop-parameter-sets=
a=control:streamid=0
m=audio 0 RTP/AVP 97
a=rtpmap:97 MPEG4-GENERIC/8000/1
a=fmtp:97 streamtype=5;profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1588
a=control:streamid=1

2、服务器响应 ANNOUNCE 命令

服务器如果解析 SDP 成功,那么会返回 200 代码表明成功

RTSP/1.0 200 OK
CSeq: 1
Date: Tue, Mar 26 2019 09:10:10 GMT
Server: ZLMediaKit-4.0(build in Mar 26 2019 17:01:17)
Session: KPUZ49ejotyD

3、客户端发送 SETUP 命令

此命令作用是协商 rtp 传输方式,可选 tcp 和 udp 方式,为了简便,建议使用 tcp 方式推流 需要指出的是,如果 sdp 中有多个 track(例如音视频都有),那么 SETUP 命令交互会有多次

SETUP rtsp://10.0.9.130:554/live/2.sdp/streamid=0 RTSP/1.0
Transport: RTP/AVP/TCP;unicast;mode=record;interleaved=0-1
CSeq: 2
User-Agent: EasyPusher v1.2.16.1105

4、服务器响应 SETUP 命令

服务器返回协商好的 interleaved,其他自便

RTSP/1.0 200 OK
CSeq: 2
Date: Tue, Mar 26 2019 09:10:10 GMT
Server: ZLMediaKit-4.0(build in Mar 26 2019 17:01:17)
Session: KPUZ49ejotyD
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=00000000
x-Dynamic-Rate: 1
x-Transport-Options: late-tolerance=1.400000

5、客户端发送 RECORD 命令

相当于播放时的 play 命令,同步命令,让服务器准备好。 请注意,为了节省篇幅,该命令前省略了一次 SETUP 交互

RECORD rtsp://10.0.9.130:554/live/2.sdp RTSP/1.0
Range: npt=0.000-
CSeq: 4
User-Agent: EasyPusher v1.2.16.1105
Session: KPUZ49ejotyD

6、服务器响应 RECORD 命令,可以开始推流!

服务器响应 RECORD 命令后,推流客户端就可以源源不断发送 RTP 包了

RTSP/1.0 200 OK
CSeq: 4
Date: Tue, Mar 26 2019 09:10:10 GMT
RTP-Info: url=rtsp://10.0.9.130:554/live/2.sdp/streamid=0,url=rtsp://10.0.9.130:554/live/2.sdp/streamid=1
Server: ZLMediaKit-4.0(build in Mar 26 2019 17:01:17)
Session: KPUZ49ejotyD