Anslut till Azure Video Analyzer

molnikon
Du kan också läsa avsnitten under Create intelligent video applications on the edge (Skapa intelligenta videoprogram på gränsen).


För att kunna spela in och spela in video från en enhet måste Azure Video Analyzer-tjänsten upprätta en RTSP-anslutning till den. Om enheten finns bakom en brandvägg blockeras sådana anslutningar och det kanske inte alltid är möjligt att skapa regler för att tillåta inkommande anslutningar från Azure. För att stödja sådana enheter kan du skapa och installera en Azure IoT Plug and Play-enhetsimplementering som lyssnar på kommandon som skickas via IoT Hub från Video Analyzer och öppnar sedan en säker websocket-tunnel till tjänsten. När en sådan tunnel har upprättats kan Video Analyzer sedan ansluta till RTSP-servern.

Översikt

Den här artikeln innehåller avancerade begrepp om hur du skapar en Azure IoT PnP-enhetsimplementering som kan göra det möjligt för Video Analyzer att avbilda och spela in video från en enhet.

Programmet måste:

  1. Köra som en IoT-enhet
  2. Implementera IoT PnP-gränssnittet med ett specifikt kommando ( tunnelOpen )
  3. När du tar emot ett sådant kommando:
    • Verifiera de mottagna argumenten
    • Öppna en säker websocket-anslutning till den URL som tillhandahålls med hjälp av den angivna token
    • Vidarebefordra websocket-byte till kamerans TCP-anslutning för RTSP-server

Anslut enheter till molnet

Köra som en IoT-enhet

Video Analyzer-programmet distribueras som ett PnP-plugin-program för Video Analyzer. Detta kräver att du använder någon av AZURE IoT-enhets-SDK:erna för att skapa implementeringen av IoT PnP-enheten. Registrera IoT-enheten med din IoT Hub för att hämta IoT Hub enhets-ID och enhetsanslutningssträng.

Klientkonfiguration för IoT-enhet

  • Ange OPTION_MODEL_ID till “dtmi:azure:videoanalyzer:WebSocketTunneling;1” för att stödja PnP-frågor 
  • Kontrollera att enheten använder antingen MQTT eller MQTT via WebSockets-protokollet för att ansluta till Azure IoT Hub
    • Anslut att IoT Hub över en HTTPS-proxy om den har konfigurerats på IoT-enheten 
  • Registrera återanrop för  tunnelOpen   direktmetod

Implementera IoT PnP-gränssnittet för Video Analyzer

Följande modell Digital Twins Definition Language (DTDL) beskriver en enhet som kan ansluta till 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"
            }
          ]
        }
      }
    }
  ]
}

IoT-enheten registrerar en direktmetod , där begärandetexten har  tunnelOpen remoteEndpoint parametrarna remoteAuthorizationToken , och som localPort visas ovan.

Implementera direktmetoden tunnelOpen

När tunnelOpen direktmetoden anropas av Video Analyzer-tjänsten måste programmet göra följande:

  1. Hämta tillgängliga RTSP-portar för enheten
  2. Jämför värdet localPort som anges i direktmetods-anropet med de tillgängliga portarna
    • Returnera BadRequest om ingen matchning hittas (se avsnittet Felsvar nedan)
  3. Öppna en TCP-anslutning till "(kamera-IP eller värdnamn): localPort "
    • Returnera BadRequest om anslutningen misslyckas
    • Obs! värdnamnet är vanligtvis localhost
  4. Öppna en webbsocketanslutning remoteEndpoint till (via en proxyserver om den har konfigurerats på enheten)
    • Ange HTTP-rubriken "Authorization" (Auktorisering) som "Bearer (remoteAuthorizationToken)"
    • Ange rubriken "TunnelConnectionSource" med värdet "PnpDevice"
    • Ange User-Agent ett lämpligt värde som hjälper dig att identifiera implementeringen.
      • Du kanske till exempel vill avbilda cpu-arkitekturen, operativsystemet, enhetens modell/make.
    • Returnera 200 OK om anslutningen till webbsocketen lyckades, annars returneras rätt felkod
  5. Retursvar (blockera inte)
  6. IoT PnP-enhetsimplementering börjar skicka TCP-data i båda riktningarna mellan websocket- och RTSP-serverns TCP-anslutning

Video Analyzer-tjänsten gör tunnelOpen nya försök vid fel, så återförsök behövs inte i programmet.

Felsvar

Om tunnelOpen begäran misslyckas ska svarstexten vara följande

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

Exempel på sådana felsvar är:

  • Den lokala porten är inte tillgänglig som en RTSP- eller RTSPS-port { "code": "400", "target": "(camera IP or hostname):{localPort}", "message": "Local port is not available"}
  • Timeout/det gick inte att ansluta till RTSP-slutpunkten { "code": "400", "target": "(camera IP or hostname):{localPort}", "message":"Could not connect to RTSP endpoint"}
  • Timeout/felsvar från web socket connect-försök { "code": "{WebSocket response code}", "target": "{remoteEndpoint}", "message": "{Web socket response error message}"}

Datainmatning till Video Analyzer

För att kunna samla in och spela in video till Video Analyzer måste en pipelinetopologi med tunneling aktiverad skapas. Från den topologin måste en live-pipeline skapas och aktiveras. Anvisningar för den här processen beskrivs här.

Exempelimplementering

Kontakta videoanalyzerhelp@microsoft.com om du vill implementera ett program på enheten för att ansluta det till Video Analyzer.

Se även

Vad är IoT Plug and Play?