1. 程式人生 > >rtsp協議標準流程

rtsp協議標準流程

RTSP C-REQ Format:
MethodName URL RTSPVersion CR LF
MessageHead: CR LF CR LF
MessageBody: CR LF


RTSP S-RES Format:
MethodName RTSPVersion StatusCode StatusCodeDes CR LF
MessageHead: CR LF CR LF
MessageBody: CR LF


explain:
MethodName: OPTIONS DESCRIBE SETUP PLAY TEARDOWN GET_PARAMETER,SET_PARAMETER,PAUSE,REDIRECT等.
CR LF: \r \n


example:
C-REQ(1):
OPTIONS rtsp://192.168.22.136:5000/v0 RTSP/1.0
CSeq: 1 //每個訊息都有序號來標記,第一個包通常是OPTIONS請求訊息
User-Agent: rtsp1.0Agent


S-RES(1):
RTSP/1.0 200 OK
Cseq: 1         //每個迴應訊息的cseq數值和請求訊息的cseq相對應
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY //伺服器提供的可用的方法








C-REQ(2):
DESCRIBE rtsp://192.168.20.136:5000/v0 RTSP/1.0
CSeq: 2
Accept: application/sdp
Authorization: Basic YWRtaW46YWRtaW4= //有認證,不需要認證時不需要該欄位
User-Agent: rtsp1.0Agent


S-RES(2):
RTSP/1.0 200 OK
Cseq: 2
Date: Sat Feb  5 22:49:39 2009 GMT
Content-Type: application/sdp
Content-Length: 182




v=0                     //以下都是sdp資訊
o=- 0 0 IN IPV4 127.0.0.1
t=0 0
s=No Name
a=tool:libavformat
m=video 0 RTP/AVP 96    //m表示媒體描述,下面是對會話中視訊通道的媒體描述
b=AS:2000
a=rtpmap:96 MP4V-ES/90000
a=fmtp:96 profile-level-id=1
a=control:streamid=0    //streamid=0表示視訊流用的是通道0








C-REQ(3):
SETUP rtsp://192.168.20.136:5000/v0/streamid=0 RTSP/1.0    
CSeq: 3
Authorization: Basic YWRtaW46YWRtaW4=
Transport: RTP/AVP/TCP;unicast;interleaved=0-1      
User-Agent: rtsp1.0Agent


C-REQ(3):
SETUP rtsp://192.168.20.136:5000/v0/streamid=0 RTSP/1.0
CSeq: 3
Transport: RTP/AVP;unicast;client_port=3008-3009
Authorization: Basic YWRtaW46YWRtaW4=
User-Agent: rtsp1.0Agent


URI中帶有streamid=0,表示對該通道進行設定。
Transport引數設定了傳輸模式。RTP/AVP/TCP表示通過TCP傳輸RTP包,RTP/AVP表示使用UDP傳輸RTP包。
unicast表示單播。interleaved值有兩個:0和1,0表示RTP包,1表示RTCP包,接收端根據interleaved的值來區別是哪種資料包。
client_port值有3008和3009,3008表示客戶端接收RTP包的埠,3009表示客戶端接收RTCP包的埠,服務端要分別將RTP包和RTCP包傳送到這兩個埠。


S-RES(3):
RTSP/1.0 200 OK
CSeq: 3
Date: Sat Feb  5 22:35:27 2009 GMT
Session: a522bbb4335617db
Transport: RTP/AVP/TCP;interleaved=0-1


S-RES(3):
RTSP/1.0 200 OK
CSeq: 3
Date: Sat Feb  5 22:49:39 2009 GMT
Session: 01fa4ca2566a6301      //伺服器迴應的會話識別符號
Transport: RTP/AVP/UDP;unicast;client_port=3008-3009;server_port=1024-1025








C-REQ(4):
PLAY rtsp://192.168.20.136:5000/v0 RTSP/1.0
CSeq: 4
Session: a522bbb4335617db      //SETUP返回的會話識別符號
Range: npt=0.000-              //設定播放時間的範圍
User-Agent: rtsp1.0Agent


S-RES(4):
RTSP/1.0 200 OK
CSeq: 4
Date: Sat Feb  5 22:49:39 2009 GMT
Session: a522bbb4335617db








C-REQ(5):
TEARDOWN rtsp://192.168.20.136:5000/v0 RTSP/1.0
CSeq: 5
Session: a522bbb4335617db
User-Agent: rtsp1.0Agent


S-RES(5):
RTSP/1.0 200 OK
Cseq: 5
Date: Sat Feb  5 22:49:47 2009 GMT
Session: a522bbb4335617db




ps:
sdp的格式
v=<version>
o=<username> <session id> <version> <network type> <address type> <address>
s=<session name>
i=<session description>
u=<URI>
e=<email address>
p=<phone number>
c=<network type> <address type> <connection address>
b=<modifier>:<bandwidth-value>
t=<start time> <stop time>
r=<repeat interval> <active duration> <list of offsets from start-time>
z=<adjustment time> <offset> <adjustment time> <offset> ....
k=<method>
k=<method>:<encryption key>
a=<attribute>
a=<attribute>:<value>
m=<media> <port> <transport> <fmt list>
v = (協議版本)
o = (所有者/建立者和會話識別符號)
s = (會話名稱)
i = * (會話資訊)
u = * (URI 描述)
e = * (Email 地址)
p = * (電話號碼)
c = * (連線資訊)
b = * (頻寬資訊)
z = * (時間區域調整)
k = * (加密金鑰)
a = * (0 個或多個會話屬性行) 
時間描述:
t = (會話活動時間)
r = * (0或多次重複次數)
媒體描述:
m = (媒體名稱和傳輸地址)
i = * (媒體標題)
c = * (連線資訊 — 如果包含在會話層則該欄位可選)
b = * (頻寬資訊)
k = * (加密金鑰)
a = * (0 個或多個媒體屬性行)
帶*為可選資訊。