Problema con la grabación desde el dispositivo Open ONVIF (Network Video Interface Forum)


90

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

5
tenga en cuenta que "grabación" es el servicio que utilizan las grabadoras ONVIF: la mayoría de las cámaras ip no lo admiten. Creo que debería comprobarlo en las capacidades del dispositivo, ya que es un servicio opcional (depende del perfil admitido): onvif.org/ver10/device/wsdl/GetCapabilities . Una nota más: en la última línea está asignando getRecordings () a "capacidades" ... mirando onvif.org/onvif/ver10/recording.wsdl - Yo diría que este es el tipo de salida para GetServiceCapabilities (). Solo compruébalo dos veces también.
Sigismondo

1
Se deben examinar las políticas de seguridad del servidor web, ya que el método parece existir en el código, pero el cliente no lo permite ni lo alcanza.
Ved

De acuerdo con Ved ... Quien esté implementando este WSDL no ha implementado ciertas características o el espacio de nombres apunta a una declaración WSDL que no incluye la función. Personalmente, estoy un poco desconcertado por esta elección de ONVIF de WSDL.

Respuestas:


2

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.


1

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 .


0

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.

  • Se llama un evento DTC.

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.