一、设备搜索原理
Onvif协议要求实现Onvif协议服务的设备支持设备发现以及探测,也就是discovery和probe;discovery,客户端向网段内的组播地址为239.255.255.250,端口为3702发送广播消息,等待网内Onvif协议设备响应响应消息的设备会返回自己的IP、UUID、EP Address、Type等,最重要的会返回设备的Device Service Address,格如:http://192.168.100.123:8099/onvif/device_service ,此地址就是为设备提供Onvif服务的服务地址;
二、设备搜索实现
客户端首先发起ws-discovery,查找所在网络段内的所有的ipcam。Ipcam在接收到ws-discovery之后可以进行响应;
1、创建组播用的udp socket;
2、绑定组播地址为239.255.255.250,端口为3702,因为ws-discovery的组播地址和端口就是为239.255.255.250和3702;
3、向socket发送(send)搜索数据,下面探测消息(Probe)的内容,是ONVIF Device Test Tool工具搜索IPC时通过Wireshark抓包工具抓包到的:
<?xml version="1.0" encoding="utf-8"?>
<Envelope xmlns:dn="http://www.onvif.org/ver10/network/wsdl"
xmlns="http://www.w3.org/2003/05/soap-envelope">
<Header>
<wsa:MessageID xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
uuid:25862dc4-4866-42a9-87a7-edcf2918ab10
</wsa:MessageID>
<wsa:To xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
urn:schemas-xmlsoap-org:ws:2005:04:discovery
</wsa:To>
<wsa:Action xmlns:wsa="http://schemas.xmlsoap.org/ws