From b71dc183a27b45d3de372df8bd93b5a8052ac3b8 Mon Sep 17 00:00:00 2001 From: yakovlevdmv Date: Sat, 7 Apr 2018 23:33:43 +0300 Subject: [PATCH] Update README.md --- README.md | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index f97c8b4..da40c9b 100644 --- a/README.md +++ b/README.md @@ -16,11 +16,11 @@ go get github.com/yakovlevdmv/goonvif # Начало работы Чтобы начать работать с камерой, необходимо создать объект `device`. Для этого необходимо воспользоваться функцией `func NewDevice(xaddr string) (*device, error)`, -которая принимает адрес ONVIF устройства и возвращает указатель на созданный объект либо ошибку. -Если камера не доступна, указан неверный адрес для ONVIF сервиса камеры (возможно находся по другому порту) или же камера вообще не поддерживает ONVIF -функция вернет не `nil` error, а в качестве указателя на объект вернет `nil`. +которая принимает IP адрес ONVIF устройства и возвращает указатель на созданный объект либо ошибку. +Если камера недоступна, указан неверный адрес для ONVIF сервиса камеры (возможно находится по другому порту) или же камера вообще не поддерживает ONVIF +функция вернет error не являющимся `nil`, а в качестве указателя на объект устройства вернет `nil`. ### Пример подключения к камере -Пусть камера в сети находится по адресу 192.168.13.42, а ее ONVIF сервисы расположены на 1234 порту. Тогда, +Пусть камера в сети находится по адресу 192.168.13.42, а ее ONVIF сервисы расположены на порте 1234. Тогда, ``` dev, err := goonvif.NewDevice("192.168.13.42:1234") ``` @@ -41,14 +41,14 @@ if err != nil { ///Работа с камерой ``` ### Поддерживаемые ONVIF сервисы -Теперь, когда камера доступна, можно приступать к работе с ней. Однако стандарт ONVIF имеет множество сервисов, точка доступа (endpoint) к которым не закреплена стандартом (кроме DeviceManagment: http://onvif_host/onvif/device_service). +Теперь, когда камера доступна, можно приступать к работе с ней. Однако стандарт ONVIF имеет множество сервисов, а также точку доступа (endpoint) которая не определена стандартом (кроме DeviceManagment: http://onvif_host/onvif/device_service). Поэтому дальше встает вопрос о поддерживаемых камерой сервисах и определении их endpoint'ов. Для получения поддерживаемых камерой сервисов необходимо вызвать метод GetCapabilities сервиса DeviceManagement. -Однако данная библиотека автоматизирует данный процесс, поэтому при создании объекта device при помощи `func NewDevice(xaddr string) (*device, error)` -библиотека одновременно обрабатывает поддерживаемые камерой сервисы. Таким образом чтобы получить поддерживаемые устройством сервисы, можно воспользоваться двумя путями: +Однако эта библиотека автоматизирует данный процесс, поэтому при создании объекта device при помощи `func NewDevice(xaddr string) (*device, error)` +библиотека одновременно обрабатывает поддерживаемые камерой сервисы. Таким образом есть два способа получения поддерживаемых устройством сервисов: 1. Вызвать метод GetCapabilities сервиса DeviceManagement(как это сделать будет рассмотрено дальше) и обработать ответ. 2. Довериться библиотеке и вызвать функцию `func (dev *device)GetServices() map[string]string`, которая вернет map[string]string, ключом которой является название сервиса, а значением - endpoint данного сервиса -### Работка с камерой +### Работа с камерой Для работы с различными сервисами камерами необходимо отправить корректный SOAP запрос, в теле которого находится вызываемый метод и принимаемые им функции. **Goonvif** берет на себя работу по созданию корректного SOAP запроса и его отправке. В **Goonvif** определены структуры, для каждой функции каждого (поддерживаемого данной бибилиотекой) сервиса ONVIF: - [DeviceManagement Service](Device/types.go) @@ -102,11 +102,10 @@ if err != nil { } ``` -В данном примере можно наблюдать использования пакета onvif, в котором определено большинство типов, используемых в различных сервисах. -Поэтому при создании структур запросов необходимо это учитывать. +В данном примере можно наблюдать использование пакета onvif, в котором определено большинство типов, используемых в поддерживаемых библиотекой сервисах, поэтому при создании структур запросов необходимо это учитывать. ##### ВАЖНО -Некоторые камеры работают специфично. Это означает, что в зависимости от модели камеры можно не получить ошибки при неправильном запросе. Поэтому советую проверять точно ли выполнилась операция. Например, для метода CreateUsers вывести список всех пользователей и сравнить. +Некоторые камеры работают специфично. Это означает, что в зависимости от модели камеры можно не получить ошибки при неправильном запросе. Поэтому советую проверять, точно ли выполнилась операция. Например, для метода CreateUsers надо вывести список всех пользователей и проверить добавился ли пользователь. 3. Метод ContinuousMove сервиса PTZ @@ -135,7 +134,7 @@ move := PTZ.ContinuousMove{ } ``` -**Заметим**, что объекты Velocity, PanTilt и Zoom определены в пакете onvif. Такая ситуация соответствует всем встроенным типам. +**Заметим**, что объекты Velocity, PanTilt и Zoom определены в пакете onvif. Такое применение свойственно для большинства встроенных в структуру типов. Для вызова данной функции воспользуемся методом `func (dev device) CallMethod(method interface{}) (string, error)`: ``` @@ -163,5 +162,10 @@ if err != nil { } ``` -**Важно** Обработка response'ов пока не реализована, поэтому данная задача ложится на Ваши плечи. Вы можете упростить обработку response при помощи библиотеки [etree](https://github.com/beevik/etree). Либо же воспользоваться сервисом (http://www.webtoolkitonline.com/xml-formatter.html) +**Важно** Обработка response'ов камеры пока не реализована, поэтому данная задача ложится на **Ваши** плечи. Вы можете упростить обработку response'ов при помощи библиотеки [etree](https://github.com/beevik/etree) либо же воспользоваться сервисом (http://www.webtoolkitonline.com/xml-formatter.html) +**Важно** Многие запросы требуют авторизованного доступа и для того, чтобы добавить аторизацию к конкретной камере, необходимо воспользоваться функцией `func (dev *device) Authenticate(username, password string)`. После применения данной функции все отправляемые камерой запросы будут авторизованными. +``` +device := onvif.NewDevice("192.168.13.42:1234") +device.Authenticate("username", "password") +```