Conexão de dispositivos ao Analisador de Vídeo do Azure

cloud icon
Como alternativa, confira os tópicos em Criar aplicativos de vídeo inteligentes na borda.


Observação

Estamos desativando o serviço de visualização do Analisador de Vídeo do Azure. Aconselhamos que você faça a transição de seus aplicativos do Analisador de Vídeo até 01 de dezembro de 2022.

O Analisador de Vídeo do Azure para Mídia não é afetado por essa desativação. Agora ele se chama Azure Video Indexer. Clique aqui para ler mais.

Ação necessária: para minimizar a interrupção de suas cargas de trabalho, faça a transição do aplicativo do Analisador de Vídeo conforme as sugestões descritas neste guia antes de 01 de dezembro de 2022. Após 1º de dezembro de 2022, sua conta do Analisador de Vídeo do Azure não funcionará mais. A partir de 2 de maio de 2022, você não poderá criar novas contas do Analisador de Vídeo.

Para capturar e gravar vídeo de um dispositivo, o serviço Analisador de Vídeo do Azure precisa estabelecer uma conexão RTSP com ele. Se o dispositivo estiver atrás de um firewall, essas conexões serão bloqueadas e talvez nem sempre seja possível criar regras para permitir conexões de entrada do Azure. Para dar suporte a esses dispositivos, você pode criar e instalar uma implementação de dispositivo do Azure IoT Plug and Play, que escuta comandos enviados por meio do Hub IoT do Analisador de Vídeo e, em seguida, abre um túnel websocket seguro para o serviço. Depois que esse túnel for estabelecido, o Analisador de Vídeo poderá se conectar ao servidor RTSP.

Visão geral

Este artigo fornece conceitos de alto nível sobre como criar uma implementação de dispositivo PnP do IoT do Azure, que pode permitir que o Analisador de Vídeo capture e grave vídeo de um dispositivo.

O aplicativo precisará:

  1. Ser executado como um dispositivo IoT
  2. Implementar a interface PnP de IoT com um comando específico (tunnelOpen)
  3. Ao receber esse comando:
    • Validar os argumentos recebidos
    • Abrir uma conexão websocket segura com a URL fornecida usando o token fornecido
    • Encaminhar os bytes websocket para a conexão TCP do servidor RTSP da câmera

Connect devices to the cloud

Ser executado como um dispositivo IoT

O aplicativo Analisador de Vídeo será implantado como um plug-in PnP do Analisador de Vídeo. Isso requer o uso de um dos SDKs do dispositivo IoT do Azure para criar sua implementação de dispositivo PnP de IoT. Registre o dispositivo IoT com o Hub IoT para obter a ID do Dispositivo do Hub IoT e a Cadeia de Conexão do Dispositivo.

Configuração do cliente do dispositivo IoT

  • Configure a OPTION_MODEL_ID para “dtmi:azure:videoanalyzer:WebSocketTunneling;1” para dar suporte a consultas PnP
  • Verifique se o dispositivo está usando o protocolo MQTT ou MQTT via WebSockets para se conectar ao Hub IoT do Azure
    • Conexão com o Hub IoT em um proxy HTTPS, se configurado no dispositivo IoT
  • Registre o retorno de chamada para o método direto tunnelOpen

Implemente a interface PnP de IoT para o Analisador de Vídeo

O modelo DTDL (Linguagem de Definição de Gêmeos Digitais) a seguir descreve um dispositivo que pode se conectar ao Analisador de Vídeo.

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

O dispositivo IoT registra um método direto tunnelOpen, no qual o corpo da solicitação terá os parâmetros remoteEndpoint, remoteAuthorizationToken e localPort, como mostrado acima.

Implementar o método direto tunnelOpen

Quando o método direto tunnelOpen é invocado pelo serviço Analisador de Vídeo, o aplicativo precisa fazer o seguinte:

  1. Obter a(s) porta(s) RTSP disponível(eis) do dispositivo
  2. Comparar o valor localPort especificado na chamada do método direto com as portas disponíveis
    • Retornar BadRequest se nenhuma correspondência for encontrada (consulte a seção Respostas de erro abaixo)
  3. Abra uma conexão TCP para "(IP da câmera ou nome do host): localPort"
    • Retornar BadRequest se a conexão falhar
    • OBSERVAÇÃO: o nome do host geralmente é localhost
  4. Abra uma conexão de soquete da Web com o remoteEndpoint (por meio de um proxy, se configurado no dispositivo)
    • Definir o cabeçalho HTTP "Authorization" como "Bearer (remoteAuthorizationToken)"
    • Defina o header "TunnelConnectionSource" com o valor "PnpDevice"
    • Defina o User-Agent para um valor adequado que o ajude a identificar sua implementação.
      • Por exemplo, talvez você queira capturar a arquitetura da CPU, o sistema operacional, o modelo/a construção do dispositivo.
    • Retornar 200 OK se a conexão de soquete da Web tiver sido bem-sucedida; caso contrário, retornar o código de erro apropriado
  5. Retornar resposta (não bloquear)
  6. A implementação do dispositivo IoT PnP começa a enviar dados TCP de forma bi-direcional entre o websocket e a conexão TCP do servidor RTSP

O serviço Analisador de Vídeo repetirá as solicitações tunnelOpen em caso de falha, portanto, novas tentativas não serão necessárias no aplicativo.

Respostas de erro

Se a solicitação tunnelOpen falhar, o corpo da resposta deverá ser o seguinte

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

Exemplos dessas respostas de erro são:

  • A porta local não está disponível como uma porta RTSP ou RTSPS { "code": "400", "target": "(camera IP ou hostname):{localPort}", "message": "A porta local não está disponível"}
  • Tempo limite/não foi possível se conectar ao ponto de extremidade RTSP { "code": "400", "target": "(camera IP or hostname):{localPort}", "message":"Could not connect to RTSP endpoint"}
  • Tempo limite/resposta de erro da tentativa de conexão de soquete da Web { "code": "{WebSocket response code}", "target": "{remoteEndpoint}", "message": "{Web socket response error message}"}

Ingestão de dados para o Analisador de Vídeo

Para capturar e gravar vídeo no Analisador de Vídeo, é necessário criar uma topologia de pipeline com túnel habilitado. Nessa topologia, um pipeline ao vivo deve ser criado e ativado. As instruções para esse processo são descritas aqui.

Exemplo de implementação

Entre em contato com videoanalyzerhelp@microsoft.com se você quiser implementar um aplicativo em seu dispositivo para conectá-lo ao Analisador de Vídeo.

Consulte Também

O que é IoT Plug and Play?