將裝置連線至 Azure Video Analyzer

雲端圖示
或者,請參閱在 edge 上建立智慧型影片應用程式的主題。


為了從裝置捕獲並錄製影片,Azure 影片分析器服務需要建立它的 RTSP 連接。 如果裝置位於防火牆後方,這類連線會遭到封鎖,而且不一定可以建立規則以允許來自 Azure 的輸入連線。 若要支援這類裝置,您可以建立並安裝Azure IoT 的隨插即用裝置執行,其會接聽從影片分析器透過 IoT 中樞傳送的命令,然後開啟服務的安全 websocket 通道。 一旦建立此通道後,影片分析器就可以連接到 RTSP 伺服器。

概觀

本文提供有關建立 Azure IoT PnP 裝置執行的高階概念,可讓影片分析器從裝置捕獲並錄製影片。

應用程式將需要:

  1. 以 IoT 裝置的形式執行
  2. 使用特定命令 (來執行 IoT PnP 介面 tunnelOpen)
  3. 收到這類命令時:
    • 驗證收到的引數
    • 開啟安全的 websocket 連線,以使用提供的權杖提供的 URL
    • 將 websocket 位元組轉送至相機的 RTSP 伺服器 TCP 連線

連線裝置到雲端

以 IoT 裝置的形式執行

影片分析器應用程式將會部署為影片分析器 PnP 外掛程式。 這需要使用其中一個Azure IoT 裝置 sdk來建立 IoT PnP 裝置執行。 向 IoT 中樞註冊 IoT 裝置,以取得 IoT 中樞裝置識別碼和裝置連接字串。

IoT 裝置用戶端設定

  • 將 OPTION_MODEL_ID 設定為 “dtmi:azure:videoanalyzer:WebSocketTunneling;1” 以支援 PnP 查詢 
  • 確定您的裝置使用 MQTT 或 MQTT over websocket 通訊協定來連線到 Azure IoT Hub
    • 在 IoT 裝置上設定的 HTTPS proxy 連線 IoT 中樞 
  • 註冊  tunnelOpen   直接方法的回呼

執行適用于影片分析器的 IoT PnP 介面

下列 數位 Twins 定義語言 (DTDL) 模型描述可連接至影片分析器的裝置。

{
  "@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 裝置會註冊直接方法  tunnelOpen ,其中要求的主體會有參數 remoteEndpointremoteAuthorizationToken 和,如上 localPort 所示。

執行直接方法 tunnelOpen

tunnelOpen 視頻分析器服務叫用直接方法時,應用程式必須執行下列動作:

  1. 取得裝置的可用 RTSP 埠 (s)
  2. 比較 localPort 直接方法呼叫中指定的值與可用的埠
    • 如果找不到相符項,則傳回 BadRequest (請參閱下面的錯誤回應一節)
  3. 開啟連至「 (攝影機 IP 或主機名稱) :」的 TCP 連線 localPort
    • 如果連接失敗,則傳回 BadRequest
    • 注意:主機名稱通常是 localhost
  4. remoteEndpoint如果裝置上已設定,請透過 proxy 開啟 (的 web 通訊端連線)
    • 將 HTTP "Authorization" 標頭設定為 "持有者 (remoteAuthorizationToken) "
    • 將標頭 "TunnelConnectionSource" 設定為值 "PnpDevice"
    • 將 User-Agent 設定為適當的值,以協助您識別您的執行。
      • 例如,您可能想要捕捉 CPU、OS、裝置的型號/構成的架構。
    • 如果 web 通訊端連線成功,則傳回 200 OK,否則傳回適當的錯誤碼
  5. 傳迴響應 (不會封鎖)
  6. IoT PnP 裝置執行會在 websocket 與 RTSP 伺服器 TCP 連線之間雙向開始傳送 TCP 資料

影片分析器服務會 tunnelOpen 在失敗時重試要求,因此應用程式不需要重試。

錯誤回應

如果 tunnelOpen 要求失敗,則回應主體應如下所示

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

這類錯誤回應的範例如下:

  • 本機埠未提供為 RTSP 或 RTSPS 埠 {"code": "400","target": " (相機 IP 或主機名稱) : {localPort}","message": "本機埠無法使用"}
  • Timeout/無法連線到 RTSP 端點 {"code": "400","target": " (相機 IP 或主機名稱) : {localPort}","message": "無法連線到 RTSP 端點"}
  • 來自 web socket connect 的超時/錯誤回應 {"code": "{WebSocket response code}","target": "{remoteEndpoint}","message": "{Web 通訊端回應錯誤訊息}"}

內嵌至影片分析器

若要捕獲影片並錄製至影片分析器,必須建立已啟用通道的管線拓撲。 從該拓撲中,必須建立和啟用即時管線。 這裡概述了此程式的指示。

範例執行

videoanalyzerhelp@microsoft.com如果您想要在裝置上執行應用程式,以將其連接到 Video Analyzer,請聯絡。

另請參閱

什麼是 IoT 隨插即用?