ONVIF-proxy - прокси сервер для проксирования протокола ONVIF. Принцип работы нестандартный - вместо того, чтобы разбирать входящие сообщения от клиентов, а потом их пересобирать для устройств, приходящее сообщение видоизменяется и пересылается на устройство, что сокращает время обработки запросов.
Написан на python 3, желательно использовать 3.9 и выше.
Объяснение по полям:
Важно! В remote_controller и auditories в коллекциях камер первой должна быть камера, которая:
- самая адекватная
- с самым большим количеством функций (например, если в коллекции первым поставить кодер, то PTZ на камерах в этой коллекции работать не будет)
Чтобы не указывать пути, запускаем команды в папке django-app.
pip3 install virtualenv
- устанавливаем virtualenv для создания виртуальных сред pythonpython3 -m venv onvif
- создаем виртуальную среду под названием onvif. onvif/bin/activate && pip install -r requirements.txt
- активируем среду и устанавливаем в нее пакетыВ папке /etc/systemd/system
создаем файл onvif-proxy.service
c кодом:
[Unit]
Description=Onvif Proxy in systemd
[Service]
Restart=always
WorkingDirectory=/home/pi/onvif-proxy/flask-app
ExecStart=/path/to/venv/bin/python /path/to/onvif-proxy/django-app/main.py --ip <ip> --port <port> --conf_path "<path to conf.json>" --cam_num 0
[Install]
WantedBy=multi-user.target
<ip>
- IP, указанный в conf.json<port>
- порт, указанный в conf.json<path to conf.json>
- ПОЛНЫЙ путь файла с конфигомsystemctl start onvif-proxy
- запуск сервиса
systemctl enable onvif-proxy
- включение автозапуска при запуске устройства
systemctl stop onvif-proxy
- остановка сервиса
systemctl disable onvif-proxy
- отключение автозапуска при запуске устройства
Чтобы обратиться к ONVIF-прокси в ODM, вводим ссылку по типу:
http://<ip>:<port>/<auditory>/onvif/device_service
Если обратиться по ссылке без <auditory>
, то будет открыта коллекция default
из группы remote_controller
.
ONVIF-протокол в устройстве разделен на сервисы: PTZ, Imaging и т.д.
Взаимодействие с сервисом построено через токены, причем:
Принцип, благодаря которому ONVIF-прокси может формировать коллекции (даже из камер одной модели) - это приписывание в начало всех токенов камеры ее номера в файле conf.json
. То есть, если у камеры номер 3 в коллекции, то токен будет 3_<token>
.