从 Open ONVIF(网络视频接口论坛)设备录制的问题

Posted

技术标签:

【中文标题】从 Open ONVIF(网络视频接口论坛)设备录制的问题【英文标题】:Issue with recording from the Open ONVIF (Network Video Interface Forum ) device 【发布时间】: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 有点吃惊。 【参考方案1】:

当您尝试使用媒体源时,您显然请求了未经授权的操作,因为服务器返回了错误代码 405。禁止使用该方法,或者您需要一个凭据才能使用该方法。

至于Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Method 'ns11:GetServiceCapabilities' not implemented: method name or namespace not recognized,@Sigismondo 说得对,因为大多数网络摄像机都不支持它。您将需要另一种录制方法(文字和双关语)从网络摄像机录制。

【讨论】:

【参考方案2】:

您正在使用http://" + deviceip + "/onvif/media_service 访问录制服务,但这是media.wsdl 服务。因此,当您尝试在媒体服务上调用 getRecordings 时,您收到错误似乎很正常。

recording.wsdl 服务的 url 应该是 http://" + deviceip + "/onvif/recording_service

为了获得正确的 URL 以访问录制服务,您应该从 devicemgmt.wsdl 服务的 GetCapabilities 方法请求它。

【讨论】:

【参考方案3】:

HTTP 405 - Resource not allowed 通常出现在 IIS 中。 如果满足以下条件,则会出现此问题:

您没有指定文件名。例如,您不指定 http://Server/Web/...

脚本对象模型 (SOM) 已启用。

调用了 DTC 事件。

因此,当启用 SOM 时,将在页面中插入

标签,该标签无效意味着它不包含任何操作。

【讨论】:

以上是关于从 Open ONVIF(网络视频接口论坛)设备录制的问题的主要内容,如果未能解决你的问题,请参考以下文章

onvif是啥意思?

海康摄像头中的SADP协议(Smart Active Device Protocol,智能活动设备协议)和ONVIF协议(Open Network Video Interface Forum)是什么?

海康摄像头中的SADP协议(Smart Active Device Protocol,智能活动设备协议)和ONVIF协议(Open Network Video Interface Forum)是什么?

海康摄像头中的SADP协议(Smart Active Device Protocol,智能活动设备协议)和ONVIF协议(Open Network Video Interface Forum)是什么?

基于ONVIF协议的摄像头开发总结

ONVIF,GB28181是干啥用的