我有一台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
我将其解析为gettin会话值,然后执行下一个查询:
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 ...
我需要来自相机的二进制流,你能为我的下一步提供建议吗?
答案 0 :(得分:4)
Transport
请求的SETUP
标头指示将使用哪个协议发送流,以及client_port
客户端将侦听的端口。
尝试打开2个连续的UDP端口并将该范围传递为client_port=port1-port2
而不是554.这两个端口将用于RTP和RTCP流(视频和控制数据)。
此外,RTP端口号应为偶数,RTCP端口应为下一个奇数(如果您希望端口范围是随机的而不是用户选择,请参见that question。)