2012-03-24 2 views
3

RTSP를 통해 미디어 데이터를 제공 할 수있는 IP 카메라가 있습니다.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-method를 사용하면 서버에서 스트림을 제공한다고 생각했지만 rtsp 및 기타 정보에 대한 URL 만 제공합니다. ...

카메라의 이진 스트림이 필요합니다. 다음 단계에 대한 조언을 제공 할 수 있습니까? ??

답변

3

SETUP 요청의 Transport 헤더는 스트림을 전송하는 데 사용할 프로토콜과 클라이언트가 청취 할 포트를 나타냅니다.

두 개의 연속 UDP 포트를 열어 5532 대신 client_port=port1-port2으로 전달하십시오.이 두 포트는 RTP 및 RTCP 스트림 (비디오 및 제어 데이터)에 사용됩니다.

또한 RTP 포트 번호는 짝수 여야하고 RTCP 포트는 다음 홀수 여야합니다 (포트 범위를 사용자가 아닌 임의로 선택하려면 that question 참조).

+0

이전에 설정 한 port1에 바인드 된 서버 소켓을 만들어야합니까? 아니면 클라이언트 소켓을 만들고 클라이언트 port1을 사용하여 서버에 연결해야합니까 ?? – mmmaaak

+0

@mmmaaak 서버 소켓이 아니라'QSocketDevice :: Datagram' 타입의'QSocketDevice'입니다. 서버에 연결할 필요가 없으므로 소켓을 바인드하여 UDP 포트를 해제하면됩니다. – alexisdm