Onvif получить профили

сегодня я использую камеру VDX и хочу управлять ею по протоколу Onvif. В моей программе мне нужно сделать запрос GetProfiles.

С другими камерами (Bosh, Lumens, Axis, ec...) мой метод работает нормально, но с VDX у меня много проблем. В частности, если я использую следующий фрагмент (используя порт 80), сервер выдает исключение (ошибка 414 URI слишком большой):

    var httpTransport = new HttpTransportBindingElement
{
    AuthenticationScheme = AuthenticationSchemes.Digest
};

var binding = new CustomBinding(new TextMessageEncodingBindingElement
    (MessageVersion.None, Encoding.Default), httpTransport);

    var builder = new UriBuilder("http", "10.0.34.32", 80, "/onvif/media_service");
    var mediaAddress = builder.Uri;

    var mediaClient = new MediaClient(binding, new EndpointAddress(mediaAddress));
    mediaClient.ClientCredentials.HttpDigest.ClientCredential.UserName = username;
    mediaClient.ClientCredentials.HttpDigest.ClientCredential.Password = password;

    var getProfilesResponse = await mediaClient.GetProfilesAsync();
    var profiles = getProfilesResponse.Profiles;
}

Если я изменю номер порта на 81, сервер ответит без ошибок, но профили будут нулевыми (на самом деле есть 2 профиля).

Зайдя на веб-страницу камеры, я обнаружил следующие номера портов: введите здесь описание изображения

Используя Onvif Device Manager, он работает правильно ... кто-нибудь может сказать мне, что я не так? Любые идеи?


person Antonio Argentieri    schedule 22.02.2021    source источник


Ответы (1)


Как вы решили подключиться к медиа-сервису через порт 80 с относительным URI /onvif/media_service? Вероятно, вы используете не тот (и жестко кодировать их в коде плохо, так как более новые версии прошивки могут это изменить).

Вам следует вызвать GetServices из службы управления устройствами и использовать правильный URI для доступа к нужной службе.

person Ottavio Campana    schedule 08.03.2021