Документация XML-RPC API
Удаленное взаимодействие (отправка команд) осуществляется по протоколу XML-RPC. Сервер XML-RPC доступен на порту номер 12324 (убедитесь, что доступ по этому порту не запрещен встроенным или внешним межсетевым экраном). Протестированные реализации XML-RPC:
Выполнение удаленных команд осуществляется в рамках авторизованного сеанса. Сервер предоставляет методы для открытия и завершения сессии, а все остальные методы получают в качестве первого параметра идентификатор сессии. Все удаленные вызовы выполняются с правами пользователя, указанного при открытии авторизованного сеанса.
Для открытия сессии (авторизованного сеанса) используется метод System.Login, который получает на вход два строковых параметра login и password. В качестве результата возвращается строка с идентификатором сессии. Если авторизация не пройдена (логин или пароль неправильны, или у оператора с таким логином нет прав для удаленного взаимодействия), генерируется исключение с текстом "Authentication failed" и кодом -507. Идентификатор сессии должен использоваться в качестве первого параметра всех других вызовов xmlrpc. Если в рамках одной сессии не происходит взаимодействия в течение 60 секунд, сессия автоматически закрывается.
Для закрытия сессии используется метод System.Logout, который получает на вход идентификатор сессии, полученный в результате успешного выполнения System.Login. Метод ничего не возвращает в случае успеха. Если сессии нет, генерируется исключение (как при неудачном логине).
ВНИМАНИЕ! Далее в описании методов не указано, но это касается всех методов: первым параметром (нулевым) должен передаваться идентификатор сессии, полученный в результате успешного вызова System.Login, а для пользователя с заданным логином обязательно должно быть выставлено право на удаленное взаимодействие (управление)! Если идентификатор сессии некорректен, генерируется исключение.
Для выполнения некоторых вызовов у пользователя, от имени которого осуществляется взаимодействие, должны быть дополнительные права (помимо обязательного для всех права на удаленное взаимодействие). Если у пользователя нет необходимых прав для выполнения запрашиваемого вызова, генерируется исключение с текстом "Access forbidden" и кодом -507.
Методы
Методы для сущности Computer
- Computer.GetEvents
- Computer.VideoChannels
- Computer.VideoChannels.Ext
- Computer.UnitedStorage.AddVolume
- Computer.UnitedStorage.RemoveVolume
- Computer.UnitedStorage.ClearVolume
- Computer.UnitedStorage.SetVolumeToReadOnly
- Computer.UnitedStorage.SetTimeDepth
- Computer.UnitedStorage.Boundaries
- Computer.MonitorsCount
- Computer.PTZ.AddPreset
- Computer.PTZDevices
- Computer.PTZDevices.Ext
- Computer.PTZCruiseList
- Computer.PTZPresetList
- Computer.PTZ.RemovePreset
- Computer.PTZStartCruise
- Computer.PTZGoToPreset
- Computer.PTZ.GoToPreset
- Computer.PTZ.IsCapable
- Computer.PTZ.Control
- Computer.Templates
- Computer.Templates.Ext
- Computer.ServerTime
- Computer.SiblingGroupList
- Computer.SiblingGroupList.Ext
- Computer.Subscribe
- Computer.Unsubscribe
Методы для сущности Monitor
- Monitor.DisplayCamera
- Monitor.FramesCount
- Monitor.AssignCamera
- Monitor.AssignedCamera
- Monitor.DisplayTemplate
- Monitor.Template
- Monitor.Template.Ext
- Monitor.SetZoom
- Monitor.Zoomed
- Monitor.Zoomed.Ext
Методы для сущности Templates
Методы для сущности Camera
- Camera.RecordStatus
- Camera.RecordStart
- Camera.RecordStartWithDuration
- Camera.RecordStop
- Camera.RecordStatus.Ext
- Camera.SignalStatus
- Camera.SignalStatus.Ext
- Camera.SetLaterBufferDepth
- Camera.GetLaterBufferDepth
- Camera.ImageShot
Методы для сущности Archive
Методы для сущности Computer
Computer.GetEvents
Возвращает события из архива.
Ответ представляет собой список map'ов. Каждый map состоит из следующих полей:
Timestamp (String) - метка времени события (в миллисекундах с начала эпохи).
Description (String) - описание события.
SourceType (String) - тип сущности источника события ("device" - устройство, "channelav" - аудио/видео канал, "channeldi" - тревожный вход, "channeldo" - реле, "unknown" - неизвестно).
SourceUuid (String) - uuid сущности источника события.
Level (Int) - уровень события (0 - "неизвестно", 1 - "информационное сообщение", 2 - "предупреждение", 4 - "критическое событие", 16 - "нет соединения", 32 - "выключено в ЦУУ", 63 - "максимальное значение").
При некорректном значении времени начала будет возвращён пустой список.
Входные параметры:
String - время, начиная с которого нужно получать события, в миллисекундах от начала эпохи Unix.
Int - максимальное количество событий в ответе. Отрицательные значения обозначают "все".
Выходные параметры:
List - события.
Computer.VideoChannels
Получить список видеоканалов
Входные параметры:
нет
Выходные параметры:
List Список UUID-ов каналов
Computer.VideoChannels.Ext
Получить информацию по всем видеоканалам
Входные параметры:
нет
Выходные параметры:
List > - информация по видеоканалам, где внутренний список содержит 2 элемента: первый - Uuid канала, второй - текстовое описание Description канала
Computer.UnitedStorage.AddVolume
Добавить файл в состав объединенного хранилища.
Входные параметры:
String - имя файла хранилища
Выходные параметры:
Bool - true в случае успеха операции
Computer.UnitedStorage.RemoveVolume
Удалить файл из состава объединенного хранилища.
Входные параметры:
String - имя файла хранилища
Выходные параметры:
Bool - true в случае успеха операции
Computer.UnitedStorage.ClearVolume
Очистить файл хранилища.
Входные параметры:
String - имя файла хранилища
Выходные параметры:
Bool - true в случае успеха операции
Computer.UnitedStorage.SetVolumeToReadOnly
Установить режим read-only для файла хранилища.
Входные параметры:
String - имя файла хранилища
Bool - true: read-only, false: read-write
Выходные параметры:
Bool - true в случае успеха операции
Computer.UnitedStorage.SetTimeDepth
Установить максимальную глубину хранения данных по времени.
Входные параметры:
Int - максимальная глубина (в минутах)
Выходные параметры:
Bool - true в случае успеха операции
Computer.UnitedStorage.Boundaries
Получить временнЫе границы файла хранилища.
Входные параметры:
String - имя файла хранилища
Выходные параметры:
StringList - Начало и конец файла в юниксовом формате времени, преобразованном из longlong в строки
Computer.MonitorsCount
Получить количество мониторов.
Входные параметры:
нет
Выходные параметры:
Int - количество мониторов
Computer.PTZ.AddPreset
Отправка команды на создание предустановки ptz-устройства.
Входные параметры:
String - UUID PTZ-канала
Int - индекс предустановки
String - имя (описание) предустановки
Выходные параметры:
Bool - true в случае успешной отправки команды ptz-устройству от сервера
Computer.PTZDevices
Получить список PTZ устройств
Входные параметры:
нет
Выходные параметры:
List - список UUID-ов PTZ устройств
Computer.PTZDevices.Ext
Получить информацию по всем PTZ-каналам
Входные параметры:
нет
Выходные параметры:
List> - информация по PTZ-каналам, где внутренний список содержит 2 элемента: первый - Uuid PTZ-канала, второй - текстовое описание Description PTZ-канала
Computer.PTZCruiseList
Получить список маршрутов PTZ.
Входные параметры:
String - UUID PTZ канала
Выходные параметры:
Map - массив UUID-ов и описаний маршрутов
Computer.PTZPresetList
Получить список предустановок PTZ.
Входные параметры:
String - UUID PTZ канала
Выходные параметры:
Map - массив ID и описаний предустановок
Computer.PTZ.RemovePreset
Отправка команды на удаление предустановки ptz-устройства.
Входные параметры:
String - UUID PTZ-канала
Int - индекс предустановки
Выходные параметры:
Bool - true в случае успешной отправки команды ptz-устройству от сервера
Computer.PTZStartCruise
Запустить маршрут PTZ.
Входные параметры:
String - UUID PTZ канала
String - UUID маршрута (если передать пустой UUID, произойдет остановка текущего запущенного маршрута)
Выходные параметры:
Bool - true в случае успеха операции
Computer.PTZGoToPreset
Перейти к preset-у (вызвать соответствующий метод для IPtzChannel-a).
Входные параметры:
String - UUID PTZ устройства
Int - номер preset-a
Выходные параметры:
Bool - true в случае успеха операции
Computer.PTZ.GoToPreset
Отправка команды на перемещение к предустановленной позиции для ptz-устройства.
Входные параметры:
String - UUID PTZ-канала
Int - индекс предустановки
Выходные параметры:
Bool - true в случае успешной отправки команды ptz-устройству от сервера
Computer.PTZ.IsCapable
Получить набор доступных операций для ptz-устройства.
Входные параметры:
String - UUID PTZ канала
Выходные параметры:
List - список кодов доступных ptz-операций
Список кодов основных ptz-операций
1 - переключатель для дворников
6 - команда приближения
7 - команда отдаления
8 - команда ближней фокусировки
9 - команда дальней фокусировки
10 - команда на увеличение апертуры
11 - команда на уменьшение апертуры
12 - наклон. команда движения вверх
13 - наклон. команда движения вниз
14 - панорамирование. команда движения влево
15 - панорамирование. команда движения вправо
16 - панорамирование/наклон. команда движения вверх и влево
17 - панорамирование/наклон. команда движения вверх и вправо
18 - панорамирование/наклон. команда движения вниз и влево
19 - панорамирование/наклон. команда движения вниз и вправо
Computer.PTZ.Control
Отправка заданной команды на выполнение ptz-устройству.
Входные параметры:
String - UUID PTZ канала
Int - код команды (список представлен в Computer.PTZ.IsCapable)
Bool - флаг запуска/останова (true/false соответственно)
Int - скорость по оси X. Должно принимать значения из интервала [-7; 7]
Int - скорость по оси Y (используется только для команды pan+tilt). Должно принимать значения из интервала [-7; 7]
Выходные параметры:
Bool - true в случае успешной отправки команды ptz-устройству от сервера
Computer.Templates
Получить список раскладок.
Входные параметры:
нет
Выходные параметры:
List - список UUID-ов раскладок
Computer.Templates.Ext
Получить информацию по созданным раскладкам
Входные параметры:
нет
Выходные параметры:
List> - информация по созданным раскладкам, где внутренний список содержит 2 элемента: первый - Uuid раскладки, второй - текстовое описание Description раскладки
Computer.ServerTime
Возвращает текущее время сервера в миллисекундах от начала эпохи Unix.
Метод является технологическим и может быть вызван в технологическом сеансе.
Входные параметры:
нет
Выходные параметры:
String - время сервера.
Computer.SiblingGroupList
Получить список видео- и аудиоканалов с данными о родстве и ролях
Метод устарел и оставлен для совместимости. Рекомендуется использовать Computer.SiblingGroupList.Ext
Входные параметры:
нет
Выходные параметры:
List channelInfo> Список данных об источниках
ChannelInfo состоит из:
String description - Описание канала
String uuid - Uuid канала
String groupUuid - Uuid группы (совпадает с uuid-ом PrimaryChannel)
Int roles - битовая маска ролей
Назначение битов в маске ролей
0x01 - выполнение роли основного потока. Для канала, обеспечивающего видеоданные, идентично роли видеопотока с высоким разрешением (0x02). Если присутствуют только аудиоданные, то соответствует роли аудиопотока (0x08).
0x02 - канал видеопотока с высоким разрешением
0x04 - канал видеопотока с низким разрешением
0x08 - канал аудиопотока
Computer.SiblingGroupList.Ext
Получить список каналов (видео, аудио, цифровые входы) с данными о родстве, ролях и параметрах
Входные параметры:
нет
Выходные параметры:
List channelInfo> Список данных об источниках
ChannelInfo состоит из:
String description - Описание канала
String uuid - Uuid канала
String groupUuid - Uuid группы (совпадает с uuid-ом PrimaryChannel)
Int roles - битовая маска ролей
Map Parameters - параметры (состояние) канала, каждый из которых представлен парой "имя параметра - значение параметра"
Назначение битов в маске ролей roles:
0x01 - выполнение роли основного потока. Для канала, обеспечивающего видеоданные, идентично роли видеопотока с высоким разрешением (0x02). Если присутствуют только аудиоданные, то соответствует роли аудиопотока (0x08).
0x02 - канал видеопотока с высоким разрешением
0x04 - канал видеопотока с низким разрешением
0x08 - канал аудиопотока
0x10 - канал DI
0x20 - канал управления DO
0x40 - канал управления PTZ
Если канал имеет только один видеопоток, в маске ролей roles будут установлены оба бита 0x02 ("видеопоток высокого разрешения") и 0x04 ("видеопоток низкого разрешения").
Состав Parameters:
Специфический для каждого типа канала
Для видео и аудио-каналов <_Int StreamingPort_>, где StreamingPort - порт, по которому производится стриминг медиаданных по протоколу rtmp
Для DO <_Int channelNo_, Bool state>, где channelNo - порядковый номер DO канала, а state - состояние канала (true - замкнутый, false - разомкнутый)
Для остальных типов каналов на данный момент приходят пустые параметры
Computer.Subscribe
Подписаться на XmlRpc-уведомления. XmlRpc-уведомления используются для оповещения клиента об изменении информации на стороне сервера. Подписывающийся клиент должен:
- Реализовать у себя XmlRpc-функцию updateEvent, которая будет вызываться при возникновении событий (влекущих за собой обновление интересующей клиента информации) на сервере. В качестве параметра будет передаваться id подписчика, идентификатор подсистемы (соответствующей произошедшему событию), а также список строк List, содержимое которого зависит от конкретной подсистемы. Функция должна возвращать флаг статуса подписки (если клиент желает сохранить подписку, то - true, иначе - false).
- Реализовать у себя функцию poll. Она вызывается сервером для опроса подписанных клиентов на наличие доступа к ним, чтобы в случае его отсутствия удалить клиент из списка зарегистрированных подписчиков. С помощью данной функции клиент определяет активность сервера. Если сервер перезапустит программу, то очередной poll-запрос не придет, а значит необходимо заново переподписаться. Входной параметр должен содержать id подписчика. Функция должна возвращать флаг статуса подписки (если клиент желает сохранить подписку, то - true, иначе - false).
Поддерживаемые оповещения:
Идентификатор подсистемы | Описание | Функция для получения информации |
templates | Добавлена новая или удалена существующая раскладка | Computer.Templates.Ext |
videochannels | Изменился состав видеоканалов | Computer.VideoChannels.Ext |
ptzchannels | Изменился состав PTZ-каналов | Computer.PTZDevices.Ext |
template | Изменилась выбранная раскладка хотя бы на одном мониторе | Monitor.Template.Ext |
recordstatus | Включилась или выключилась запись хотя бы по одной камере | Camera.RecordStatus.Ext |
signalstatus | Появился или пропал сигнал хотя бы по одной камере | Camera.SignalStatus.Ext |
zoomed | Развернут на весь экран или свернут хотя бы один фрейм хотя бы на одном мониторе | Monitor.Zoomed.Ext |
event | Информация о событиях, происходящих в режиме реального времени. При возникновении события, сервер вызывает функцию клиента updateEvent, в параметрList которой передает информацию о данном событии. В List данные о событии представлены в следующей форме: String - Timestamp (в миллисекундах с начала эпохи) String - Описание события String - Тип сущности источника события ("device" - устройство, "channelav" - аудио/видео канал, "channeldi" - тревожный вход, "channeldo" - реле, "unknown" - неизвестно) String - uuid сущности источника события String - Уровень события (0 - "неизвестно", 1 - "информационное сообщение", 2 - "предупреждение", 4 - "критическое событие", 16 - "нет соединения", 32 - "выключено в ЦУУ", 63 - "максимальное значение") |
не требуется |
Входные параметры:
Int - Интервал опроса клиента в минутах (polling)
Int - Порт, который прослушивает клиентский XmlRpc-сервер
List - Список интересующих оповещений. Если список пуст, то клиент будет получать все типы оповещений
Выходные параметры:
Int - id клиента
Computer.Unsubscribe
Отписаться от XmlRpc-уведомлений, на которые клиент подписался с использованием Computer.Subscribe
Входные параметры:
Int - id клиента
Выходные параметры:
Bool - признак наличия клиента с данным id на сервере
Методы для сущности Monitor
Monitor.DisplayCamera
Показать камеру во весь экран.
Входные параметры:
Int - порядковый номер монитора
String - UUID камеры
Выходные параметры:
Bool - true в случае успеха операции
Monitor.FramesCount
Получить количество фреймов на мониторе.
Входные параметры:
Int - порядковый номер монитора
Выходные параметры:
Int - количество фреймов
Monitor.AssignCamera
Отобразить камеру во фрейме на мониторе.
Входные параметры:
Int - порядковый номер монитора
Int - порядковый номер фрейма
String - UUID камеры (Null - ничего не показывать в этом фрейме)
Выходные параметры:
Bool - true в случае успеха операции
Примечание: камера будет показана в этом фрейме, только, если он находится в режиме видеофрейма и для него не включено проигрывание архива, в противном случае все останется без изменений
Monitor.AssignedCamera
Получить UUID камеры в указанном мониторе и фрейме.
Входные параметры:
Int - порядковый номер монитора
Int - порядковый номер фрейма
Выходные параметры:
String - UUID камеры во фрейме или Null, если такого фрейма нет или камера не выбрана
Monitor.DisplayTemplate
Включить раскладку на мониторе.
Входные параметры:
Int - порядковый номер монитора
String - UUID раскладки
Выходные параметры:
Bool - true в случае успеха операции
Monitor.Template
Получить UUID раскладки.
Входные параметры:
Int - порядковый номер монитора
Выходные параметры:
String - UUID раскладки
Monitor.Template.Ext
Получить список раскладок, включенных на всех мониторах
Входные параметры:
нет
Выходные параметры:
List> - информация по раскладкам, включенным на мониторах, где внутренний список содержит 3 элемента: первый - номер монитора, начиная с "0", второй - Uuid раскладки, третий - текстовое описание Description раскладки. Количество элементов внешнего списка равно количеству мониторов
Monitor.SetZoom
Развернуть/свернуть фрейм.
Входные параметры:
Int - порядковый номер монитора
Int - порядковый номер фрейма
Bool - True: разворачивает фрейм, False: сворачивает развернутый фрейм, если указан именно он
Выходные параметры:
Bool - True в случае успеха операции
Monitor.Zoomed
Получить номер развернутого фрейма.
Входные параметры:
Int - порядковый номер монитора
Выходные параметры:
Int - порядковый номер развернутого фрейма или -1, если никакой фрейм не развернут
Monitor.Zoomed.Ext
Получить список развернутых на каждом мониторе фреймов
Входные параметры:
нет
Выходные параметры:
List> - информация по развернутым на каждом мониторе фреймам, где внутренний список содержит 2 элемента: первый - порядковый номер развернутого на весь экран фрейма или -1, если развернутого фрейма нет, второй - номер монитора. Количество элементов внешнего списка равно количеству мониторов
Методы для сущности Templates
Template.Description
Получить название раскладки.
Входные параметры:
String - UUID раскладки
Входные параметры:
String - название раскладки
Template.AssignCamera
Назначить камеру в фрейме на указанной раскладке
Входные параметры:
String - UUID раскладки
Int - порядковый номер фрейма
String - UUID камеры (Null - ничего не показывать в этом фрейме)
Выходные параметры:
Bool - true в случае успеха операции
Примечание: камера будет назначена в том случае, если указанный фрейм является видеофреймом
Template.AssignedCamera
Получить UUID камеры в указанном фрейме раскладки
Входные параметры:
String - UUID раскладки
Int - порядковый номер фрейма
Выходные параметры:
String - UUID камеры во фрейме или Null, если такого фрейма нет или камера не выбрана
Template.FramesCount
Получить количество фреймов в раскладке
Входные параметры:
String - UUID раскладки
Выходные параметры:
Int - количество фреймов в раскладке
Методы для сущности Camera
Camera.RecordStatus
Получить состояние записи.
Входные параметры:
String - UUID канала
Входные параметры:
Bool - состояние записи
Camera.RecordStart
Включить запись для камеры.
Входные параметры:
String - UUID канала
Bool - true: пишем поток высокого разрешения. false: пишем поток низкого разрешения
Выходные параметры:
Bool - true в случае успеха операции
Camera.RecordStartWithDuration
Включить запись для камеры на определенное время, и по прошествии данного времени автоматически завершить запись (автоматически учитываются множественные запросы, реализуется подсчет запросов).
Входные параметры:
String - UUID камеры
Bool - true: пишется поток высокого разрешения, false: низкого,
Int - длительность записи в секундах
Выходные параметры:
Bool - true в случае успеха операции
Camera.RecordStop
Выключить запись для камеры.
Входные параметры:
String - UUID канала
Выходные параметры:
Bool - true в случае успеха операции
Camera.RecordStatus.Ext
Получить состояние записи по всем видеоканалам
Входные параметры:
нет
Выходные параметры:
List> - информация по состоянию записи по всем видеоканалам, где внутренний список содержит 2 элемента: первый - Uuid канала, второй - "2", если включена запись высокого разрешения, "1" - включена запись низкого разрешения, "0" - запись выключена.
Camera.SignalStatus
Получить признак наличия видеосигнала по камере (IDataSource::flags(0)&IDataSource::FL_NOSIGNAL==0).
Входные параметры:
String - UUID канала
Выходные параметры:
Bool - признак наличия видеосигнала
Camera.SignalStatus.Ext
Получить признак наличия видеосигнала по всем каналам
Входные параметры:
нет
Выходные параметры:
List> - список признаков наличия видеосигнала по всем видеоканалам, где внутренний список содержит 2 элемента: первый - Uuid канала, второй - "true", если сигнал есть (IDataSource::flags(0)&IDataSource::FL_NOSIGNAL==0), "false" - иначе
Camera.SetLaterBufferDepth
Изменить глубину предзаписи для камеры.
Входные параметры:
String - UUID канала
Int - глубина предзаписи в секундах
Выходные параметры:
Bool - true в случае успеха операции
Camera.GetLaterBufferDepth
Получить глубину предзаписи для данной камеры.
Входные параметры:
String - UUID канала
Выходные параметры:
Int - глубина предзаписи в секундах
Camera.ImageShot
Получить стоп-кадр для данной камеры требуемой геометрии. Если требуемая ширина и высота равны нулю, то возвращается изображение оригинального разрешения. Если только ширина или только высота равна нулю, то заданная нулем размерность рассчитывается по заданной ненулевой путем пересчета с сохранением пропорций.
Входные параметры:
String - UUID канала
Int - требуемая ширина
Int - требуемая высота
Выходные параметры:
ByteArray - стоп-кадр в формате JPEG
Методы для сущности Archive
Archive.Boundaries
Получить границы архива для источника.
Входные параметры:
String - UUID канала
Выходные параметры:
List - List(0) - время начала первой записи в архиве в миллисекундах, List(1) - время конца последней записи в архиве в миллисекундах
Archive.GetFragments
Получить один фрагмент для источника, начиная с момента времени.
Входные параметры:
String - UUID канала
DateTime - время отсчета в миллисекундах
Выходные параметры:
List - List(0) - начало фрагмента в миллисекундах, List(1) - конец фрагмента в миллисекундах
Archive.GetFragments2
Получить список фрагментов (не более заданного количества) для источника, начиная с момента времени.
Входные параметры:
String - UUID канала
String - время отсчета в миллисекундах
Int - максимальное количество фрагментов
Выходные параметры:
List - List(i) - начало фрагмента в миллисекундах, List(i+1) - конец фрагмента в миллисекундах
Archive.GetFragments2.Ext
Получить список фрагментов (не более заданного количества) для источника, начиная с момента времени.
Входные параметры:
String - UUID канала
String - время отсчета в миллисекундах
Int - максимальное количество фрагментов
Выходные параметры:
List<String> - List(i) - начало фрагмента в миллисекундах, List(i+1) - конец фрагмента в миллисекундах, List(i+3) - тип фрагмента