2012-03-24 7 views
3

Ich habe eine IP-Kamera, die mir Media-Daten per RTSP geben kann.RTSP bekommen Stromdaten

Ich entwickle eine Anwendung zum Abrufen von Mediendaten.

Ich benutze C++ und Qt3.

Ich erstelle Socket. verbinde es mit meinem Gerät IP an Port = 554.

ich erste Abfrage

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

Und eine Antwort bekommen:

 
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 

ich es für gettin Sitzungswert zu analysieren, und als nächstes tun query:

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

Und Server sagt :

 
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 

Und wie kann ich Mediadaten bekommen ??? Ich dachte, dass PLAY-Methode Server macht mir einen Stream zu geben, aber es gibt mir nur eine URL zu rtsp und andere Informationen ...

Ich brauche einen binären Stream von der Kamera, können Sie einen Ratschlag für meinen nächsten Schritt geben ??

Antwort

3

Die Transport-Header der SETUP Anfrage gibt an, welches Protokoll verwendet wird, um den Stream zu senden, und die client_port die Ports, auf denen Ihr Client zuhören wird.

Versuchen Sie, 2 aufeinanderfolgende UDP-Ports zu öffnen und diesen Bereich als client_port=port1-port2 anstelle von 554 zu übergeben. Diese beiden Ports werden für die RTP- und RTCP-Streams (Video- und Steuerdaten) verwendet.

Darüber hinaus sollte die RTP-Portnummer eine gerade Zahl und der RTCP-Port die nächste ungerade Zahl sein (siehe that question, wenn der Portbereich zufällig und nicht vom Benutzer ausgewählt werden soll).

+0

Ich muss einen Server-Socket erstellen, der an Port1 gebunden ist, den ich früher eingerichtet habe? Oder ich muss Client-Socket erstellen und eine Verbindung zum Server mithilfe von Client-Port1 herstellen? – mmmaaak

+0

@mmmaaak Kein Server-Socket, sondern ein 'QSocketDevice' vom Typ 'QSocketDevice :: Datagram'. Sie müssen sich nicht mit dem Server verbinden, Sie müssen nur die Sockets an freie UDP-Ports binden. – alexisdm