Verbinding maken naar Azure Video Analyzer

cloudpictogram
U kunt ook de onderwerpen bekijken onder Intelligente videotoepassingen maken aan de rand.


Als u video van een apparaat wilt vastleggen en opnemen, moet de Azure Video Analyzer-service een RTSP-verbinding met het apparaat tot stand brengen. Als het apparaat zich achter een firewall bevinden, worden dergelijke verbindingen geblokkeerd en is het mogelijk niet altijd mogelijk om regels te maken om binnenkomende verbindingen vanuit Azure toe te staan. Ter ondersteuning van dergelijke apparaten kunt u een Azure IoT Plug en Play-apparaat implementeren. Deze luistert naar opdrachten die zijn verzonden via IoT Hub van Video Analyzer en opent vervolgens een beveiligde websocket-tunnel naar de service. Zodra een dergelijke tunnel tot stand is gebracht, kan Video Analyzer verbinding maken met de RTSP-server.

Overzicht

Dit artikel bevat algemene concepten over het bouwen van een Azure IoT PnP-apparaat-implementatie waarmee Video Analyzer video's van een apparaat kan vastleggen en opnemen.

De toepassing moet het volgende doen:

  1. Uitvoeren als een IoT-apparaat
  2. Implementeert de IoT PnP-interface met een specifieke opdracht ( tunnelOpen )
  3. Bij ontvangst van een dergelijke opdracht:
    • De ontvangen argumenten valideren
    • Open een beveiligde websocket-verbinding met de URL die is opgegeven met behulp van het opgegeven token
    • De websocket-bytes doorsturen naar de TCP-verbinding van de RTSP-server van de camera

Verbinding maken naar de cloud

Uitvoeren als een IoT-apparaat

De Video Analyzer-toepassing wordt geïmplementeerd als een Video Analyzer PnP-invoegtoepassing. Hiervoor moet u een van de Azure IoT-apparaat-SDK's gebruiken om de implementatie van uw IoT PnP-apparaat te bouwen. Registreer het IoT-apparaat bij uw IoT Hub om de IoT Hub apparaat-id en apparaatverbindingsreeks op te halen.

Configuratie van IoT-apparaatclient

  • Stel OPTION_MODEL_ID in op “dtmi:azure:videoanalyzer:WebSocketTunneling;1” om PnP-query's te ondersteunen 
  • Zorg ervoor dat uw apparaat het protocol MQTT of MQTT via WebSockets gebruikt om verbinding te maken met Azure IoT Hub
    • Verbinding maken over IoT Hub HTTPS-proxy als deze is geconfigureerd op het IoT-apparaat 
  • Callback registreren voor  tunnelOpen   directe methode

De IoT PnP-interface voor Video Analyzer implementeren

In het Digital Twins DTDL-model (Definition Language) wordt een apparaat beschreven dat verbinding kan maken met 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"
            }
          ]
        }
      }
    }
  ]
}

Het IoT-apparaat registreert een directe methode , waarbij de body van de aanvraag de  tunnelOpen parameters remoteEndpoint , en remoteAuthorizationToken heeft, zoals hierboven wordt localPort weergegeven.

De directe methode implementeren tunnelOpen

Wanneer de tunnelOpen directe methode wordt aangeroepen door de Video Analyzer-service, moet de toepassing het volgende doen:

  1. De beschikbare RTSP-poort(s) van het apparaat verkrijgen
  2. Vergelijk de localPort waarde die is opgegeven in de aanroep van de directe methode met de beschikbare poorten
    • BadRequest retourneren als er geen overeenkomst is gevonden (zie de sectie Foutreacties hieronder)
  3. Open een TCP-verbinding met '(camera-IP of hostnaam): localPort '
    • BadRequest retourneren als de verbinding mislukt
    • OPMERKING: hostnaam is doorgaans localhost
  4. Open een websocktverbinding remoteEndpoint met de (via een proxy indien geconfigureerd op het apparaat)
    • Stel de HTTP-header 'Autorisatie' in op 'Bearer (remoteAuthorizationToken)'
    • Stel de header TunnelConnectionSource in met de waarde PnpDevice
    • Stel User-Agent in op een geschikte waarde die u kan helpen bij het identificeren van uw implementatie.
      • U kunt bijvoorbeeld de architectuur van de CPU, het besturingssysteem, het model of het model van het apparaat vastleggen.
    • 200 OK retourneren als de websockeverbinding is geslaagd, anders wordt de juiste foutcode retourneren
  5. Antwoord retourneren (niet blokkeren)
  6. Implementatie van IoT PnP-apparaat begint met het bi-directioneel verzenden van TCP-gegevens tussen de websocket- en RTSP-server-TCP-verbinding

Video Analyzer-service zal aanvragen opnieuw proberen bij een fout, zodat er geen nieuwe poging nodig tunnelOpen is in de toepassing.

Foutreactiess

Als de tunnelOpen aanvraag mislukt, moet de antwoord-body er als volgt uit zien

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

Voorbeelden van dergelijke foutreacties zijn:

  • Lokale poort is niet beschikbaar als rtsp- of RTSPS-poort { "code": "400", "doel": "(camera IP of hostnaam):{localPort}", "message": "Lokale poort is niet beschikbaar"}
  • Time-out/kan geen verbinding maken met RTSP-eindpunt { "code": "400", "doel": "(camera IP of hostnaam):{localPort}", "message":"Kan geen verbinding maken met RTSP-eindpunt"}
  • Time-out/foutbericht van websocket connect attempt { "code": "{WebSocket response code}", "target": "{remoteEndpoint}", "message": "{Web socket response error message}"}

Opname in Video Analyzer

Als u video wilt vastleggen en opnemen in Video Analyzer, moet u een pijplijntopologie maken waarin tunneling is ingeschakeld. Vanuit die topologie moet een live-pijplijn worden gemaakt en geactiveerd. Instructies voor dit proces worden hier beschreven.

Voorbeeld van implementatie

Neem contact op met als u een toepassing op uw apparaat wilt implementeren videoanalyzerhelp@microsoft.com om deze te verbinden met Video Analyzer.

Zie ook

Wat is IoT Plug en Play?