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