RTSP 有如下信令:
在这之前建立一个TCP socket用来作信令交互,叫做TCPSockfd
OPTIONS:
功能: 请求用于返回服务端支持的 RTSP 命令列表
信令交互:
C->S:
OPTIONS * RTSP/1.0
CSeq: 1
Require: implicit-play
Proxy-Require: gzipped-messages
S->C:
RTSP/1.0 200 OK
CSeq: 1
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
这个信令不常用,一般client端知道对接的服务器有哪些命令
CSeq:信令序列号,后面的序列号累计增加。
DESCRIBE:
功能: 用于请求指定的媒体流的 SDP 描述信息 。
信令交互:
C->S:
DESCRIBE rtsp://10.50.108.17/vod/957509 RTSP/1.0
CSeq: 2
Accept: application/sdp
S->C:
RTSP/1.0 200 OK
CSeq: 2
Content-Type: application/sdp
Content-Length: 376
v=0
o=- 2890844526 2890842807 IN IP4 10.50.108.17
s=RTSP Session
t=0 0
r=15 0 0 0
i=
b=AS:1600
c=IN IP4 0.0.0.0
m=video 0 RTP/AVP 33
a=rtpmap:33 MP2T/90000
a=range:npt= 0.000-566.000//媒体流的开始时间和结束时间,以S为单位
在descripe之后,我们建立一个UDP的socket,用于RTP包的传输,UDPSockfd,bind到一个端口,比如: 26958
SETUP :
功能: 命令用于配置数据交付的方法
信令交互:
C->S:
SETUP rtsp://10.50.108.17/vod/957509/ RTSP/1.0
CSeq: 2
Transport: RTP/AVP;unicast;client_port= 26958 -26959 //通知server 发送RTP包给client这个端口,后面的26959是rtcp端口,一般没有实现
User-Agent: CTC RTSP 1.0
S->C:
RTSP/1.0 200 OK
CSeq: 2
Session: 10145778//rtsp的session,之后的信令都要带上这个参数,并保持一致
Transport: MP2T/RTP/UDP;unicast; destination=172.19.133.128:26958;control_address=10.50.108.17:554 ;mode=play;QAM_FRQ=131073
172.19.133.128:26958 client端IP和port
10.50.108.17:554 server端IP和port
setup之后有必要做一个natdetect:私有信令,这个信令是是用UDPSockfd发的,收也是UDPSockfd来收,这样就做了一个nat穿越
NAT_DETECT
C->S:
NAT_DETECT rtsp://10.50.108.17/vod/957509 RTSP/1.0
CSeq: 1
S->C:
PLAY :
功能:请求流
C->S
rtsp://10.50.108.17/vod/957509 RTSP/1.0
CSeq: 3
Session: 10145778
User-Agent: CTC RTSP 1.0
S->C:
RTSP/1.0 200 OK
CSeq: 3
Session: 10145778
Scale: 1.0
Range: npt=0.000-0.000
PAUSE
功能:暂停
C->S
PAUSE rtsp://10.50.108.17/vod/957509 RTSP/1.0
CSeq: 5
Session: 10145778
User-Agent: CTC RTSP 1.0
S->C
RTSP/1.0 200 OK
CSeq: 5
Session: 10016005
GET_PARAMETER :心跳作用
C->S:
GET_PARAMETER rtsp://10.50.108.17/vod/957509 RTSP/1.0
CSeq: 4
Session: 10145778
User-Agent: CTC RTSP 1.0
S->C:
RTSP/1.0 200 OK
CSeq: 4
Session: 10145778
ANNOUNCE :
也是用UDPSockfd来收的,用来处理边界值
![](http://hi.csdn.net/attachment/201110/17/0_1318821501v7gG.gif)
在这之前建立一个TCP socket用来作信令交互,叫做TCPSockfd
OPTIONS:
功能: 请求用于返回服务端支持的 RTSP 命令列表
信令交互:
C->S:
OPTIONS * RTSP/1.0
CSeq: 1
Require: implicit-play
Proxy-Require: gzipped-messages
S->C:
RTSP/1.0 200 OK
CSeq: 1
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
这个信令不常用,一般client端知道对接的服务器有哪些命令
CSeq:信令序列号,后面的序列号累计增加。
DESCRIBE:
功能: 用于请求指定的媒体流的 SDP 描述信息 。
信令交互:
C->S:
DESCRIBE rtsp://10.50.108.17/vod/957509 RTSP/1.0
CSeq: 2
Accept: application/sdp
S->C:
RTSP/1.0 200 OK
CSeq: 2
Content-Type: application/sdp
Content-Length: 376
v=0
o=- 2890844526 2890842807 IN IP4 10.50.108.17
s=RTSP Session
t=0 0
r=15 0 0 0
i=
b=AS:1600
c=IN IP4 0.0.0.0
m=video 0 RTP/AVP 33
a=rtpmap:33 MP2T/90000
a=range:npt= 0.000-566.000//媒体流的开始时间和结束时间,以S为单位
在descripe之后,我们建立一个UDP的socket,用于RTP包的传输,UDPSockfd,bind到一个端口,比如: 26958
SETUP :
功能: 命令用于配置数据交付的方法
信令交互:
C->S:
SETUP rtsp://10.50.108.17/vod/957509/ RTSP/1.0
CSeq: 2
Transport: RTP/AVP;unicast;client_port= 26958 -26959 //通知server 发送RTP包给client这个端口,后面的26959是rtcp端口,一般没有实现
User-Agent: CTC RTSP 1.0
S->C:
RTSP/1.0 200 OK
CSeq: 2
Session: 10145778//rtsp的session,之后的信令都要带上这个参数,并保持一致
Transport: MP2T/RTP/UDP;unicast; destination=172.19.133.128:26958;control_address=10.50.108.17:554 ;mode=play;QAM_FRQ=131073
172.19.133.128:26958 client端IP和port
10.50.108.17:554 server端IP和port
setup之后有必要做一个natdetect:私有信令,这个信令是是用UDPSockfd发的,收也是UDPSockfd来收,这样就做了一个nat穿越
NAT_DETECT
C->S:
NAT_DETECT rtsp://10.50.108.17/vod/957509 RTSP/1.0
CSeq: 1
S->C:
PLAY :
功能:请求流
C->S
rtsp://10.50.108.17/vod/957509 RTSP/1.0
CSeq: 3
Session: 10145778
User-Agent: CTC RTSP 1.0
S->C:
RTSP/1.0 200 OK
CSeq: 3
Session: 10145778
Scale: 1.0
Range: npt=0.000-0.000
PAUSE
功能:暂停
C->S
PAUSE rtsp://10.50.108.17/vod/957509 RTSP/1.0
CSeq: 5
Session: 10145778
User-Agent: CTC RTSP 1.0
S->C
RTSP/1.0 200 OK
CSeq: 5
Session: 10016005
GET_PARAMETER :心跳作用
C->S:
GET_PARAMETER rtsp://10.50.108.17/vod/957509 RTSP/1.0
CSeq: 4
Session: 10145778
User-Agent: CTC RTSP 1.0
S->C:
RTSP/1.0 200 OK
CSeq: 4
Session: 10145778
ANNOUNCE :
也是用UDPSockfd来收的,用来处理边界值