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

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

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

用于 WebRTC 流式傳輸?shù)膶?shí)體

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

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

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


WebRTC 會(huì)議階段

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

通過(guò) VST API 啟動(dòng) WebRTC 流式傳輸

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

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


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

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

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

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

初始化對(duì)等鏈接

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

處理音軌添加

生成報(bào)價(jià)

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

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

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

處理 ICE 候選項(xiàng)

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

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

檢索傳感器列表

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

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

創(chuàng)建線配置

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

配置線時(shí),請(qǐng)指定以下屬性:

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

使用?Id = main_door?傳感器?Id = Amcrest_3?然后,使用您選擇的編程語(yǔ)言調(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"}


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

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

要配置一條警報(bào)規(guī)則,以便在有人朝入口方向穿過(guò)線(大門(mén))時(shí)發(fā)出警報(bào),請(qǐng)調(diào)用以下 API 請(qǐng)求: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ù)量和警報(bào)

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

可以查詢特定線的計(jì)數(shù) ( sensorId, tripwireId ),時(shí)間范圍 ( fromTimestamp, toTimestamp ) 并聚合到指定的時(shí)間窗口 ( fixedInterval 或者,您可以通過(guò)將“DLSS 3”設(shè)置為“DLSS 3”來(lái)檢索警報(bào)和統(tǒng)計(jì)信息。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)會(huì)分別返回每個(gè)方向的直方圖。整個(gè)時(shí)間范圍被劃分為 fixedInterval。每個(gè)時(shí)間窗口的交叉 start,end 報(bào)告為 sum_count。

線索線警報(bào)

要檢索給定傳感器的所有警報(bào),請(qǐng)調(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 訪問(wèn)

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

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

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

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

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

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

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

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

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


總結(jié)

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

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

上一篇:

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

下一篇:

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

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

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

查看全部API→
??

熱門(mén)場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

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

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

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

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)