Połączenie do usługi Azure Video Analyzer

ikona chmury
Alternatywnie zapoznaj się z tematami w obszarze Create intelligent video applications on the edge (Tworzenie inteligentnych aplikacji wideo na brzegu sieci).


Aby przechwytywać i rejestrować wideo z urządzenia, usługa Azure Video Analyzer musi nawiązać z nim połączenie RTSP. Jeśli urządzenie znajduje się za zaporą, takie połączenia są blokowane i nie zawsze można utworzyć reguły zezwalające na połączenia przychodzące z platformy Azure. Aby obsługiwać takie urządzenia, można skompilować i zainstalować implementację urządzenia usługi Azure IoT Plug and Play, która nasłuchuje poleceń wysyłanych za pośrednictwem usługi IoT Hub z usługi Video Analyzer, a następnie otwiera bezpieczny tunel websocket do usługi. Po nawiązyniu takiego tunelu analizator wideo może nawiązać połączenie z serwerem RTSP.

Omówienie

Ten artykuł zawiera szczegółowe pojęcia dotyczące tworzenia implementacji urządzenia Usługi Azure IoT PnP, która umożliwia usłudze Video Analyzer przechwytywanie i nagrywanie wideo z urządzenia.

Aplikacja musi:

  1. Uruchamianie jako urządzenie IoT
  2. Implementowanie interfejsu IoT PnP za pomocą określonego polecenia ( tunnelOpen )
  3. Po otrzymaniu takiego polecenia:
    • Weryfikowanie odebranych argumentów
    • Otwórz bezpieczne połączenie websocket z adresem URL dostarczonym przy użyciu podanego tokenu
    • Przekazywanie bajtów protokołu websocket do połączenia TCP serwera RTSP aparatu

Połączenie urządzenia do chmury

Uruchamianie jako urządzenie IoT

Aplikacja Video Analyzer zostanie wdrożona jako wtyczka PnP analizatora wideo. Wymaga to użycia jednego z zestawów SDK urządzeń Azure IoT do skompilowania implementacji urządzenia IoT PnP. Zarejestruj urządzenie IoT w swoim IoT Hub, aby uzyskać identyfikator IoT Hub i parametrów połączenia urządzenia.

Konfiguracja klienta urządzenia IoT

  • Ustaw OPTION_MODEL_ID do “dtmi:azure:videoanalyzer:WebSocketTunneling;1” obsługi zapytań PnP 
  • Upewnij się, że urządzenie używa protokołu MQTT lub MQTT za pośrednictwem protokołu WebSockets do nawiązywania połączenia Azure IoT Hub
    • Połączenie do IoT Hub przez serwer proxy HTTPS, jeśli został skonfigurowany na urządzeniu IoT 
  • Rejestrowanie wywołania zwrotnego dla  tunnelOpen   metody bezpośredniej

Implementowanie interfejsu IoT PnP dla analizatora wideo

W poniższym Digital Twins języka DTDL (Definition Language) opisano urządzenie, które może łączyć się z analizatorem wideo.

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

Urządzenie IoT rejestruje metodę bezpośrednią , gdzie treść żądania będzie miała parametry , i , jak  tunnelOpen remoteEndpoint remoteAuthorizationToken localPort pokazano powyżej.

Implementowanie metody bezpośredniej tunnelOpen

Gdy metoda tunnelOpen bezpośrednia jest wywoływana przez usługę Video Analyzer, aplikacja musi wykonać następujące czynności:

  1. Uzyskiwanie dostępnych portów RTSP urządzenia
  2. Porównaj localPort wartość określoną w wywołaniu metody bezpośredniej z dostępnymi portami
    • Jeśli nie znaleziono dopasowania, zwróć wartość BadRequest (zobacz sekcję Odpowiedzi na błędy poniżej)
  3. Otwórz połączenie TCP z adresem "(adres IP aparatu lub nazwa hosta): localPort "
    • Zwracanie badRequest w przypadku niepowodzenia połączenia
    • UWAGA: nazwa hosta to zwykle localhost
  4. Otwórz połączenie gniazda internetowego z serwerem remoteEndpoint (za pośrednictwem serwera proxy, jeśli skonfigurowano je na urządzeniu)
    • Ustaw nagłówek HTTP "Authorization" na "Bearer (remoteAuthorizationToken)"
    • Ustaw nagłówek "TunnelConnectionSource" na wartość "PnpDevice"
    • Ustaw User-Agent na odpowiednią wartość, która pomoże zidentyfikować implementację.
      • Możesz na przykład przechwycić architekturę procesora CPU, systemu operacyjnego, modelu/marki urządzenia.
    • Jeśli połączenie gniazda internetowego powiodło się, zwróć wartość 200 OK. W przeciwnym razie zwróć odpowiedni kod błędu
  5. Zwracana odpowiedź (nie blokuj)
  6. Implementacja urządzenia IoT PnP rozpoczyna dwukierunkowe wysyłanie danych TCP między protokołem websocket i połączeniem TCP serwera RTSP

Usługa Video Analyzer będzie ponawiać żądania w przypadku niepowodzenia, więc ponowne próby tunnelOpen nie są wymagane w aplikacji.

Odpowiedzi na błędy

Jeśli żądanie tunnelOpen zakończy się niepowodzeniem, treść odpowiedzi powinna być następująca

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

Przykłady takich odpowiedzi na błędy to:

  • Port lokalny nie jest dostępny jako port RTSP lub RTSPS { "code": "400", "target": "(adres IP aparatu lub nazwa hosta):{localPort}", "message": "Port lokalny nie jest dostępny"}
  • Limit czasu/nie można nawiązać połączenia z punktem końcowym RTSP { "code": "400", "target": "(adres IP aparatu lub nazwa hosta):{localPort}", "message":"Nie można nawiązać połączenia z punktem końcowym RTSP"}
  • Błąd/limit czasu odpowiedzi z próby połączenia gniazda internetowego { "code": "{kod odpowiedzi webSocket}", "target": "{remoteEndpoint}", "message": "{komunikat o błędzie odpowiedzi gniazda sieci Web}"}

Pozyskiwanie do analizatora wideo

Aby przechwycić i nagrać wideo w analizatorze wideo, należy utworzyć topologię potoku z włączonym tunelowaniem. Z tej topologii należy utworzyć i aktywować potok na żywo. Instrukcje dotyczące tego procesu zostały opisane tutaj.

Przykładowa implementacja

Skontaktuj się z nami, jeśli chcesz zaimplementować aplikację na urządzeniu w celu videoanalyzerhelp@microsoft.com połączenia jej z analizatorem wideo.

Zobacz też

Co to jest usługa IoT Plug and Play?