Onvif¶
Onvif - это HTTP XML протокол между камерой и клиентом, позволяющий узнать RTSP урлы на камере и настроить эту камеру.
Рядом с Onvif существует ещё WS-Discovery механизм, позволяющий найти камеру в локальной сети, но он не является неотъемлемой частью onvif. Вместо него можно использовать и другие проприетарные, зачастую плохо описанные механизмы.
Onvif так же распространяется на более сложные VMS системы и на видеоаналитику, но на практике эти применения onvif существенно более редкие, менее стандартизованные и реже используются. И ещё реже реализованы по стандартам.
Как работать с Onvif¶
Для начала работы нужно знать, на каком порту устройства есть Onvif сервер. В силу того, что большинство реализаций Onvif написаны на библиотеке gSOAP (она GPL), её проще запустить отдельным демоном на отдельном порту, чем встраивать в основной веб-сервер, поэтому обычная ситуация, когда камера показывает свой веб-интерфейс на 80-м порту, а машинные настройки через какой-нибудь 8899.
В протоколах для поиска камер типа WD-Discovery обычно порт для onvif явно указывается.
Сам по себе Onvif является SOAP протоколом и чуть ли не единственным примером SOAP протокола в интернете, за пределами энтерпрайзного мира.
Его WSDL (т.е. жестко структурированное описание протокола) доступен на сайте onvif вместе с текстовыми описаниями.
В теории использование такого жесткого протокола как SOAP должно если не гарантировать порядок в данных, то хотя бы гарантировать порядок в их оформлении. На практике всё сильно хуже, потому что библиотек для работы с SOAP очень мало, протокол очень сложный и в итоге всё заканчивается тем, что в живом коде на камере просто лежат шаблоны, в которые подставляются данные без проверки, генерируя невалидный XML.
Как проиграть видео по Onvif?¶
Очень частый вопрос, на который два ответа.
Первый, формальный: никак. Onvif это текстовый протокол для настройки камеры, видео по нему играть нельзя.
Второй, по существу: воспользоваться Onvif Profile S Specification и получить урлы для проигрывания видео с камеры по RTSP.
Обычно когда противопоставляют «проигрывание по RTSP» и «проигрывание по Onvif» подразумевается, что в первом случае никакого onvif нет и нужно где-то узнать, по каким урлам отвечает камера. Во втором можно выяснить урл по стандартизованному протоколу.
Как настроить камеру по Onvif?¶
Onvif предлагает широкие возможности по настройке камер, но важно знать, что с каждой моделью камер надо будет на месте разбираться с тем, как именно интерпретируется стандарт.
Например, onvif разрешает завести несколько профилей (качеств, потоков, дорожек и т.п.), позволяет их создавать, удалять, давать свои имена. Практически все камеры позволят поменять битрейт профиля, но вот удалить профили или переименовать их как вам удобнее смогут уже единицы.
Это значит, что в вашем коде по настройке разных камер нельзя будет удалить все профили и пересоздать их с нуля по единому стандарту. Вместо этого нужно будет аккуратно для каждого типа камер описывать, как именно на эту конкретную модель заливать данные.
Как получить события движения по Onvif?¶
Onvif позволяет подключиться к камере и получать с неё события с детектора движения.
В теории должен поддерживаться long polling, т.е. если прям в момент подключения нет никакого движения, то камера должна засыпать и ждать до 60 секунд: вдруг какое-то движение будет. Сам по себе этот механизм очень хороший, но в многих камерах ничего такого нет, она сразу вернет отсутствие движения и попросит переподключиться.
На стороне клиента нужно такое обрабатывать и снижать частоту обращений.
Onvif и политика¶
Onvif является торговой маркой соответствующей организации, которая подчиняется американским законам. В 2019-м году Hikvision и Dahua исключались из этой организации и им было запрещено заявлять у себя поддержку Onvif. Если честно, то немного непонятно: а кто же тогда должен был остаться в этой организации, но им виднее.
Будущее этого стандарта, авторы которого пытаются забанить более 80% мирового рынка можно помыслить себе самостоятельно.
Альтернативы Onvif¶
PSIA¶
На фоне огромной сложности SOAP и наличия ровно одной доступной реализации в виде gSOAP появился и никуда не внедрился стандарт PSIA. Прекрасная идея, которая сводится к договоренностям на HTTP и RTSP урлы и существенно более простому обмену. Но, не взлетело, в камерах мало используется.
GBT28181¶
В Китае распространен GB/T 28181. Статус его не до конца понятен, но скорее всего увеличение количества региональных стандартов - это норма, которая нас ожидает впереди.
ISAPI¶
Аналог PSIA, но от hikvision и реально используется. ISAPI позволяет делать всё, что могут камеры Hikvision и выглядит наиболее продвинутым. Проблема с ним одна: неясно, будет ли его когда-либо поддерживать Dahua и остальные.