Протокол ONVIF
Простое управление IP-камерами и другими устройствами, поддерживающими стандарт ONVIF, с помощью реализации протокола ONVIF. Цель этой библиотеки — удобное и простое управление IP-камерами и прочими устройствами, которые поддерживают стандарт ONVIF.
Чтобы установить библиотеку, используйте команду go get:
go get gitee.com/dzhw0314/onvif
Реализованы следующие сервисы:
Если в сети есть устройство по адресу 192.168.13.42, а его сервисы ONVIF используют порт 1234, то вы можете подключиться к устройству следующим образом:
dev, err := onvif.NewDevice(onvif.DeviceParams{Xaddr: "192.168.13.42:1234"})
Порт ONVIF может отличаться в зависимости от устройства. Чтобы узнать, какой порт использовать, можно перейти в веб-интерфейс устройства. Обычно это порт 80.
Если какая-либо функция сервисов ONVIF требует аутентификации, необходимо использовать метод Authenticate.
device := onvif.NewDevice(onvif.DeviceParams{Xaddr: "192.168.13.42:1234", Username: "username", Password: password})
Каждый сервис ONVIF в этой библиотеке имеет свой пакет, в котором определены все типы данных этого сервиса, и имя пакета совпадает с именем сервиса и начинается с заглавной буквы. В onvif определены структуры для каждой функции каждого сервиса ONVIF, поддерживаемого этой библиотекой. Определите тип данных функции GetCapabilities сервиса Device. Это делается следующим образом:
capabilities := device.GetCapabilities{Category:"All"}
Почему структура GetCapabilities имеет поле Category и почему значение этого поля равно All?
На рисунке ниже показана документация для GetCapabilities (https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl). Видно, что функция принимает один параметр Category, и его значение должно быть одним из следующих: «All», «Analytics», «Device», «Events», «Imaging», «Media» или «PTZ».
Пример определения типа данных функции GetServiceCapabilities в PTZ (https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl):
ptzCapabilities := ptz.GetServiceCapabilities{}
На рисунке ниже показано, что GetServiceCapabilities не принимает никаких аргументов.
Общие типы данных находятся в пакете xsd/onvif. Типы данных (структуры), которые могут использоваться всеми сервисами, определены в пакете onvif.
Пример того, как определить тип данных функции CreateUsers в Devicemgmt (https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl):
createUsers := device.CreateUsers{User: onvif.User{Username:"admin", Password:"qwerty", UserLevel:"User"}}
На рисунке ниже видно, что в этом примере поле CreateUsers структуры должно быть полем User, тип данных которого — структура User, содержащая поля Username, Password, UserLevel и необязательное поле Extension. Структура User находится в пакете onvif.
Для выполнения любой функции одного из сервисов ONVIF, структура которого была определена, необходимо использовать CallMethod объекта устройства.
createUsers := device.CreateUsers{User: onvif.User{Username:"admin", Password:"qwerty", UserLevel:"User"}}
device := onvif.NewDevice(onvif.DeviceParams{Xaddr: "192.168.13.42:1234", Username: "username", Password: password})
device.Authenticate("username", "password")
resp, err := dev.CallMethod(createUsers)
Улучшено и дополнено на основе goonvif.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )