Подключение устройств к Видеоанализатору Azure

значок облака
Кроме того, ознакомьтесь с разделами о создании интеллектуальных видеоприложений на пограничных устройствах.


Примечание

Прекращается использование предварительной версии Видеоанализатора Azure. Рекомендуем вам перевести свои приложения с этой службы до 1 декабря 2022 г.

Прекращение использования не затронет Видеоанализатор Azure для медиа. Это решение переименовано в Индексатор видео Azure. См. дополнительные сведения.

Требуемое действие: чтобы выполнение ваших рабочих нагрузок не нарушалось, отключите свое приложение от Видеоанализатора согласно рекомендациям этого руководства не позднее 1 декабря 2022 г. После 1 декабря 2022 г. ваша учетная запись Видеоанализатора Azure перестанет работать. Начиная со 2 мая 2022 г. вы не сможете создавать новые учетные записи Видеоанализатора.

Для захвата и записи видео с устройства службе Видеоанализатора Azure необходимо установить подключение к нему по протоколу RTSP. Если устройство находится за брандмауэром, такие подключения блокируются, и создать правила для разрешения входящих подключений из Azure не всегда возможно. Для поддержки таких устройств можно создать и установить реализацию устройства Azure IoT Plug and Play, которая прослушивает команды, отправленные через Центр Интернета вещей из Видеоанализатора, а затем открывает защищенный туннель WebSocket к службе. После установки такого туннеля Видеоанализатор может подключиться к серверу RTSP.

Обзор

В этой статье рассматриваются основные понятия, связанные с созданием реализации устройства Azure IoT PnP, которые позволяют Видеоанализатору захватывать и записывать видео с устройства.

Приложение должно будет:

  1. Запуститься в качестве устройства IoT
  2. Реализовать интерфейс IoT PnP с помощью определенной команды (tunnelOpen)
  3. При получении такой команды:
    • Проверить полученные аргументы
    • Открыть безопасное подключение WebSocket к URL-адресу, указанному с помощью предоставленного токена
    • Переслать байты WebSocket к TCP-подключению сервера RTSP камеры

Подключение устройств к облаку

Запуск в качестве устройства IoT

Приложение Видеоанализатора будет развернуто в качестве подключаемого модуля PnP Видеоанализатора. Для этого необходимо использовать один из пакетов SDK для устройств Azure IoT, чтобы создать реализацию устройства для Центра Интернета вещей. Зарегистрируйте устройство IoT в Центре Интернета вещей, чтобы получить идентификатор устройства Центра Интернета вещей и строку подключения устройства.

Конфигурация клиента устройства IoT

  • Установить для параметра OPTION_MODEL_ID значение “dtmi:azure:videoanalyzer:WebSocketTunneling;1”, чтобы реализовать поддержку запросов PnP.
  • Убедиться, что устройство использует протокол MQTT или MQTT через WebSocket для подключения к Центру Интернета вещей Azure.
    • Установить подключение к Центру Интернета вещей через прокси-сервер HTTPS, если он настроен на устройстве IoT.
  • Регистрация обратного вызова для прямого метода tunnelOpen

Реализация интерфейса IoT PnP для Видеоанализатора

Следующая модель языка определения цифровых двойников (DTDL) описывает устройство, которое может подключаться к Видеоанализатору.

{
  "@context": "dtmi:dtdl:context;2",
  "@id": "dtmi:azure:videoanalyzer:WebSocketTunneling;1",
  "@type": "Interface",
  "displayName": "Azure Video Analyzer Web Socket Tunneling",
  "description": "This interface enables media publishing to Azure Video Analyzer service from a RTSP compatible device which is located behind a firewall or NAT device.",
  "contents": [
    {
      "@type": "Command",
      "displayName": "Tunnel Open",
      "name": "tunnelOpen",
      "request": {
        "@type": "CommandPayload",
        "displayName": "Parameters",
        "name": "parameters",
        "schema": {
          "@type": "Object",
          "fields": [
            {
              "displayName": "Remote Endpoint",
              "description": "The remote endpoint for the web socket tunnel.",
              "name": "remoteEndpoint",
              "schema": "string"
            },
            {
              "displayName": "Remote Authorization Token",
              "description": "The bearer token for the web socket authentication.",
              "name": "remoteAuthorizationToken",
              "schema": "string"
            },
            {
              "displayName": "Local Port",
              "description": "The local port where web socket data should be tunneled to.",
              "name": "localPort",
              "schema": "integer"
            }
          ]
        }
      }
    }
  ]
}

Устройство IoT регистрирует прямой метод tunnelOpen, где текст запроса будет содержать параметры remoteEndpoint, remoteAuthorizationToken и localPort, как показано выше.

Реализация прямого метода tunnelOpen

При вызове прямого метода tunnelOpen службой Видеоанализатора приложение должно выполнить следующие действия:

  1. Получить доступные порты RTSP устройства.
  2. Сравнить значение localPort, указанное в вызове прямого метода, с доступными портами.
    • Вернуть значение BadRequest, если совпадение не найдено (см. раздел ответов о ошибках ниже).
  3. Открыть подключение TCP к "(IP-адрес камеры или имя узла): localPort".
    • Вернуть BadRequest в случае сбоя подключения.
    • Обратите внимание: обычно имя узла — localhost.
  4. Открыть подключение через веб-сокет к remoteEndpoint (через прокси-сервер, если он настроен на устройстве).
    • Задать для заголовка "Authorization" HTTP значение "Bearer (remoteAuthorizationToken)".
    • Задать для заголовка "TunnelConnectionSource" значение "PnpDevice".
    • Задать для User-Agent подходящее значение, которое поможет идентифицировать реализацию.
      • Например, можно записать архитектуру ЦП, ОС, модель или производителя устройства.
    • Вернуть ответ "200 ОК", если подключение к веб-сокету успешно установлено; в противном случае вернуть соответствующий код ошибки.
  5. Вернуть ответ (не блокировать).
  6. Реализация устройства IoT PnP начинает в двунаправленном режиме отправлять TCP-данные между подключением WebSocket и TCP-подключением к серверу RTSP.

Служба Видеоанализатора будет повторять запросы tunnelOpen при сбое, поэтому повторные попытки в приложении не требуются.

Сообщения об ошибках

Если запрос tunnelOpen завершается ошибкой, текст ответа должен выглядеть следующим образом:

{
    "code": "<errorCode>", // Use HTTP status error codes
    "target": "<uri>", // The target URI experiencing the issue
    "message": "<Error message>",  // Short error message describing issue. Do not include end user identifiable information.
}

Примеры таких ответов об ошибках:

  • Локальный порт недоступен в качестве порта RTSP или RTSPS {"code": "400", "target": "(IP-адрес или имя узла камеры):{localPort}", "message": "Локальный порт недоступен"}
  • Истекло время ожидания/не удалось подключиться к конечной точке RTSP {"code": "400", "target": "(IP-адрес или имя узла камеры):{localPort}", "message":"Не удалось подключиться к конечной точке RTSP"}
  • Ответ времени ожидания/ошибки по результатам попытки подключения веб-сокета { "code": "{код ответа WebSocket}", "target": "{remoteEndpoint}", "message": "{Сообщение об ошибке веб-сокета}"}

Прием данных в Видеоанализатор

Для захвата и записи видео в Видеоанализатор необходимо создать топологию конвейера с включенным туннелированием. В этой топологии необходимо создать и активировать динамический конвейер. Инструкции для этой процедуры приведены здесь.

Пример реализации

Если вы хотите реализовать приложение на устройстве для подключения к Видеоанализатору, напишите по адресу videoanalyzerhelp@microsoft.com.

См. также

Общие сведения об IoT Plug and Play