2012-03-24 137 views
3

我有一臺IP攝像機,可以通過RTSP爲我提供媒體數據。RTSP獲取流數據

我開發了一個獲取媒體數據的應用程序。

我使用C++和Qt3。

我創建套接字。將它連接到端口= 554上的我的設備IP。

我做的第一個查詢

SETUP rtsp://192.168.4.160/ufirststream RTSP/1.0\r\n 
CSeq: 1\r\n 
Transport: RTP/AVP; client_port=554\r\n\r\n

,並得到一個答案:

 
RTSP/1.0 200 OK 
CSeq: 1 
Date: Sat, Mar 24 2012 17:24:59 GMT 
Transport: RTP/AVP;unicast;destination=192.168.4.186;source=192.168.4.160;client_port=0-1;server_port=2000-2001 
Session: 413F4DDB 

我解析它剛開會話值,並做一個查詢:

 
PLAY rtsp://192.168.4.160/ufirststream RTSP/1.0 
CSeq: 1 
Session: 413F4DDB 

和服務器說:

 
RTSP/1.0 200 OK 
CSeq: 1 
Date: Sat, Mar 24 2012 17:25:02 GMT 
Session: 413F4DDB 
RTP-Info: url=rtsp://192.168.4.160/ufirststream/track1;seq=6716;rtptime=406936711 

我怎樣才能獲得媒體數據?我認爲,PLAY方法使服務器給我一個流,但它只給了我一個URL到rtsp和其他信息...

我需要從攝像機的二進制流,你可以給我的下一步的建議??

回答

3

SETUP請求的Transport標頭指示將使用哪個協議發送流,以及client_port客戶端將在其上偵聽的端口。

嘗試打開2個連續的UDP端口,並將該範圍傳遞給client_port=port1-port2而不是554.這兩個端口將用於RTP和RTCP流(視頻和控制數據)。

另外,RTP端口號應該是偶數,而RTCP端口是下一個奇數(如果您希望端口範圍是隨機的而不是用戶選擇的,請參閱that question)。

+0

我必須創建一個服務器套接字綁定在我之前設置的port1上?或者我必須創建客戶端套接字並使用客戶端端口1連接到服務器? – mmmaaak 2012-03-26 11:30:55

+0

@mmmaaak不是服務器套接字,而是'QSocketDevice :: Datagram'類型的'QSocketDevice'。您不必連接到服務器,只需將套接字綁定到空閒的UDP端口即可。 – alexisdm 2012-03-26 16:28:34