Ligação dispositivos para Azure Video Analyzer

cloud icon
Em alternativa, confira os tópicos no âmbito da Criação de aplicações de vídeo inteligentes no limite.


Nota

Estamos a retirar o serviço de pré-visualização do Azure Video Analyzer, é aconselhável fazer a transição das suas aplicações para fora do Video Analyzer até 01 de dezembro de 2022.

O Azure Video Analyzer for Media não é afetado por esta reforma. É agora remarcado para Azure Video Indexer. Clique aqui para ler mais.

Ação Necessária: Para minimizar a perturbação das suas cargas de trabalho, transite a sua aplicação a partir de Video Analyzer por sugestões descritas neste guia antes de 01 de dezembro de 2022. Depois de 1 de dezembro de 2022, a sua conta Azure Video Analyzer deixará de funcionar. A partir de 2 de maio de 2022 não poderá criar novas contas de Video Analyzer.

Para capturar e gravar vídeos a partir de um dispositivo, o serviço Azure Video Analyzer necessita de estabelecer uma ligação RTSP ao mesmo. Se o dispositivo estiver por detrás de uma firewall, tais ligações estão bloqueadas e pode nem sempre ser possível criar regras para permitir ligações de entrada a partir de Azure. Para suportar estes dispositivos, pode construir e instalar uma implementação de dispositivo Azure IoT Plug and Play, que ouve os comandos enviados através de Hub IoT a partir do Video Analyzer e, em seguida, abre um túnel de websocket seguro para o serviço. Uma vez estabelecido um túnel, o Analisador de Vídeo pode então ligar-se ao servidor RTSP.

Descrição Geral

Este artigo fornece conceitos de alto nível sobre a construção de uma implementação de dispositivo Azure IoT PnP que pode permitir ao Video Analyzer capturar e gravar vídeos a partir de um dispositivo.

A aplicação terá de:

  1. Executar como um dispositivo IoT
  2. Implementar a interface IoT PnP com um comando específico (tunnelOpen)
  3. Ao receber tal comando:
    • Validar os argumentos recebidos
    • Abra uma ligação segura do websocket ao URL fornecido utilizando o token fornecido
    • Encaminhar os bytes websocket para a ligação TCP do servidor RTSP da câmara

Connect devices to the cloud

Executar como um dispositivo IoT

A aplicação Video Analyzer será implantada como um plugin PnP analisador de vídeo. Isto requer a utilização de um dos SDKs do dispositivo Azure IoT para construir a implementação do seu dispositivo IoT PnP. Registe o dispositivo IoT com o seu Hub IoT para obter o ID do dispositivo Hub IoT e a cadeia de ligação do dispositivo.

Configuração do cliente do dispositivo IoT

  • Definir OPTION_MODEL_ID para “dtmi:azure:videoanalyzer:WebSocketTunneling;1” apoiar consultas do PNP
  • Certifique-se de que o seu dispositivo está a utilizar o protocolo MQTT ou MQTT sobre WebSockets para ligar a Hub IoT do Azure
    • Ligação Hub IoT sobre um representante HTTPS se configurado no dispositivo IoT
  • Registar o retorno para tunnelOpen o método direto

Implementar a Interface IoT PnP para Analisador de Vídeo

O modelo seguinte digital Twins Definition Language (DTDL) descreve um dispositivo que pode ligar-se 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 regista um método tunnelOpendireto, onde o corpo do pedido terá os parâmetros remoteEndpoint, remoteAuthorizationTokene localPort como mostrado acima.

Implementar o método direto tunnelOpen

Quando o tunnelOpen método direto é invocado pelo serviço Video Analyzer, a aplicação tem de fazer o seguinte:

  1. Obtenha as portas RTSP disponíveis do dispositivo
  2. Compare o localPort valor especificado na chamada de método direto com as portas disponíveis
    • Retornar BadRequest se não for encontrado qualquer correspondência (ver secção de Respostas de Erro abaixo)
  3. Abra uma ligação TCP a "(câmara IP ou nome de hospedeiro):localPort"
    • Devolver BadRequest se a ligação falhar
    • NOTA: o nome de anfitrião é tipicamente local
  4. Abra uma ligação da tomada web ao remoteEndpoint (através de um representante se configurado no dispositivo)
    • Desacorra o cabeçalho HTTP "Autorização" como "Portador (remoteAuthorizationToken)"
    • Desactore o cabeçalho "TunnelConnectionSource" com o valor "PnpDevice"
    • Desaça User-Agent para um valor adequado que o ajude a identificar a sua implementação.
      • Por exemplo, é melhor capturar a arquitetura do CPU, o SO, o modelo/make do dispositivo.
    • Devolução 200 OK se a ligação à tomada web tiver sido bem sucedida, caso contrário, devolva o código de erro apropriado
  5. Resposta de retorno (não bloquear)
  6. A implementação do dispositivo IoT PnP começa a enviar dados TCP bi-direcionalmente entre o websocket e a ligação TCP do servidor RTSP

O serviço de Video Analyzer vai revalinhar tunnelOpen pedidos de falha, pelo que não são necessárias recaídas na aplicação.

Respostas de erro

Se o tunnelOpen pedido falhar, o corpo de resposta deve 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 de tais respostas de erro são:

  • A porta local não está disponível como porta RTSP ou RTSPS { "código": "400", "target": "(câmara IP ou nome de anfitrião):{localPort}", "mensagem": "A porta local não está disponível"}
  • Timeout/não podia ligar-se ao ponto final RTSP { "código": "400", "target": "(câmara IP ou nome de anfitrião):{localPort}", "mensagem":"Não podia ligar-se ao ponto final RTSP"}
  • Resposta timeout/erro a partir da tentativa de ligação da tomada web { "código": "{WebSocket response code}", "target": "{remoteEndpoint}", "message": "{Web socket response error error message}"}

Ingestão para Analisador de Vídeo

Para capturar e gravar o vídeo para o Video Analyzer, deve ser criada uma topologia de pipeline com túneis ativados. A partir dessa topologia, deve ser criado e ativado um gasoduto vivo. As instruções para este processo são descritas aqui.

Implementação de exemplo

Contacte videoanalyzerhelp@microsoft.com se quiser implementar uma aplicação no seu dispositivo para conectá-la ao Video Analyzer.

Consulte também

O que é o IoT Plug and Play?