Estoy trabajando en el proyecto Open Network Video Interface Forum-Java y sigo los pasos descritos en la Guía del programador de aplicaciones ONVIF .
He generado fuentes a partir del wsdlssitio proporcionado en ONVIF. Puedo recuperar el URI de la transmisión en vivo usando media.wsdl. Ahora tengo un problema con la grabación. Los códigos que he probado se dan a continuación:
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();
El código anterior en ejecución da un error como:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Method 'ns11:GetServiceCapabilities' not implemented: method name or namespace not recognized
También probé con el servicio de medios, entonces el error es:
Exception in thread "main" com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 405: Method Not Allowed

Respuestas:
Cuando intentó con la fuente de medios, solicitó una acción no autorizada aparentemente ya que el servidor devolvió el código de error 405. O el método está prohibido de usar o necesita una credencial para usar el método.
En cuanto a
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Method 'ns11:GetServiceCapabilities' not implemented: method name or namespace not recognized, @Sigismondo tiene razón sobre el hecho de que la mayoría de las cámaras ip no lo admiten. Necesitará un método de grabación alternativo (literal y juego de palabras) para grabar desde una cámara ip.fuente
Está utilizando
http://" + deviceip + "/onvif/media_servicepara comunicarse con el servicio de grabación, pero este es un servicio media.wsdl . Entonces, cuando intenta llamar a getRecordings en el servicio de medios, parece normal que reciba un error.La url para recording.wsdl servicio debería ser
http://" + deviceip + "/onvif/recording_service.Para que la URL de corect llegue al servicio de grabación, debe solicitarla desde el método GetCapabilities del servicio devicemgmt.wsdl .
fuente
HTTP 405: el recurso no permitido suele aparecer en IIS. Este problema ocurre si se cumplen las siguientes condiciones:
No especifica el nombre del archivo. Por ejemplo, no especifica http: // Server / Web / ...
El modelo de objetos de secuencias de comandos (SOM) está habilitado.
Entonces, cuando el SOM está habilitado, se inserta una etiqueta <formulario> en la página, la etiqueta no es válida, significa que no contiene ninguna acción.
fuente