Connessione dispositivi ad Analizzatore video di Azure

icona del cloud
In alternativa, vedere gli argomenti in Creare applicazioni video intelligenti sul perimetro.


Per acquisire e registrare video da un dispositivo, il servizio Analizzatore video di Azure deve stabilire una connessione RTSP. Se il dispositivo è dietro un firewall, tali connessioni vengono bloccate e potrebbe non essere sempre possibile creare regole per consentire le connessioni in ingresso da Azure. Per supportare tali dispositivi, è possibile compilare e installare un'implementazione del dispositivo Azure IoT Plug and Play, che è in ascolto dei comandi inviati tramite l'hub IoT da Video Analyzer e quindi apre un tunnel websocket sicuro al servizio. Una volta stabilito un tunnel di questo tipo, Video Analyzer può quindi connettersi al server RTSP.

Panoramica

Questo articolo fornisce concetti generali sulla creazione di un'implementazione Azure IoT dispositivo PnP che consente a Video Analyzer di acquisire e registrare video da un dispositivo.

L'applicazione dovrà:

  1. Eseguire come dispositivo IoT
  2. Implementare l'interfaccia IoT PnP con un comando specifico ( tunnelOpen )
  3. Quando si riceve un comando di questo tipo:
    • Convalidare gli argomenti ricevuti
    • Aprire una connessione Websocket sicura all'URL fornito usando il token fornito
    • Inoltrare i byte websocket alla connessione TCP del server RTSP della fotocamera

Connessione dispositivi nel cloud

Eseguire come dispositivo IoT

L'applicazione Video Analyzer verrà distribuita come plug-in PnP di Video Analyzer. Questo richiede l'uso di uno degli SDK Azure IoT dispositivo per compilare l'implementazione del dispositivo IoT PnP. Registrare il dispositivo IoT con l'hub IoT per ottenere l'ID dispositivo dell'hub IoT e la stringa di connessione del dispositivo.

Configurazione del client del dispositivo IoT

  • Impostare OPTION_MODEL_ID su “dtmi:azure:videoanalyzer:WebSocketTunneling;1” per supportare le query PnP 
  • Assicurarsi che il dispositivo utilizzi il protocollo MQTT o MQTT su WebSockets per connettersi all Azure IoT Hub
    • Connessione all'hub IoT tramite un proxy HTTPS se configurato nel dispositivo IoT 
  • Registrare il callback per  tunnelOpen   il metodo diretto

Implementare l'interfaccia IoT PnP per l'analizzatore video

Il modello DTDL (Digital Twins Definition Language) seguente descrive un dispositivo in grado di connettersi 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"
            }
          ]
        }
      }
    }
  ]
}

Il dispositivo IoT registra un metodo diretto , in cui il corpo della richiesta avrà i parametri  tunnelOpen , e , come illustrato in remoteEndpoint remoteAuthorizationToken localPort precedenza.

Implementare il metodo diretto tunnelOpen

Quando il tunnelOpen metodo diretto viene richiamato dal servizio Video Analyzer, l'applicazione deve eseguire le operazioni seguenti:

  1. Ottenere le porte RTSP disponibili del dispositivo
  2. Confrontare il localPort valore specificato nella chiamata al metodo diretto con le porte disponibili
    • Restituisce BadRequest se non viene trovata alcuna corrispondenza (vedere la sezione Risposte di errore più avanti)
  3. Aprire una connessione TCP a "(camera IP or hostname): localPort "
    • Restituisce BadRequest se la connessione non riesce
    • NOTA: il nome host è in genere localhost
  4. Aprire una connessione Web Socket a remoteEndpoint (tramite un proxy se configurato nel dispositivo)
    • Impostare l'intestazione HTTP "Authorization" su "Bearer (remoteAuthorizationToken)"
    • Impostare l'intestazione "TunnelConnectionSource" con valore "PnpDevice"
    • Impostare User-Agent su un valore appropriato che consente di identificare l'implementazione.
      • Ad esempio, può essere necessario acquisire l'architettura della CPU, del sistema operativo, del modello o della make del dispositivo.
    • Restituisce 200 OK se la connessione web socket ha avuto esito positivo, in caso contrario restituisce il codice di errore appropriato
  5. Risposta restituita (non bloccare)
  6. L'implementazione del dispositivo IoT PnP avvia l'invio bidirezionale dei dati TCP tra il websocket e la connessione TCP del server RTSP

Il servizio Analizzatore video ripeterà le richieste in caso tunnelOpen di errore, quindi non sono necessari nuovi tentativi nell'applicazione.

Risposte agli errori

Se la tunnelOpen richiesta ha esito negativo, il corpo della risposta deve essere il seguente

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

Esempi di tali risposte di errore sono:

  • La porta locale non è disponibile come porta RTSP o RTSPS { "code": "400", "target": "(camera IP or hostname):{localPort}", "message": "Local port is not available"}
  • Timeout/impossibile connettersi all'endpoint RTSP { "code": "400", "target": "(camera IP or hostname):{localPort}", "message":"Could not connect to RTSP endpoint"}
  • Timeout/risposta di errore dal tentativo di connessione web socket { "code": "{WebSocket response code}", "target": "{remoteEndpoint}", "message": "{Messaggio di errore di risposta web socket}"}

Inserimento in Video Analyzer

Per acquisire e registrare video in Video Analyzer, è necessario creare una topologia di pipeline con tunneling abilitato. Da tale topologia, è necessario creare e attivare una pipeline in tempo reale. Le istruzioni per questo processo sono descritte qui.

Implementazione di esempio

Contattare videoanalyzerhelp@microsoft.com se si vuole implementare un'applicazione nel dispositivo per connetterla a Video Analyzer.

Vedere anche

Informazioni su Plug and Play IoT