Интегрируем две системы видеонаблюдения: 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",
            "port":"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

    Больше проектов:


    Как за 5233 человеко-часа создать софт для микротомографа
    SDK для внедрения поддержки электронных книг в формате FB2
    Управление доступом к электронным документам. От DefView до Vivaldi
    Интегрируем две системы видеонаблюдения: Axxon Next и SureView
    Подробнее о разработке софта рентгеновского томографа
    «Сфера»: как мониторить миллиарды киловатт-часов
    Разработка простого плагина для JIRA для работы с базой данных
    В помощь DevOps: сборщик прошивок для сетевых устройств на Debian за 1008 часов
    Автообновление службы Windows через AWS для бедных
    • +12
    • 5.3k
    • 1
    Edison
    95.49
    Изобретаем успех: софт и стартапы
    Support the author
    Share post

    Comments 1

      +2
      Очень удачные картинки к посту)

      Only users with full accounts can post comments. Log in, please.