Files
onvif/README.md
2018-04-07 18:57:05 +03:00

4.0 KiB
Raw Blame History

Goonvif

Библиотека Goonvif создана для упрощения взаимодействия с ONVIF устройствами. На данный момент в библиотеке реализована поддержка NVT(Network Video Transmitter) устройств, а именно следующих ONVIF сервисов:

  • Core или DeviceManagement
  • Media
  • Imaging
  • PTZ
  • Video Analytics

Dependencies

etree

Установка

Для установки библиотеки необходимо воспользоваться утилитой go get:

go get github.com/yakovlevdmv/goonvif

Начало работы

Чтобы начать работать с камерой, необходимо создать объект device. Для этого необходимо воспользоваться функцией func NewDevice(xaddr string) (*device, error), которая принимает адрес ONVIF устройства и возвращает указатель на созданный объект либо ошибку. Если камера не доступна, указан неверный адрес для ONVIF сервиса камеры (возможно находся по другому порту) или же камера вообще не поддерживает ONVIF функция вернет не nil error, а в качестве указателя на объект вернет nil.

Пример подключения к камере

Пусть камера в сети находится по адресу 192.168.13.42, а ее ONVIF сервисы расположены на 1234 порту. Тогда,

dev, err := goonvif.NewDevice("192.168.13.42:1234")

сработает успешно, а

dev, err := goonvif.NewDevice("192.168.13.42:80")

вернет нулевой объект камеры и ошибку:

camera is not available at 192.168.13.42:80 or it does not support ONVIF services

Модернизируем код, чтобы обрабатывать ошибку и получим:

	dev, err := goonvif.NewDevice("192.168.13.42:80")
	if err != nil {
		panic(err)
	}

	///Работа с камерой

Поддерживаемые ONVIF сервисы

Теперь, когда камера доступна, можно приступать к работе с ней. Однако стандарт ONVIF имеет множество сервисов, точка доступа (endpoint) к которым не закреплена стандартом (кроме DeviceManagment: http://onvif_host/onvif/device_service). Поэтому дальше встает вопрос о поддерживаемых камерой сервисах и определении их endpoint'ов. Для получения поддерживаемых камерой сервисов необходимо вызвать метод GetCapabilities сервиса DeviceManagement. Однако данная библиотека автоматизирует данный процесс, поэтому при создании объекта device при помощи func NewDevice(xaddr string) (*device, error) библиотека одновременно обрабатывает поддерживаемые камерой сервисы. Таким образом чтобы получить поддерживаемые устройством сервисы, можно воспользоваться двумя путями:

  1. Вызвать метод GetCapabilities сервиса DeviceManagement(как это сделать будет рассмотрено дальше) и обработать ответ.
  2. Довериться библиотеке и вызвать функцию func (dev *device)GetServices() map[string]string, которая вернет map[string]string, ключом которой является название сервиса, а значением - endpoint данного сервиса