Conexión de dispositivos a Azure Video Analyzer

cloud icon
Como alternativa, consulte los temas en Creación de aplicaciones de vídeo inteligentes en el perímetro.


Nota

Estamos retirando el servicio de versión preliminar de Azure Video Analyzer, se recomienda realizar la transición y retirar las aplicaciones de Video Analyzer antes del 1 de diciembre de 2022.

Azure Video Analyzer for Media no se ve afectado por esta retirada. Ahora se cambió el nombre a Azure Video Indexer. Haga clic aquí para obtener más información

Acción necesaria: Para minimizar la interrupción de las cargas de trabajo, realice la transición de la aplicación desde Video Analyzer según las sugerencias que se describen en esta guía antes del 1 de diciembre de 2022. Después del 1 de diciembre de 2022, las cuentas de Azure Video Analyzer ya no funcionarán. A partir del 2 de mayo de 2022, no se podrán crear nuevas cuentas de Video Analyzer.

Para capturar y grabar vídeo desde un dispositivo, el servicio Azure Video Analyzer debe establecer una conexión RTSP con él. Si el dispositivo está detrás de un firewall, estas conexiones se bloquean y es posible que no siempre pueda crear reglas para permitir conexiones entrantes desde Azure. Para admitir estos dispositivos, puede crear e instalar una implementación de dispositivo Azure IoT Plug and Play, que escucha los comandos enviados a través de IoT Hub desde Video Analyzer y, a continuación, abre un túnel de WebSocket seguro al servicio. Una vez establecido este túnel, Video Analyzer puede conectarse al servidor RTSP.

Información general

En este artículo se brindan conceptos generales sobre la creación de una implementación de dispositivo Azure IoT PnP que puede permitir que Video Analyzer capture y grabe vídeo desde un dispositivo.

La aplicación tendrá que:

  1. Ejecutarse como dispositivo IoT
  2. Implemente la interfaz de IoT PnP con un comando específico (tunnelOpen).
  3. Al recibir este comando:
    • Valide los argumentos recibidos.
    • Abra una conexión de WebSocket seguro a la dirección URL indicada mediante el token proporcionado.
    • Reenvíe los bytes de WebSocket a la conexión TCP del servidor RTSP de la cámara.

Connect devices to the cloud

Ejecutarse como dispositivo IoT

La aplicación Video Analyzer se implementará como complemento PnP de Video Analyzer. Esto requiere el uso de uno de los SDK de dispositivo IoT de Azure para crear la implementación del dispositivo IoT PnP. Registre el dispositivo IoT en su instancia de IoT Hub para obtener el identificador de dispositivo de IoT Hub y la cadena de conexión del dispositivo.

Configuración del cliente de dispositivo IoT

  • Establezca OPTION_MODEL_ID en “dtmi:azure:videoanalyzer:WebSocketTunneling;1” para admitir consultas PnP
  • Asegúrese de que el dispositivo use el protocolo MQTT o MQTT sobre WebSockets para conectarse a Azure IoT Hub.
    • Conéctese a IoT Hub a través de un proxy HTTPS si está configurado en el dispositivo IoT.
  • Registro de la devolución de llamada para el método directo tunnelOpen

Implementación de la interfaz de IoT PnP para Video Analyzer

El siguiente modelo de Lenguaje de definición de Digital Twins (DTDL) describe un dispositivo que puede conectarse a Video Analyzer.

{
  "@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"
            }
          ]
        }
      }
    }
  ]
}

El dispositivo IoT registra un método directo tunnelOpen, donde el cuerpo de la solicitud tendrá los parámetros remoteEndpoint, remoteAuthorizationToken y localPort, como se muestra anteriormente.

Implementación del método directo tunnelOpen

Cuando el servicio Video Analyzer invoca el método directo tunnelOpen, la aplicación debe hacer lo siguiente:

  1. Obtener los puertos RTSP disponibles del dispositivo.
  2. Comparar el valor localPort especificado en la llamada al método directo con los puertos disponibles.
    • Devolver BadRequest si no se encuentra ninguna coincidencia (consulte la sección Respuestas de errores a continuación)
  3. Abrir una conexión TCP a ("IP o nombre de host de la cámara):localPort"
    • Devolver BadRequest si hay un error de conexión.
    • NOTA: El nombre de host suele ser localhost.
  4. Abra una conexión de WebSocket a remoteEndpoint (a través de un proxy si está configurado en el dispositivo).
    • Establezca el encabezado HTTP "Authorization" como "Bearer (remoteAuthorizationToken)".
    • Establezca el encabezado "TunnelConnectionSource" con el valor "PnpDevice".
    • Establezca User-Agent en un valor adecuado que le ayude a identificar la implementación.
      • Por ejemplo, es posible que desee capturar la arquitectura de la CPU, el sistema operativo, el modelo o la marca del dispositivo.
    • Devolver 200 Correcto si la conexión de WebSocket se ha establecido correctamente; de lo contrario, devolver el código de error correspondiente.
  5. Devolver la respuesta (no bloquear).
  6. La implementación del dispositivo IoT PnP comienza a enviar datos de TCP bidireccionalmente entre el WebSocket y la conexión TCP del servidor RTSP.

El servicio Video Analyzer reintentará las solicitudes tunnelOpen en caso de error, por lo que no se necesitan reintentos en la aplicación.

Respuestas de errores

Si se produce un error en la solicitud tunnelOpen, el cuerpo de la respuesta debe ser el siguiente:

{
    "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.
}

Algunos ejemplos de estas respuestas de errores son:

  • El puerto local no está disponible como puerto RTSP o RTSPS { "code": "400", "target": "(IP o nombre de host de la cámara):{localPort}", "message": "El puerto local no está disponible"}
  • Se agotó el tiempo de espera o no se pudo conectar con el punto de conexión RTSP { "code": "400", "target": "(IP o nombre de host de la cámara):{localPort}", "message":"No se pudo conectar con el punto de conexión RTSP"}
  • Se agotó el tiempo de espera o respuesta con error del intento de conexión con WebSocket { "code": "{código de respuesta de WebSocket}", "target": "{remoteEndpoint}", "message": "{Mensaje de error de respuesta de WebSocket}"}

Ingesta en Video Analyzer

Para capturar y grabar vídeo en Video Analyzer, se debe crear una topología de canalización con la tunelización habilitada. A partir de esa topología, se debe crear y activar una canalización activa. Las instrucciones para este proceso se describen aquí.

Implementación de ejemplo

Póngase en contacto con videoanalyzerhelp@microsoft.com si desea implementar una aplicación en el dispositivo para conectarlo a Video Analyzer.

Vea también

¿Qué es IoT Plug and Play?