RTSP获取流数据
问题描述:
我有一台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和其他信息...
我需要从摄像机的二进制流,你可以给我的下一步的建议??
答
SETUP
请求的Transport
标头指示将使用哪个协议发送流,以及client_port
客户端将在其上侦听的端口。
尝试打开2个连续的UDP端口,并将该范围传递给client_port=port1-port2
而不是554.这两个端口将用于RTP和RTCP流(视频和控制数据)。
另外,RTP端口号应该是偶数,而RTCP端口是下一个奇数(如果您希望端口范围是随机的而不是用户选择的,请参阅that question)。
我必须创建一个服务器套接字绑定在我之前设置的port1上?或者我必须创建客户端套接字并使用客户端端口1连接到服务器? – mmmaaak 2012-03-26 11:30:55
@mmmaaak不是服务器套接字,而是'QSocketDevice :: Datagram'类型的'QSocketDevice'。您不必连接到服务器,只需将套接字绑定到空闲的UDP端口即可。 – alexisdm 2012-03-26 16:28:34