Управление PTZ для IP-камеры с помощью библиотек onvif

Кто-нибудь знает, как использовать элемент управления ONVIF PTZ в программе захвата камеры на С#. Я добавил onvif_PTZ_services в качестве ссылки на свой проект, но я не знаю, как использовать его для реализации управления PTZ для IP-камеры. Мне нужен простой пример.


person mary    schedule 20.06.2013    source источник
comment
Вы должны добавить некоторый код, чтобы показать, что вы пробовали, и указать на строку, в которой у вас есть проблемы. В противном случае поиск должен дать вам много ответов.   -  person    schedule 20.06.2013


Ответы (1)


Используйте для этого автоматически сгенерированный класс PTZClient.

Функции PTZClient AbsoluteMove, ContinuousMove и Stop — это методы, которые вам нужны. Подробное описание каждого метода см. в документации ONVIF. Обратите внимание, что Onvif, использующий Soap12, и большинство устройств, использующих безопасность Digest через Http. Это не поддерживается WCF по умолчанию, поэтому для этого вам нужна пользовательская привязка.

person Frode    schedule 24.06.2013
comment
Я использовал следующий код: PTZClient myPTZ = new PTZClient(); но я получил сообщение об ошибке: не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт onvif_ptz.PTZ в разделе конфигурации клиента ServiceModel. Это может быть связано с тем, что для вашего приложения не найден файл конфигурации или с тем, что в клиентском элементе не удалось найти элемент конечной точки, соответствующий этому контракту. У вас есть идеи, почему я получил такую ​​​​ошибку при отладке программы? - person mary; 01.07.2013
comment
Я написал следующее: PTZClient myPTZ = new PTZClient(basicHttpbinding, endpointAddress); myPTZ.Открыть(); onvif_IPCamera.onvif_ptz.PTZNode[] plist = myPTZ.GetNodes(); Я получил исключение для строки GetNodes: System.ServiceModel.FaultException не было обработано HResult=-2146233087 Message=Version Mismatch Source=mscorlib - person mary; 02.07.2013
comment
Вы не должны использовать BasicHttpBinding, поскольку он поддерживает только Soap11, а onvif использует Soap12. Вы также не можете использовать WshttpBinding, так как это позволяет использовать только дайджест/базовую безопасность через HTTPS. Если вы общаетесь со своими устройствами через Http, вы должны использовать для этого пользовательскую привязку. Здесь есть несколько примеров переполнения стека о том, как аутентифицировать запрос к устройствам Onvif. new PTZClient() предполагает, что у вас есть одна и только одна конечная точка для PTZClient, определенная в вашем app.config/web.config. Если конечная точка не существует или существует более одной конечной точки, перегрузка конструктора завершится ошибкой. - person Frode; 03.07.2013
comment
Я использовал тот же подход, что и в stackoverflow.com/questions/16523992/ для управления PTZ с помощью onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl, custombinding и ptzclient, но я получил ошибку: служба HTTP расположена по адресу камера IP/onvif/ptz_service недоступен, служба слишком занята или конечная точка не прослушивается. Не могли бы вы помочь мне в этом? Спасибо. - person mary; 08.07.2013
comment
Мне уже удалось получить информацию об устройстве с помощью службы управления устройствами onvif и пользовательской привязки с адресом конечной точки camera IP/onvif/device_service. У меня проблема с доступом к камере для управления PTZ. Я хотел бы знать формат адреса конечной точки? - person mary; 08.07.2013
comment
Я также могу получить токен узла PTZ и токен конфигурации PTZ с помощью GetNodesRequest, GetNodesResponse, GetConfigurationsRequest и GetConfigurationsResponse, а также с помощью getNode (используя ip/onvif/device_service), но по-прежнему не могу выдавать такие команды, как absolutemove и т. д., и я получаю Неверный запрос 400 удаленный сервер вернул неожиданный ответ. - person mary; 09.07.2013