【问题标题】:ONVIF : How to form the device web service address from the IP address of an NVTONVIF : 如何从 NVT 的 IP 地址形成设备 Web 服务地址
【发布时间】:2017-09-18 15:38:18
【问题描述】:
【问题讨论】:
标签:
camera
video-streaming
ip
specifications
onvif
【解决方案1】:
根据official document(第5.1.1节),您可以通过http://<IP address>/onvif/device_service访问该服务
【解决方案2】:
你必须在 onvif xsdl 文件中添加服务(比如说http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl)
<wsdl:definitions ......>
..............
</wsdl:binding>
<!--===============================-->
<wsdl:service name="DeviceService">
<wsdl:port name="DevicePort" binding="tds:DeviceBinding">
<soap:address location="http://ip/onvif/device_service"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
并生成ws客户端源码
(对于java可以使用wsimport)
如前所述,Web 服务的入口点是 http://ip/onvif/device_service
【解决方案3】:
Şafak 指出的约定在 ONVIF 标准中有所描述。但在现实生活中,一些设备并没有遵循它。在这种情况下,您尝试发送单播 ws-discovery Probe 请求(或多播,然后按 ip-address 过滤 ProbeMatch 回复),ProbeMatch 回复中的 XAddrs 字段将包含设备服务所需的地址。
【解决方案4】:
请注意在任何地方使用*http://IP/onvif/device_service* url 来访问服务。根据 GetServices 请求:
<env:Body>
<tds:GetServicesResponse>
<tds:Service>
<tds:Namespace>http://www.onvif.org/ver10/device/wsdl</tds:Namespace>
<tds:XAddr>http://IP/onvif/device_service</tds:XAddr>
<tds:Version>
<tt:Major>2</tt:Major>
<tt:Minor>10</tt:Minor>
</tds:Version>
</tds:Service>
<tds:Service>
<tds:Namespace>http://www.onvif.org/ver10/media/wsdl</tds:Namespace>
<tds:XAddr>http://IP/onvif/Media</tds:XAddr>
<tds:Version>
<tt:Major>2</tt:Major>
<tt:Minor>10</tt:Minor>
</tds:Version>
</tds:Service>
<tds:Service>
<tds:Namespace>http://www.onvif.org/ver10/events/wsdl</tds:Namespace>
<tds:XAddr>http://IP/onvif/Events</tds:XAddr>
<tds:Version>
<tt:Major>2</tt:Major>
<tt:Minor>10</tt:Minor>
</tds:Version>
</tds:Service>
<tds:Service>
<tds:Namespace>http://www.onvif.org/ver20/ptz/wsdl</tds:Namespace>
<tds:XAddr>http://IP/onvif/PTZ</tds:XAddr>
<tds:Version>
<tt:Major>2</tt:Major>
<tt:Minor>10</tt:Minor>
</tds:Version>
</tds:Service>
<tds:Service>
<tds:Namespace>http://www.onvif.org/ver20/imaging/wsdl</tds:Namespace>
<tds:XAddr>http://IP/onvif/Imaging</tds:XAddr>
<tds:Version>
<tt:Major>2</tt:Major>
<tt:Minor>10</tt:Minor>
</tds:Version>
</tds:Service>
<tds:Service>
<tds:Namespace>http://www.onvif.org/ver10/deviceIO/wsdl</tds:Namespace>
<tds:XAddr>http://IP/onvif/DeviceIO</tds:XAddr>
<tds:Version>
<tt:Major>2</tt:Major>
<tt:Minor>10</tt:Minor>
</tds:Version>
</tds:Service>
<tds:Service>
<tds:Namespace>http://www.onvif.org/ver20/analytics/wsdl</tds:Namespace>
<tds:XAddr>http://IP/onvif/Analytics</tds:XAddr>
<tds:Version>
<tt:Major>2</tt:Major>
<tt:Minor>10</tt:Minor>
</tds:Version>
</tds:Service>
</tds:GetServicesResponse>
</env:Body>
您可以在不同的网址上拥有不同的服务。
这已在其中一台海康威视摄像机上看到。他们中的大多数使用*http://IP/onvif/device_service*。
【解决方案5】:
实际上通过 WS-Discovery 只能获取设备服务的地址。您必须通过 DeviceService:GetServices 请求获得的其他服务的地址,该请求与您之前通过 WS-Discovery 获得的地址 100% 有效。