ONVIF - 设备发现的开始

2022-01-08 00:00:00 camera ip java ip-camera onvif

我打算做一个 java onvif 应用程序.我创建了一个新项目并从 devicemgmt.wsdl 生成了源代码.还从 remote discovery.wsdl 生成了类.如何使用这些生成的类发现网络中的设备?感谢您的帮助.

I am planning to do a java onvif application. I have created a new project and generated sources from devicemgmt.wsdl.Also generated the classes from remote discovery.wsdl. How can I discover a device in a network using theses generated classes? Thanks for any help.

推荐答案

devicemgmt.wsdl与发现过程无关,ONVIF发现过程基于http://specs.xmlsoap.org/ws/2005/04/discovery 它使用 SOAP over UDP.

devicemgmt.wsdl is not related to discovery process, the ONVIF discovery process is based on http://specs.xmlsoap.org/ws/2005/04/discovery it use SOAP over UDP.

如果你使用的是apache-cxf,这可以使用

If you are using apache-cxf, this can be achieve using

org.apache.cxf.ws.discovery.WSDiscoveryClient

org.apache.cxf.ws.discovery.WSDiscoveryClient

一个简单的示例代码可以是:

A simple sample code could be :

import java.util.List;
import javax.xml.ws.EndpointReference;
import org.apache.cxf.ws.discovery.WSDiscoveryClient;

public class Main 
{
    public static void main(String[] args) 
    {
        WSDiscoveryClient client = new WSDiscoveryClient();
        client.setVersion10(); // use WS-discovery 1.0
        client.setDefaultProbeTimeout(1000); // timeout 1s

        System.out.println("Probe:" + client.getAddress());
        List<EndpointReference> references = client.probe();

        System.out.println("Nb answsers:" + references.size());
        for (EndpointReference ref : references)
        {
            System.out.println(ref.toString());
        }
    }
}

相关文章