Інтегруємо дві системи відеоспостереження: Axxon Next і SureView

Перед програмістами Edison Software була поставлена задача — розробити програмні компоненти, що забезпечують взаємодію між Axxon Next і Immix. Сервіс SureView дуже популярний у Великобританії, і щоб зміцнити свої позиції на ринку відеоспостереження, розробники Axxon Next (ITV) вирішили здійснити хитрий стратегічний хід і інтегруватися, віддавши виконання замовлення на аутсорс компанії Edison Software. На розробку і налагодження плагіна інтеграції пішло 316 годин.

image

Axxon Next є продуктом російської компанії ITV, яка є розробником програмного забезпечення для систем безпеки та відеоспостереження.

Axxon Next — високопродуктивна система відеоспостереження, з інтуїтивно зрозумілим інтерфейсом, що підтримує більше 6000 найменувань IP-пристроїв і дозволяє будувати легко масштабирующиеся системи відеоспостереження будь-якої складності. Слід зазначити, що повний функціонал системи включений в будь-яку ліцензію, навіть якщо в неї буде лише одна камера.

ЗА Immix є продуктом американської компанії SureView systems і являє собою відео-орієнтовану програмну платформу, призначену для прийому тривожних подій з систем відеоспостереження, контролю доступу, платформ автоматизації та ситуаційних систем інформування.

Результатом розробки повинен був стати плагін для SureView, що надає можливість використання ЗА SureView наступних можливостей ПО Axxon Next.

  • Відображення в SureView живого відео З Axxon Next.
  • Програвання і управління програванням ЗА SureView архіву відео, що зберігається під управлінням ЗА Axxon Next.
  • Управління з SureView поворотними (PTZ) пристроями, підключеними до Axxon Next, включаючи використання предустановок (Presets).
  • Отримання ЗА SureView подій про виникнення тривожних повідомленнях від Axxon Next.


SureviewSystems
image

Для реалізації плагінів для SureView компанією SureviewSystems надається API з документацією і додаток для тестування розроблюваного плагіна.

API представляє собою велику кількість різних інтерфейсів, що описують різну функціональність интегрируемого пристрою.

Приклади.

1) Щоб ЗА SureView могло з'єднуватися з интегрируемым пристроєм, необхідно реалізувати наступний інтерфейс.

public interface IDeviceConnectDisconnect : IDevice
{
void DeviceConnect();
void DeviceDisconnect();
}


2) Щоб ЗА SureView могло відтворити живий відеопотік з интегрируемого пристрою, необхідно реалізувати такий інтерфейс.

public interface ICamera : IDevice
{
void CameraStartLive();
void CameraStop();
}


Для прискорення розробки з SDK постачається базовий клас StreamCam, який вже реалізує частину необхідних інтерфейсів і вміє відтворювати RTSP-потік, достатньо просто вказати посилання на відтворюваний відеопотік.

AxxonNext
image

Для керування пристроями, підключеними до сервера Axxon Next, останній надає досить зручне і просте API.

Опис API можна подивитися тут.

Управління пристроями відбувається за протоколом HTTP, для забезпечення безпеки використовується Http авторизація Basic.

Всі відповіді сервера AxxonNext надсилаються у форматі Json.

Розглянемо приклад відтворення живого потоку і управління телеметрією. Для отримання списку підключених пристроїв достатньо надіслати запит: GET /video-origins.

У відповідь на запит сервер Axxon відправить список підключених пристроїв.

{
"HOSTNAME/DeviceIpint.4/SourceEndpoint.video:0:0":
{
"origin": "SALES/DeviceIpint.4/SourceEndpoint.video:0:0"
,"state": "signal_restored"
,"friendlyNameLong": "4.IP пристрій [4]"
,"friendlyNameShort": "IP пристрій [4]"
}
,"HOSTNAME/DeviceIpint.5/SourceEndpoint.video:0:0":
{
"origin": "SALES/DeviceIpint.5/SourceEndpoint.video:0:0"
,"state": "disconnected"
,"friendlyNameLong": "5.IP пристрій [5]"
,"friendlyNameShort": "IP пристрій [5]"
}
}


У відповіді крім назви пристрою також міститься додаткова інформація про пристрої: стан пристрою — поле
state
, його ім'я — поле
friendlyName
.

Назва пристрою складається з трьох компонентів.

  1. Ім'я хоста, на якому встановлений сервер AxxonNext. У представленому прикладі це
    HOSTNAME
    . Дана інформація необхідна у зв'язку з тим, що безліч серверів Axxon можуть бути об'єднані в єдиний домен, і управління пристроями можливо через один єдиний сервер Axxon.
  2. Ім'я підключеного пристрою. В даному прикладі це DeviceIpint.4 і DeviceIpint.5.
  3. Ім'я оригінального джерела відео. В даному прикладі це SourceEndpoint.video:0:0.
  4. В одного пристрою може бути кілька джерел відеосигналу, наприклад, з різною якістю.


Для запиту усіх джерел відеосигналу пристрою необхідно надіслати запит, має наступний вигляд:

GET /video-sources/HOSTNAME/DeviceName/OriginSource


де
HOSTNAME
,
DeviceName
та
OriginSource
— раніше описані 3 компонента назви пристрою.

Для отримання живого потоку (у форматі RTSP) від конкретного джерела сигналу необхідно надіслати такий запит.

GET /live/media/HOSTNAME/DeviceName/VideoSource?format=rtsp


У відповідь отримаємо посилання на потрібний нам RTSP потік.

{
"rtsp":{
"description":"RTP/UDP or RTP/RTSP/TCP",
"path":"hosts/SALES/DeviceIpint.4/SourceEndpoint.video:0:0",
"порту":"554"
}
}


Для отримання списку пристроїв телеметрії для оригінального джерела відео необхідно надіслати запит виду:

GET /control/telemetry/list/HOSTNAME/DeviceName


де
HOSTNAME
та
DeviceName
— описані раніше ім'я хоста і ім'я пристрою.

У відповідь отримаємо список пристроїв телеметрії, доступних на пристрої.

[
"SALES/DeviceIpint.5/TelemetryControl.0"
]


Ім'я пристрою так само складається з трьох компонентів, останній з яких — ім'я пристрою телеметрії, а перші два — описані раніше ім'я хоста і ім'я пристрою.

Перед початком керування пристроєм необхідно зробити запит інформації про способи управління, які підтримуються пристроєм. Це здійснюється з допомогою запиту має наступний вигляд.

GET /control/telemetry/info/HOSTNAME/DeviceName/TelemetryName


У відповідь отримаємо інформацію про ступені свободи, граничних значеннях і способи управління пристроєм.

{
"degrees": {
"tilt": {
"relative": {"min": "-45", "max": "45"},
"continuous": {"min": "-10", "max": "10"}
},
"pan": {
"absolute": {"min": "-170", "max": "170"},
"continuous": {"min": "-10", "max": "10"}
},
"zoom": {
"absolute": {"min": "0", "max": "20"}
}
},
"feature": ["autoFocus", "areaZoom", "pointMove"]
}


Degrees
— інформація про ступенях свободи з гранично допустимими значеннями в градусах:

  • tilt
    — управління нахилом відеокамери;
  • pan
    — управління поворотом відеокамери;
  • zoom
    — управління зумом;
  • focus
    — управління фокусом;
  • iris
    — управління діафрагмою.


Кожна ступінь свободи містить список підтримуваних способів управління:

  • absolute
    — абсолютний — поворот камери на заданий кут відносно установки камери;
  • relative
    — відносний — поворот камери на заданий кут щодо поточного положення камери;
  • continuous
    — безперервний — безперервний поворот камери поки натиснута кнопка управління;
  • feature
    — список підтримуваних функцій, завдання реалізації цих функцій в плагіні інтеграції не стояла.


Для початку сесії керування пристроєм телеметрії необхідно провести захоплення сесії управлінні, надіславши запит виду:

GET /control/telemetry/session/acquire/HOSTNAME/DeviceName/TelemetryName?session_priority=n


де n — число від 1 до 5, пріоритет сесії керування.

Якщо в даний момент пристрій телеметрії вільно або їм управляє інший користувач з меншим пріоритетом, то відбувається захоплення управління, і від сервера приходить така відповідь:


{
"session_id" : [id]
}


де
id
— ідентифікатор сесії.

Для підтримки актуальності сесії управління, необхідно не рідше ніж раз на 10 секунд відправляти запити.

GET /control/telemetry/session/keepalive/HOSTNAME/DeviceName/TelemetryName?session_id=id


Для звільнення сесії необхідно надіслати запит наступного виду.

GET /control/telemetry/session/release/HOSTNAME/DeviceName/TelemetryName?session_id=[id]


Для відправки команди на зміну одній із ступенів свободи телеметрії необхідно надіслати запит виду:

GET /control/telemetry/DEGREE/HOSTNAME/DeviceName/TelemetryName?mode=MODE
&value=VAL&session_id=id


де:

  • DEGREE
    — назва ступені свободи: tilt, pan, zoom, focus, iris;
  • MODE
    — спосіб управління: absolute, relative, continuous;
  • VAL
    — значення, на величину якої необхідно змінити чи встановити ступінь свободи;
  • id
    — ідентифікатор сесії керування.


Основною складністю при реалізації проекту виявилася реалізація передачі тривожних повідомлень з AxxonNext в SureView.

Складності.

  1. Плагін інтеграції SureView не може зробити запит списку тривожних повідомлень, відповідного функціоналу просто не передбачено в SDK. Замість цього SDK припускає, що тривожні повідомлення надходять З SureView по протоколу SMTP, і вже потім плагін інтеграції буде займатися (у відповідності з SDK) розбором тіла листи і виділенням з нього необхідної інформації, такої, наприклад, як: номер і назву камери або датчика, на якому був згенерований сигнал тривоги.
  2. ЗА AxxonNext не надсилає списки тривожних подій, а віддає їх за запитом за допомогою HTTP API. Вибірка подій здійснюється за заданий період часу. До честі AxxonNext, воно уміє відправляти події по протоколу SMTP, але дана дія налаштовується вручну, індивідуально для кожного підключеного пристрою, інакше при великій кількості пристроїв і тривог вийде спам-розсилка.


Для виходу із ситуації було вирішено реалізувати окремий сервіс у вигляді служби Windows, яка займається періодичним зчитуванням списку тривог і відправкою їх по протоколу SMTP ЗА SureView.

Для більш точного контролю відправляється списку тривог була реалізована можливість гнучкої настройки параметрів запускається сервісу з можливістю фільтрації за пристроїв і типів подій.

Крім того, для запобігання повторної відправки подій сервіс виконує функцію контролю: було відправлено подія раніше чи ні.

image

Більше проектів:
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.