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