如何测试网络设备的有效RTSP流?

Jer*_*dge 8 delphi winapi winsock rtsp tcp-ip

我正在开发一个使用VLC Media Player插件通过RTSP传输视频/音频的项目.我想提供一个扫描网络RTSP摄像头的选项.我确信这将包括查询所有网络设备的列表,并测试端口554.所有这些我都可以照顾.但是,一旦我做到这一点,我如何通过端口554测试设备,以确保它是一个有效的RTSP相机?

我假设应该有一些东西Winsock可以做到这一点,但我应该如何测试套接字连接并确保它是一个有效的RTSP流,我可以连接到?无论使用何种方法,我都不必尝试使用任何类型的身份验证通过RTSP连接到每个,我正在寻找一种确定端口554是否实际提供RTSP流的低级方法.

Rom*_* R. 4

没有可靠的方法来扫描网络以获取可用的 RTSP 流。考虑以下因素,您仍然可以进行良好的搜索:

  1. 为了获得最佳结果(而不是速度),您需要对可用地址进行强力搜索,即检查适配器地址和掩码,生成地址并在多个线程(或异步套接字)中一一尝试
  2. 您将需要端口 554 和/或由用户交互提供;真实设备(数百种型号)可能使用不同的端口,即使使用默认设置
  3. 您可以使用 UPnP、ZeroConf 在网络中搜索真实地址,将更有可能的候选者放在 IP 地址列表的顶部
  4. 考虑到特定的供应商/型号,您还可以实现特定于供应商的搜索,这通常涉及发送广播 UDP 消息并侦听响应
  5. OPTIONSRTSP 命令对于测试来说应该足够了,您可以使用交互式 RTSP 工具来查看它是如何工作的。无论如何,我们不提供任何形式的保证,因为设备可能要求您进行身份验证。

无论如何,你很有机会OPTIONS收到任何有意义的东西。DESCRIBE可能已经要求您登录,甚至可能需要进行身份验证OPTIONS。尽管如此,您仍会收到 RTSP 响应,该响应假定那边存在某些东西。

Connection to 192.168.0.59:554 using TCP

OPTIONS * RTSP/1.0
CSeq: 1

RTSP/1.0 401 Unauthorized
CSeq: 1
Date: Tue, Oct 16 2012 22:22:53 GMT
WWW-Authenticate: Basic realm="RTSP/RTP stream"
Run Code Online (Sandbox Code Playgroud)

要发出成功的DESCRIBE命令并接收有意义的结果,您需要知道设备上的资源 URI,这并不总是显而易见的。更好的供应商(显然是少数)灵活地支持传入请求,其他供应商假设客户端了解特定于设备。例如,

Connection to 192.168.0.59:554 using TCP

OPTIONS * RTSP/1.0
CSeq: 1

RTSP/1.0 200 OK
CSeq: 1
Date: Tue, Oct 16 2012 22:26:54 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

DESCRIBE rtsp://192.168.0.59/ch0_unicast_secondstream RTSP/1.0
CSeq: 2
Accept: application/sdp

RTSP/1.0 200 OK
CSeq: 2
Date: Tue, Oct 16 2012 22:27:22 GMT
Content-Base: rtsp://192.168.0.59/ch0_unicast_secondstream/
Content-Type: application/sdp
Content-Length: 506

v=0
o=- 1350426392586736 1 IN IP4 192.168.0.59
s=Session of second stream
i=Second Codec Stream
t=0 0
a=tool:LIVE555 Streaming Media v2007.08.03
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:Session of second stream
a=x-qt-text-inf:Second Codec Stream
m=video 0 RTP/AVP 26
c=IN IP4 0.0.0.0
a=control:track1
m=audio 0 RTP/AVP 97
c=IN IP4 0.0.0.0
a=rtpmap:97 PCMU/16000
a=control:track2
m=metadata 0 RTP/AVP 98
c=IN IP4 0.0.0.0
a=rtpmap:98 METADATA/64000
a=control:track3

DESCRIBE rtsp://192.168.0.59 RTSP/1.0
CSeq: 3
Accept: application/sdp

RTSP/1.0 404 Stream Not Found
CSeq: 3
Date: Tue, Oct 16 2012 22:27:29 GMT
Run Code Online (Sandbox Code Playgroud)

请注意,如果不了解魔法,ch0_unicast_secondstream您就无法从设备中获得任何有意义的东西。