通過 WebRTC 進(jìn)行視頻流式傳輸

通過使用客戶端應(yīng)用程序(例如移動應(yīng)用程序或瀏覽器)連接到系統(tǒng)的攝像頭查看視頻流是視頻分析系統(tǒng)的常見要求。此功能通過基于 VST API 的標(biāo)準(zhǔn)化調(diào)用流提供支持。VST 微服務(wù)支持使用 WebRTC (Web Real-Time Communication,Web 實時通信)協(xié)議進(jìn)行遠(yuǎn)程流式傳輸,該協(xié)議專為通過互聯(lián)網(wǎng)可靠地對等傳輸視頻和其他數(shù)據(jù)而設(shè)計。

本節(jié)概述 WebRTC 協(xié)議背后的突出概念,并使用 VST API 實現(xiàn)基于 WebRTC 的流式傳輸。WebRTC 是一個功能強大的開源項目,可在兩個對等端(例如 Web 瀏覽器和運行 VST 的 Jetson 設(shè)備)之間直接進(jìn)行實時通信。

用于 WebRTC 流式傳輸?shù)膶嶓w

典型的 WebRTC 會話涉及幾個不同的實體,如下所示:用戶代理:表示使用 VST API 發(fā)起通信的移動、瀏覽器或 Web 應(yīng)用程序。信號服務(wù)器:在 VST 中實現(xiàn)的 Web 服務(wù)器參與建立 WebRTC 會話的通信通道。

ICE (交互式連接建立)服務(wù)器:VST-WebRTC 堆棧中實現(xiàn)的邏輯模塊,用于確定對等方之間的最佳連接路徑。這是繞過防火墻和 NAT (網(wǎng)絡(luò)地址轉(zhuǎn)換器)所必需的。

STUN (會話遍歷實用程序)服務(wù)器:一種有助于發(fā)現(xiàn)公共 IP 地址和端口的 ICE 服務(wù)器。當(dāng)對等方使用私有(基于 NAT 的)IP 地址時,這是必要的。這是托管在公有云網(wǎng)絡(luò)上的第三方實體。
TURN (使用 NAT 周圍的繼電器進(jìn)行遍歷)服務(wù)器:在直接點對點通信失敗時充當(dāng)中繼器,并且僅在節(jié)點位于不同網(wǎng)絡(luò)時才需要。Twilio? 等第三方服務(wù)支持此功能。


WebRTC 會議階段

WebRTC 會議使用控制路徑和數(shù)據(jù)路徑以啟用會話創(chuàng)建和流式傳輸。控制路徑支持設(shè)置和管理同行之間的會話,其階段包括初始化、信號傳遞、ICE 候選交換和建立連接。VST 使用戶代理能夠通過其 API 遠(yuǎn)程執(zhí)行這些操作。數(shù)據(jù)路徑支持實時媒體數(shù)據(jù)傳輸以及適應(yīng)和質(zhì)量控制,并最終關(guān)閉連接。

通過 VST API 啟動 WebRTC 流式傳輸

圖 3 顯示了客戶端和 VST 之間的調(diào)用流程,該流程捕獲了用于啟用 WebRTC 會話的控制和數(shù)據(jù)路徑。

呼叫流始于客戶端使用 api/v1/sensor/listAPI。


控制和數(shù)據(jù)路徑基于以下調(diào)用流實施:

在進(jìn)行串流時,客戶端可以使用以下串流 API 控制串流:

構(gòu)建客戶端應(yīng)用

通過在 JavaScript 中通過 HTTP 調(diào)用 VST API,同時利用大多數(shù)瀏覽器支持的 JavaScript 中的 WebRTC 支持,這些概念可應(yīng)用于向基于瀏覽器的 Web 應(yīng)用程序添加視頻流功能。類似概念也可應(yīng)用于構(gòu)建原生 WebRTC 客戶端應(yīng)用程序。要使用 JavaScript 設(shè)置 WebRTC 流式傳輸,請執(zhí)行以下步驟:

初始化對等鏈接

創(chuàng)建新的 RTCPeerConnection 具有適當(dāng)配置設(shè)置的對象。

處理音軌添加

生成報價

將優(yōu)惠發(fā)送至 VST

接受來自 VST 的回復(fù)

當(dāng)從 VST 接收到答案 SDP 作為啟動 API 響應(yīng)時,請使用
peerConnection.setRemoteDescription。

處理 ICE 候選項

為物體移動生成空間見解和警報分析微服務(wù)支持三個人員或?qū)ο蠓治瞿K:

結(jié)合使用,這些模塊提供了一套功能強大的工具,用于了解人員或物體在物理空間中的移動,用例涵蓋零售倉庫、安全和安保。客戶端應(yīng)用使用 API 來識別傳感器列表、創(chuàng)建線,以及檢索每個功能的計數(shù)和警報。
本節(jié)介紹線這些操作的端到端示例。類似的方法可用于啟用 FOV 和 ROI.對于每種情況,請調(diào)用您選擇的編程語言或 HTTP 客戶端中的 HTTP API.

檢索傳感器列表

第一步,檢索要為其配置線的傳感器名稱。

調(diào)用 VST API 以列出所有傳感器。從返回的列表中識別感興趣的傳感器。name 在后續(xù)步驟中,傳感器對象的屬性將用作傳感器 ID,以配置和檢索線數(shù)量和警報。將 <device-ip>替換為設(shè)備的 IP 地址。
http://<device-ip>:30080/vst/api/v1/sensor/list

創(chuàng)建線配置

在此步驟中,配置一條線,以指定您希望對穿越的人員進(jìn)行計數(shù)的線。

配置線時,請指定以下屬性:

請注意,點的坐標(biāo)位于相機坐標(biāo) (圖像平面) 中。左上角為 (00)。
客戶應(yīng)用(例如隨 NVIDIA Metropolis 微服務(wù)提供的參考移動應(yīng)用)提供了視覺輔助來選擇點,而無需手動確定 (x,y) 位置。圖 4 展示了通過移動應(yīng)用創(chuàng)建和渲染線的示例。用戶使用應(yīng)用中的觸摸界面選擇線錨點,以繪制線(綠線)以及方向性(紅色箭頭)。

使用?Id = main_door?傳感器?Id = Amcrest_3?然后,使用您選擇的編程語言調(diào)用以下 HTTP API 調(diào)用:http://<device-ip>:30080/emdx/api/config/tripwire?sensorId=Amcrest_3

{  "deleteIfPresent": false,  "tripwires": [    {        "direction": {          "entry": {            "name": "Inside the room"          },          "exit": {            "name": "Outside of the room"          },          "p1": { "x": 753, "y": 744},          "p2": { "x": 448, "y": 856}        },        "id": "main_door",        "name": "Main door",        "wire": [          { "x": 321, "y": 664 },          { "x": 544, "y": 648 },          { "x": 656, "y": 953 },          { "x": 323, "y": 1067}        ]      }  ],  "sensorId": "Amcrest_3"}


配置線警報規(guī)則(可選)

可以選擇為給定的線配置警報規(guī)則。警報規(guī)則是特定條件,滿足這些條件后將生成警報事件。

要配置一條警報規(guī)則,以便在有人朝入口方向穿過線(大門)時發(fā)出警報,請調(diào)用以下 API 請求:http://<device-ip>:30080/emdx/api/config/rule/alerts/tripwire

{
"sensorId": "Amcrest_3",
"rules": [
{
"rule_id": "cd2218f6-e4d2-4ad4-9b15-3396e4336064",
"id": "main_door",
"type": "tripwire",
"rule_type": "increment",
"time_interval": 1,
"count_threshold": 1,
"direction": "entry"
}
]
}

線索線數(shù)量和警報

此步驟說明了如何檢索穿越先前定義的線的人數(shù)。或者,您還可以檢索根據(jù)該線的配置警報規(guī)則生成的警報。

可以查詢特定線的計數(shù) ( sensorId, tripwireId ),時間范圍 ( fromTimestamp, toTimestamp ) 并聚合到指定的時間窗口 ( fixedInterval 或者,您可以通過將“DLSS 3”設(shè)置為“DLSS 3”來檢索警報和統(tǒng)計信息。alerts query 參數(shù)true:http://<device-ip>:30080/emdx/api/metrics/tripwire/histogram?sensorId=Amcrest_3&tripwireId=main_door&fromTimestamp=2020-10-30T20:00:00.000Z&toTimestamp=2020-10-30T20:01:00.000Z&fixedInterval=1000&alerts=true

{
"alerts": [
{
"count": 1,
"description": "1 people entered tripwire",
"duration": 1.000,
"startTimestamp": "2020-10-30T20:00:59.000Z",
"endTimestamp": "2020-10-30T20:01:00.000Z",
"id": "unique-alert-id",
"rule_type": "increment",
"rule_id": "cd2218f6-e4d2-4ad4-9b15-3396e4336064",
"sensorId": "Amcrest_3",
"type": "tripwire",
"direction": "entry",
"directionName": "Inside the room",
"attributes": [..],
}
],
"counts": [
{
"agg_window": "1 sec",
"histogram": [
{
"end": "2020-10-30T20:00:01.000Z",
"start": "2020-10-30T20:00:00.000Z",
"sum_count": 1
}
],
"attributes": [...],
"sensorId": "Amcrest_3",
"type": "exit"
},
{
"agg_window": "1 sec",
"histogram": [
{
"end": "2020-10-30T20:00:01.000Z",
"start": "2020-10-30T20:00:00.000Z",
"sum_count": 0
},
…..
],
"attributes": [.. ],
"sensorId": "Amcrest_3",
"type": "entry"
}
]
}

系統(tǒng)會分別返回每個方向的直方圖。整個時間范圍被劃分為 fixedInterval。每個時間窗口的交叉 start,end 報告為 sum_count。

線索線警報

要檢索給定傳感器的所有警報,請調(diào)用以下 API:

http://<device-ip>:30080/emdx/api/alerts?sensorId=Amcrest_3&fromTimestamp=2020-10-30T20:00:00.000Z&toTimestamp=2020-10-31T01:00:00.000Z

安全、遠(yuǎn)程、基于云的 API 訪問

API 使客戶端能夠使用 HTTP 協(xié)議遠(yuǎn)程訪問設(shè)備配置和功能。在開發(fā)階段,建議通過將 HTTP 請求定向到設(shè)備 IP 地址來調(diào)用 API.但是,在生產(chǎn)場景中,客戶端通常不知道設(shè)備的 IP 地址。

此外,Jetson 設(shè)備可能位于防火墻后面,使其無法訪問,或者它們可能使用基于 NAT 的 IP 地址,而這些地址在外部可能無效。IoT 云通過提供一種機制,以安全的方式將請求從網(wǎng)絡(luò)分離的客戶端轉(zhuǎn)發(fā)到設(shè)備,從而促進(jìn)產(chǎn)品級遠(yuǎn)程 API 調(diào)用。
本節(jié)介紹客戶端獲取安全令牌的機制,并使用這些令牌通過云創(chuàng)建 HTTP,以轉(zhuǎn)發(fā)到適當(dāng)?shù)脑O(shè)備。
雖然本節(jié)的重點是展示客戶端如何通過云調(diào)用設(shè)備 API,但請注意,云架構(gòu)提供了一種安全的“設(shè)備聲明”機制,用于通過云授權(quán)訪問特定設(shè)備。通過云訪問的所有用戶設(shè)備都經(jīng)過身份驗證和授權(quán),用戶只能訪問之前聲明過的設(shè)備。
此功能的設(shè)計具有高度可定制性,可與原始設(shè)計制造商 (ODM) 和原始設(shè)備制造商 (OEM) 運營商現(xiàn)有的安全框架和云后端基礎(chǔ)設(shè)施無縫集成。

通過 IoT Cloud 調(diào)用設(shè)備API的工作流程

物聯(lián)網(wǎng) (IoT) 云實現(xiàn)參考使用?Amazon Cognito?作為身份提供商 (IdP),但用戶可以自由選擇任何第三方身份提供商。要通過云端點訪問設(shè)備 API,請遵循以下概述的身份驗證和授權(quán)調(diào)用流。

使用 Amazon Congnito 進(jìn)行身份驗證

使用 Web 控制臺登錄 URI 頁面,以便使用 Amazon Cognito 進(jìn)行身份驗證。身份驗證成功后,Amazon Cognito 會返回唯一的授權(quán)代碼。使用授權(quán)代碼向 Amazon Cognito 發(fā)出受時間限制的 ID 令牌。在調(diào)用 IoT 云安全 API 時展示此 ID 令牌。

生成 CWT 令牌并調(diào)用設(shè)備

API要訪問物聯(lián)網(wǎng)設(shè)備 API,請首先向物聯(lián)網(wǎng)云安全請求授權(quán)令牌。在收到有效請求后,物聯(lián)網(wǎng)云安全會發(fā)出臨時簽名的授權(quán) CWT 令牌。然后,使用此令牌通過物聯(lián)網(wǎng)云傳輸調(diào)用設(shè)備 API,從而進(jìn)行驗證并將請求轉(zhuǎn)發(fā)至設(shè)備。

請注意,如果用戶無權(quán)根據(jù)設(shè)備聲明執(zhí)行操作,則會返回未經(jīng)授權(quán)的 HTTP 錯誤代碼。


總結(jié)

借助 NVIDIA Metropolis API 和微服務(wù),在邊緣構(gòu)建功能強大的市場就緒型視覺 AI 應(yīng)用。API 提供了一種標(biāo)準(zhǔn)化、安全和分布式的方法,用于實現(xiàn)各種 NVIDIA Metropolis 微服務(wù)的功能。此版本中包含的參考移動應(yīng)用展示了一個成熟的最終用戶應(yīng)用,該應(yīng)用使用這些 API 構(gòu)建,具有用戶友好型界面,可捕獲配置、視頻流、分析、警報、云集成和設(shè)備聲明。此應(yīng)用包括源代碼,以及版本文檔移動應(yīng)用部分中各種模塊的演練。
來源:NVIDIA企業(yè)開發(fā)者社區(qū)

文章轉(zhuǎn)自微信公眾號@邊緣計算中文社區(qū)

上一篇:

接口大師v3.10.0 零代碼/低代碼,把內(nèi)部接口變成OpenAPI開放接口的妙招

下一篇:

UCI機器學(xué)習(xí)數(shù)據(jù)庫的Python API介紹
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費