客户端:
OPTIONS rtsp://11.22.33.44:8885/Streaming/tracks/101?starttime=20180904t000000z RTSP/1.0
CSeq: 1
User-Agent: Lavf58.17.103
服务器应:
RTSP/1.0 200 OK
CSeq: 1
Public: OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER, GET_PARAMETER
Date: Thu, Sep 06 2018 19:39:31 GMT
客户端:
DESCRIBE rtsp://11.22.33.44:8885/Streaming/tracks/101?starttime=20180904t000000z RTSP/1.0
Accept: application/sdp
CSeq: 2
User-Agent: Lavf58.17.103
服务器:
RTSP/1.0 401 Unauthorized
CSeq: 2
WWW-Authenticate: Digest realm="IP Camera(C2767)", nonce="9a7ae14f6a6098a11a4417c0d89dfb80", stale="FALSE"
Date: Thu, Sep 06 2018 19:39:31 GMT
客户端:
DESCRIBE rtsp://11.22.33.44:8885/Streaming/tracks/101?starttime=20180904t000000z RTSP/1.0
Accept: application/sdp
CSeq: 3
User-Agent: Lavf58.17.103
Authorization: Digest username="root", realm="IP Camera(C2767)", nonce="9a7ae14f6a6098a11a4417c0d89dfb80", uri="rtsp://11.22.33.44:8885/Streaming/tracks/101?starttime=20180904t000000z", response="70038aa11fc4d64905de03aaece3a1eb"
密码response计算公式: MD5(MD5(username:realm:password):nonce:MD5(命令:uri))
服务器:
RTSP/1.0 200 OK
CSeq: 3
Content-Type: application/sdp
Content-Base: rtsp://11.22.33.44:8885/Streaming/tracks/101/
Content-Length: 653
v=0
o=- 1536262771127229 1536262771127229 IN IP4 192.168.1.141
s=Media Presentation
e=NONE
b=AS:5100
t=0 0
a=control:rtsp://11.22.33.44:8885/Streaming/tracks/101/?starttime=20180904t000000z
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:5000
a=recvonly
a=x-dimensions:1280,720
a=control:rtsp://11.22.33.44:8885/Streaming/tracks/101/trackID=1?starttime=20180904t000000z
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z00AH52oFAFum4CAgKAAAAMAIAAABlCA,aO48gA==
a=Media_header:MEDIAINFO=494D4B48010200000400000100000000000000000000000000000000000000000000000000000000;
a=appversion:1.0
客户端:
SETUP rtsp://11.22.33.44:8885/Streaming/tracks/101/trackID=1?starttime=20180904t000000z RTSP/1.0
Transport: RTP/AVP/UDP;unicast;client_port=18286-18287
CSeq: 4
User-Agent: Lavf58.17.103
Authorization: Digest username="root", realm="IP Camera(C2767)", nonce="9a7ae14f6a6098a11a4417c0d89dfb80", uri="rtsp://11.22.33.44:8885/Streaming/tracks/101/trackID=1?starttime=20180904t000000z", response="e9a72bbb05bb5dea7ec08645fbfdbca7"
服务器:
RTSP/1.0 200 OK
CSeq: 4
Session: 1673060021;timeout=60
Transport: RTP/AVP/UDP;unicast;client_port=18286-18287;server_port=8278-8279;ssrc=12a54df9;mode="play"
Date: Thu, Sep 06 2018 19:39:31 GMT
客户端:
PLAY rtsp://11.22.33.44:8885/Streaming/tracks/101/?starttime=20180904t000000z RTSP/1.0
Range: npt=0.000-
CSeq: 5
User-Agent: Lavf58.17.103
Session: 1673060021
Authorization: Digest username="root", realm="IP Camera(C2767)", nonce="9a7ae14f6a6098a11a4417c0d89dfb80", uri="rtsp://11.22.33.44:8885/Streaming/tracks/101/?starttime=20180904t000000z", response="04dd503cbf89ed18f1270be1ceaab555"
服务器:
RTSP/1.0 200 OK
CSeq: 5
Session: 1673060021
RTP-Info: url=rtsp://11.22.33.44:8885/Streaming/tracks/101/trackID=1?starttime=20180904t000000z;seq=1;rtptime=0
Date: Thu, Sep 06 2018 19:39:31 GMT
PLAY方法告诉服务器按照SETUP方法中的设置开始传送媒体流,在SETUP方法被调用前,不能调用PLAY方法。PLAY请求中带有Range头,用于表示播放的范围。如果不带有Range头则默认从头播到尾。当播放到达Range尾时,会自动停止,就像调用了一个PAUSE命令。
PLAY命令可以连续调用,在服务器端会将多个PLAY命令进行队列管理。在同一时间只能有一个PLAY命令被执行,只有第一个PLAY命令执行完毕,第二个PLAY命令才能被执行。如下例所示,服务器会先播放10-15秒,再播放20-25秒,最后播放30-结尾。PLAY还可以带有time参数,用于在制定时间播放。这样做可以同步多个数据流。
C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 835
Session: 12345678
Range: npt=10-15
C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 836
Session: 12345678
Range: npt=20-25
C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
CSeq: 837
Session: 12345678
Range: npt=30-
C->S: PLAY rtsp://audio.example.com/twister.en RTSP/1.0
CSeq: 833
Session: 12345678
Range: smpte=0:10:20-;time=19970123T153600Z
S->C: RTSP/1.0 200 OK
CSeq: 833
Date: 23 Jan 1997 15:35:06 GMT
Range: smpte=0:10:22-;time=19970123T153600Z
拖动用PLAY方法实现,相当于再找一个播放点。
快进需要加一个rtsp头scale。Scale头域表示播放或记录速度。值为1表示正常播放速度,0.5表示一半播放速度,2表示2倍播放速度。负值表示反方向播放。请求头中包含的速度如果超出了服务器允许范围,则在反馈头中会给出实际速度。
Scale: -3.5
PLAY方法告诉服务器按照SETUP方法中的设置开始传送媒体流,在SETUP方法被调用前,不能调用PLAY方法。PLAY请求中带有Range头,用于表示播放的范围。如果不带有Range头则默认从头播到尾。当播放到达Range尾时,会自动停止,就像调用了一个PAUSE命令。
PLAY命令可以连续调用,在服务器端会将多个PLAY命令进行队列管理。在同一时间只能有一个PLAY命令被执行,只有第一个PLAY命令执行完毕,第二个PLAY命令才能被执行。如下例所示,服务器会先播放10-15秒,再播放20-25秒,最后播放30-结尾。PLAY还可以带有time参数,用于在制定时间播放。这样做可以同步多个数据流。