Не работает подключение к ip камере через Onvif c#
При подключении к ip камере с services все нормально. Но GetProfiles не получает никаких профилей от камеры.
private void button_Click(object sender, RoutedEventArgs e)
{
deviceUri = new UriBuilder("http://onvif/device_service");
string[] addr = address.Text.Split(':');
deviceUri.Host = addr[0];
if (addr.Length == 2)
{
deviceUri.Port = int.Parse(addr[1]);
}
Console.WriteLine("IP: " + deviceUri);
System.ServiceModel.Channels.Binding binding;
HttpTransportBindingElement httpTransport = new HttpTransportBindingElement();
httpTransport.AuthenticationScheme = System.Net.AuthenticationSchemes.Digest;
binding = new CustomBinding(new TextMessageEncodingBindingElement(MessageVersion.Soap12WSAddressing10, Encoding.UTF8), httpTransport);
Device.DeviceClient device = new Device.DeviceClient(binding, new EndpointAddress(deviceUri.ToString()));
Console.WriteLine("Device: " + device.Endpoint.Address);
Device.Service[] services = device.GetServices(false); // false - Include only needed services. true - Include all services for the device.
Console.WriteLine("Services: ");
Device.Service xmedia = services.FirstOrDefault(s => s.Namespace == "http://www.onvif.org/ver20/media/wsdl");
if (xmedia != null)
{
media = new Media.Media2Client(binding, new EndpointAddress(deviceUri.ToString()));
media.ClientCredentials.HttpDigest.ClientCredential.UserName = login.Text;
media.ClientCredentials.HttpDigest.ClientCredential.Password = passwordBox.Password;
media.ClientCredentials.HttpDigest.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
Media.MediaProfile[] profiles = media.GetProfiles(null, null);
if (profiles != null)
{
foreach (var p in profiles)
{
listBox.Items.Add(p.Name);
}
}
}
Ответы (1 шт):
Автор решения: KEEN
→ Ссылка
Проблема заключалась в том, что на самой камере версия библиотеки Onvif была устаревшая. При подключении к другой ip камере все происходит нормально и программа работает.