Моя цель — написать клиент для камер onvif PTZ, чтобы я мог просматривать данные (значения панорамирования / наклона / камеры / объектива), отправлять команды управления и просматривать видео. Я был несколько успешным, используя C ++ / gsoap с камерой Axis. Тогда я попробовал это с камерой от другой компании, и это не работало. Я считаю, что проблема в том, что другая камера использует другую версию «чего-то» — я не уверен, что это другая схема, другая версия профиля, другая версия ONVIF или другая версия мыла.
Я хочу сделать клиент, который поддерживает любую камеру ONVIF, или, по крайней мере, подавляющее большинство из них. Я не хочу говорить: «Извините, вашей камере 1 год, и этот протокол больше не поддерживается».
Я использовал onvifcpplib, который, похоже, был заброшен на некоторое время, и теперь его проект gitbhub переходит к rapidonvif, который выглядит совершенно иначе.
Уже почти два дня я изучаю ONVIF и пытаюсь понять, что из этого выйдет. Если я пойду сюда: https://www.onvif.org/profiles/specifications/specification-history/ Я вижу не менее 18 различных версий спецификаций!
Эта версия, похоже, влияет на версии файлов wsdl, поэтому, например, я вижу, что здесь есть версия 1.0 для мультимедиа wsdl: http://www.onvif.org/ver10/media/wsdl/media.wsdl … но здесь есть версия 2.0 того же файла: http://www.onvif.org/ver20/media/wsdl/media.wsdl .
И я не думаю, что они обратно совместимы. Но я не могу найти один для 2.6 — так:
http://www.onvif.org/ver26/media/wsdl/media.wsdl не существует.
И это только один из 15 wsdl-файлов, с которыми мне нужно использовать gsoap.
Я действительно запутался в том, что делать. Есть ли специалист по ONVIF, который может помочь мне с некоторыми из этих вопросов?
Вопрос 1) Есть ли основной список или что-то, что говорит мне как клиентскому клиенту, какие версии wsdl я должен поддерживать, а какие нет обратной совместимости? Попытка каждой возможной перестановки всех 18 версий со всеми 15 файлами wsdl заняла бы вечно! Некоторые из них могут быть обратно совместимы, а другие нет — откуда мне знать, что есть что?
Вопрос 2) Помимо спецификаций сетевого интерфейса, существуют разные версии профиля. Некоторые из них также не совместимы с предыдущими версиями?
Вопрос 3) Помимо спецификаций сетевых интерфейсов И версий профиля, существует несколько версий SOAP — 1.1 и 1.2. Нужно ли беспокоиться о некоторых камерах, использующих 1.1, или ONVIF всегда использует 1.2?
Вопрос 4) Как я должен скомпилировать несколько версий с помощью gsoap? Если я использую wsdl2h, а затем soapcpp2 для версии 1.0 и 2.0 ptz wsdl, например, а затем пытаюсь включить оба в один и тот же проект, то возникнут конфликты. Я не хочу говорить пользователям … извините, но вам придется исследовать и выяснить, использует ли ваша камера версию ONVIF, и вам придется использовать этот другой исполняемый файл или плагин.
Вопрос 5) Даже если мне удалось получить несколько версий для компиляции в одном приложении, как я узнаю, какую версию использовать при подключении к определенной камере? Запрашиваю ли я камеру и спрашиваю: «Какая у вас версия? Хорошо, вы используете именно эту версию и профиль, поэтому я буду использовать этот набор команд»?
Вопрос 6) С таким количеством вариаций и версий можно ожидать, что вы напишите клиент ONVIF, который поддерживает большинство камер, не тратя месяцы на разработку? Существует ли какая-либо сторонняя библиотека или SDK, которая абстрагирует все эти версии voodoo?
Спасибо за любую помощь, вы можете предоставить!
1 + 2) Клиент может поддерживать любой набор документов wsdl, который он выберет, потому что делаются только дополнения и не вносятся изменения в типы и операции. Если я правильно помню, это указано в Базовом документе.
3) Насколько я знаю, используется только SOAP 1.2.
4) У меня нет хорошего ответа, я написал свой собственный генератор кода C ++, который занимался этими проблемами.
5) GetServices возвращает версию службы, предоставляемой устройством.
6) Это не так уж плохо … Я думаю, что большинство функций могут быть определены так или иначе. Существует определенная путаница до версии 2.0. Основные проблемы, которые я обнаружил, касаются реализаций устройств, не соответствующих спецификации.
Других решений пока нет …