2

我是媒体流的新手。
我项目中的一个模块包括来自 ONVIF 设备的实时流媒体。我找到了几个关于ONVIF 直播的教程。我从 onvif 官方站点下载了 wsdl 文件。并从 wsdl 生成了源代码(我使用的是 netbeans IDE)。
并配置了onvif设备。现在我有了 onvif 设备的 IPAddress 和生成的 WS。
我对这个 ws 与设备的集成感到非常困惑。
如何使用这些 WS 连接到设备?

尝试过的代码如下

URL url = new URL("file://"+System.getProperty("user.home")+"/Desktop/devicemgmt.wsdl");

Service service = Service.create(url, qname);
Device device = service.getPort(Device.class);
System.out.println("device : "+device);

((BindingProvider) device).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
                "http://" + camIp + "/onvif/device_service");

Holder<String> manufacturer = new Holder<String>();
Holder<String> model = new Holder<String>();
Holder<String> firmwareVersion = new Holder<String>();
Holder<String> serialNumber = new Holder<String>();
Holder<String> hardwareId = new Holder<String>();

device.getDeviceInformation(manufacturer, model, firmwareVersion, serialNumber, hardwareId);

尝试运行时,发生给定的异常

run:device : Metro/2.2.0-1 (tags/2.2.0u1-7139; 2012-06-02T10:55:19+0000) JAXWS-RI/2.2.6-2 JAXWS/2.2 svn-revision#unknown: Stub for http://192.168.2.22/onvif/device_service
Exception in thread "main" com.sun.xml.ws.protocol.soap.VersionMismatchException: Couldn't create SOAP message. Expecting Envelope in namespace http://www.w3.org/2003/05/soap-envelope, but got http://schemas.xmlsoap.org/soap/envelope/ 
    at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:198)
    at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:328)
    at com.sun.xml.ws.encoding.StreamSOAP12Codec.decode(StreamSOAP12Codec.java:102)
    at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:149)
    at com.sun.xml.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:361)
    at com.sun.xml.ws.transport.http.client.HttpTransportPipe.createResponsePacket(HttpTransportPipe.java:279)
    at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:228)
    at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:143)
    at com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:139)
    at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:961)
    at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:910)
    at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:873)
    at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:775)
    at com.sun.xml.ws.client.Stub.process(Stub.java:429)
    at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:168)
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119)
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:102)
    at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:151)
    at com.sun.proxy.$Proxy44.getDeviceInformation(Unknown Source)
    at devicetest.OnvifTest.main(OnvifTest.java:52)
Java Result: 1
BUILD SUCCESSFUL (total time: 17 seconds)
            System.out.println(manufacturer.value);
            System.out.println(model.value);
            System.out.println(firmwareVersion.value);
            System.out.println(serialNumber.value);
            System.out.println(hardwareId.value);

感谢您的任何建议。

4

2 回答 2

1

谢谢大家。最后我找到了解决方案。该错误是由于我的设备和肥皂版本的版本不匹配造成的。我通过更改 wsdl 中的架构信封 url 解决了这个问题。

于 2014-01-03T05:45:30.033 回答
0

我认为我们需要更多关于您尝试过的信息。由于问题含糊不清,因此研究一下可能会有所帮助。这说明了使用 WS 连接到设备的方法。 http://www.openipcam.com/files/ONVIF/ONVIF_WG-APG-Application_Programmer 's_Guide.pdf

于 2013-12-31T15:03:53.380 回答