从开放的 ONVIF (网络视频接口论坛)设备录音的问题

我正在从事开放网络视频接口论坛-Java 项目,并遵循在 应用程序员指南中描述的步骤。

我已经从在 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
5637 次浏览

When you tried with the media source, you requested an unauthorized action apparently since the server returned Error code 405. Either the method is prohibited from use, or you need a credential to use the method.

As for Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Method 'ns11:GetServiceCapabilities' not implemented: method name or namespace not recognized, @Sigismondo is right about the fact that most ip cameras don't support it. You will need an alternative recording method(literal and pun) to record from an ip camera.

You are using http://" + deviceip + "/onvif/media_service to reach the Recording service, but this is a media.wsdl service. So when you try to call getRecordings on the media service it seems normal you receive an error.

The url for recording.wsdl service should be http://" + deviceip + "/onvif/recording_service.

In order to get the corect URL to reach the recording service you should request it from the GetCapabilities method of the devicemgmt.wsdl service.

HTTP 405 - Resource not allowed usually occurs in IIS. This problem occurs if the following conditions are true:

  • You do not specify the file name. For example, you do not specify http ://Server/Web/...

  • The Scripting Object Model (SOM) is enabled.

  • A DTC event is called.

So, when the SOM is enabled a < form > tag is inserted in the page the tag is invalid means it does not contain any action.