ONVIF — это открытый стандарт для управления оборудованием систем видеонаблюдения. Поскольку это оборудование на практике хорошо применимо и к видеосъёмке, и к ряду других задач, полезно освоить работу с ним и средства автоматизации управления и мониторинга.
Первая задача в освоении управления ONVIF устройствами — научиться посылать команды и получать ответы, в частности — статусы. Для этого нам понадобится или вручную формировать CURL запросы, или использовать библиотеку. Мы будем рассматривать вариант с библиотекой ONVIF для Python и её использованием как из Python, так и из командной строки (bash). Приводимые примеры выполняются из bash под Windows 10, то есть, вам не обязательно ставить Ubuntu или запускать виртуальную машину.
Стандарт ONVIF создан для организации взаимодействия устройств различного назначения: источников видеопотоков, устройств воспроизведения, записи, хранения, анализа медиа- и мета-данных, и т.д. Если устройство соответствует требованиям соответствующего профиля, то можно ожидать, что оно будет работать совместно с устройствами других серий и производителей (например, камера с видеорекордером и с джойстиком).
Каждый тип устройств имеет свои сервисы, при этом, любое устройство, совместимое с ONVIF, должно поддерживать функции и сервисы, описанные в базовой спецификации, а передаваемые/принимаемые потоки и файлы должны соответствовать ONVIF Streaming Specification и ONVIF Export File Format Specificationсоответственно.
Сервисы поддерживают функции, в командах передаются параметры и их значения.
Получилось много терминов, явно зависящих друг от друга. Сведём их все в следующую иерархию:
ONVIF > Profiles > Types > Services > Functions> Parameters > ValuesНаша практическая цель — поняв общую структуру, дойти до функций в конкретных сервисах и научиться с их помощью передавать значения параметров и получать статусы устройств. Тем временем, рассмотрим профили, типы и сервисы.
Согласно этому обзору, по состоянию на осень 2017 года существуют следующие профили:
Профили ONVIF и их назначение:
Загляните в обзор, там детально разобраны возможности устройств и обязательность этих возможностей для каждого из профилей.
Есть устройства, которые выполняют сразу несколько ролей. Например, сетевая видеокамера с поддержкой записи на карту памяти должна соответствовать требованиям профилей S (как устройство передачи видео по сети) и G (как сетевое устройство хранения).
Согласно спецификации ONVIF, IP-устройства делятся на типы. При этом, сама спецификация ONVIF делится на ядро (core) и на профили (profiles). Краткое видео о концепции профилей в ONVIF -- по этой ссылке.
Типизация устройств довольно условная, т.к. одна и та же IP камера может одновременно быть NVT, NVA и NVS (снимать, передавать, анализировать и хранить записи снятого по сигналу встроенного анализатора). Тем не менее, камеры более вероятно относятся к передающим устройствам, несмотря на то, что некоторые из них имеют возможности анализа снимаемого видео и сохранения записей, в т.ч. по итогам анализа.
Эта спецификация взята из базового описания сервисов ONVIF.
Она, правда, несколько не сходится с этой страницей, где перечислены команды (операции) по категориям, и со страницей Network Interface Specifications, где тоже есть спецификации сервисов.
Поскольку подключение производится к конкретному устройству, а устройство имеет определенное назначение (камера, сетевой видеорегистратор и т.д.), то не все сервисы будут доступны при работе с отдельно взятым устройством.