【发布时间】:2014-01-26 00:32:59
【问题描述】:
我正在开发 Open Network Video Interface Forum-Java 项目,并按照ONVIF Application Programmer's Guide 中描述的步骤进行操作。
我已经从 ONVIF 站点中提供的wsdls 生成了源代码。我可以使用media.wsdl 检索实时流 URI。现在我有一个记录问题。我尝试过的代码如下:
RecordingService recording_ervice = new RecordingService();
RecordingPort record_port = recording_ervice.getRecordingPort();
BindingProvider bindingProvider = (BindingProvider) record_port;
// Add a security handler for the credentials
final Binding binding = bindingProvider.getBinding();
List<Handler> handlerList = binding.getHandlerChain();
if (handlerList == null) {
handlerList = new ArrayList<Handler>();
}
handlerList.add(new RecordStream.SecurityHandler());
// binding.setHandlerChain(handlerList);
// Set the actual web services address instead of the mock service
Map<String, Object> requestContext = bindingProvider.getRequestContext();
requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://" + deviceip + "/onvif/media_service");
requestContext.put(BindingProvider.USERNAME_PROPERTY, user);
requestContext.put(BindingProvider.PASSWORD_PROPERTY, pass);
Recordings recordings = record_port.getRecordings();
上面的代码在运行时会报错:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Method 'ns11:GetServiceCapabilities' not implemented: method name or namespace not recognized
我也尝试了媒体服务,然后错误是:
Exception in thread "main" com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 405: Method Not Allowed
【问题讨论】:
-
请注意,“录制”是 ONVIF 录像机使用的服务:大多数网络摄像机不支持它。我认为您应该在设备功能中检查它,因为它是一项可选服务(取决于支持的配置文件):onvif.org/ver10/device/wsdl/GetCapabilities。还有一点需要注意:在最后一行中,您将 getRecordings() 分配给“功能”...查看onvif.org/onvif/ver10/recording.wsdl - 我会说这是 GetServiceCapabilities() 的输出类型。也请仔细检查一下。
-
应检查网络服务器的安全策略,因为方法似乎存在于代码中,但客户端不允许或无法访问。
-
同意 Ved... 实现此 WSDL 的人要么未实现某些功能,要么命名空间指向不包含该功能的 WSDL 声明。就我个人而言,我对这个 ONVIF 选择 WSDL 有点吃惊。
标签: java networking recording ip-camera onvif