mirror of
https://github.com/kerberos-io/onvif.git
synced 2025-10-27 17:51:08 +08:00
Update README.md
This commit is contained in:
30
README.md
30
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")
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user