usar una propiedad poner para img imagen funciona emplea ejemplo como atributos atributo agregar c# visual-studio wsdl ip-camera onvif

una - Imagen de captura de api ONVIF en C#



propiedad alt imagen (3)

Entonces, después de muchas búsquedas logré capturar una imagen de la cámara.

El primer problema fue que utilicé "Agregar referencia de servicio-> Avanzado-> Agregar referencia web" en lugar de escribir la dirección del servicio directamente en el cuadro "Agregar referencia de servicio".

Aquí, agregué la dirección: http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl

Entonces podría usar la clase MediaClient , correctamente señalada por pepOS en un comentario, y el código final se ve así:

var messageElement = new TextMessageEncodingBindingElement(); messageElement.MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.None); HttpTransportBindingElement httpBinding = new HttpTransportBindingElement(); httpBinding.AuthenticationScheme = AuthenticationSchemes.Basic; CustomBinding bind = new CustomBinding(messageElement, httpBinding); EndpointAddress mediaAddress = new EndpointAddress("http://192.168.1.168:10001/onvif/Media"); MediaClient mediaClient = new MediaClient(bind, mediaAddress); mediaClient.ClientCredentials.UserName.UserName = "admin"; mediaClient.ClientCredentials.UserName.Password = "admin"; Profile[] profiles = mediaClient.GetProfiles(); string profileToken = profiles[1].token; MediaUri mediaUri = mediaClient.GetSnapshotUri(profileToken);

El uri de la imagen se podría MediaUri.Uri en la dirección MediaUri.Uri

Tengo una cámara ip ONVIF.

Quiero capturar una imagen de la cámara para poder procesar esa imagen y guardarla en el sistema de archivos.

Descubrí que hay una aplicación onvif que proporciona un método GetSnapshotUri que debería proporcionarme una instantánea de la imagen:

http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl

Logré importar esta API en Visual Studio añadiéndole una referencia de servicio:

¿Cómo construyo un cliente para llamar a GetSnapshotUri desde este servicio?


Estoy usando el administrador de dispositivos onvif aquí. Para implementar la IP de esta cámara de método, se debe conocer el nombre de usuario y la contraseña.

// Onvif ODM using onvif.services; using odm.core; using onvif.utils; using utils; public string GetSnapshotUrl() { try { string camera_ip = "http://" + camIp + "/onvif/device_service"; Uri Camuri = new Uri(camera_ip); NvtSessionFactory sessionFactory = new NvtSessionFactory(account); INvtSession session = sessionFactory.CreateSession(Camuri); Profile[] Profiles = session.GetProfiles().RunSynchronously(); var snapshotlink = session.GetSnapshotUri(Profiles[0].token).RunSynchronously(); // taking snapshot on the first profile of the camera return snapshotlink.uri; } catch (Exception ex) { return null; } }


GetSnapshotUri devuelve un uri para descargar una imagen usando HTTP get. Entonces, en teoría, solo necesita llamar a esta función y usar el uri devuelto en la función que se muestra en este artículo de : https://.com/a/3615831/4815603