2012-03-24 96 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