iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
Cloud Native

K8s上的機器人沙盒系列 第 8

Day 8|Selkies 架構與 WebRTC 基礎:ICE / STUN / TURN / Codec Bitrate與Latency

  • 分享至 

  • xImage
  •  

承接 Day 7(K8s 安全護欄),今天進入本系列的核心主角之一 —— Selkies 與 WebRTC。Selkies 是一個以 Kubernetes 為基礎、提供 WebRTC 雲端應用串流的開源專案。我們將理解它的架構,並從 WebRTC 的 ICE/STUN/TURN 機制、編解碼器選擇,到位元率與延遲控制,為後續的低延遲 Isaac Sim/Isaac Lab 串流做基礎鋪墊。

A. Selkies 架構總覽

Selkies = Sidecar + WebRTC Gateway + TURN REST,主要組件:

  1. Selkies Controller / Operator:在 K8s 管理 Session 與 Pod 生命周期。
  2. Sidecar Container:與應用(Isaac Sim/Lab)放在同一個 Pod,負責 GStreamer 編碼、WebRTC 訊號交換。
  3. Ingress + Signaling Service:處理用戶端瀏覽器的 WebRTC 訊號(SDP/ICE Candidate)。
  4. TURN Server (coturn):在 NAT/防火牆環境下中繼流量。

流程:

Browser <──TLS──> Ingress/Signaling <──> Selkies Sidecar <──> Isaac Sim/Lab Container
                          │
                          ▼
                    TURN Server (必要時中繼)
  • 優勢:零客戶端安裝、直接瀏覽器操控 GPU 工作負載。
  • 特色:支援多協定(WebRTC DataChannel, RTP, gRPC-Web),並能做動態位元率調整。

B. WebRTC 核心概念

1) ICE(Interactive Connectivity Establishment)

  • WebRTC 找出「候選路徑」建立 P2P 連線(Host、Server Reflexive、Relay)。
  • ICE Candidate = IP:Port + 傳輸協定(UDP/TCP/TLS)。
  • 瀏覽器會逐個嘗試,直到成功建立通道。

2) STUN(Session Traversal Utilities for NAT)

  • 提供「外網可見 IP」的查詢服務。
  • 瀏覽器問 STUN Server:「我從外面看起來是誰?」
  • 適用於單層 NAT 或簡單防火牆場景。

3) TURN(Traversal Using Relays around NAT)

  • 當直接 P2P 無法建立,WebRTC 會透過 TURN 中繼所有封包。
  • 缺點:延遲與頻寬消耗增加;但在企業/多 NAT 環境下是必需品。
  • 常見部署:coturn + REST API(Selkies 內建支援)。

C. Codec 選擇:H.264 / VP9 / AV1

  1. H.264

    • 硬體編碼支援最廣(NVIDIA NVENC、Intel QuickSync)。
    • 延遲低,瀏覽器普遍相容。
    • 缺點:相同畫質下位元率較高。
  2. VP9

    • Google 主推,壓縮率優於 H.264。
    • 延遲略高,部分瀏覽器軟體解碼效能不佳。
  3. AV1

    • 新世代編解碼,壓縮效能最佳。
    • 但硬體編碼普及度仍低(新卡才有 AV1 NVENC)。
    • 適合「高畫質重現」而非「最低延遲」場景。

在 Isaac Sim/Isaac Lab 情境:建議預設用 H.264 (NVENC),兼顧延遲與相容性;VP9/AV1 可作選項。

D. 位元率與延遲控制

  • 位元率 (Bitrate)

    • WebRTC 允許動態調整,瀏覽器會依網路狀況回報。

    • Selkies 可配置 target/max bitrate,例如:

      • 1080p60 → 4~8 Mbps
      • 720p30 → 2~3 Mbps
  • 延遲 (Latency)

    • 端到端延遲 = 編碼時間 + 網路傳輸 + 解碼時間。
    • H.264 NVENC 通常 < 50 ms 編碼延遲。
    • TURN 中繼會增加 30~100 ms(依拓樸)。
  • 自適應 (ABR)

    • RTP/RTCP 報告驅動調整。
    • Selkies/GStreamer pipeline 可設定「低延遲模式」。

常見問題

  • 畫面卡頓:位元率過低或 TURN 瓶頸,需調整 pipeline 或換高頻寬路徑。
  • 黑畫面:編解碼器不相容;檢查瀏覽器是否支援 H.264/VP9/AV1。
  • 無法連線:STUN/TURN 未正確配置,或防火牆阻擋 3478/5349 埠。
  • 延遲高:確認是否走了 TURN;必要時部署就近的 TURN 節點。

#感想

あと二週間あるか


上一篇
Day 7 | 安全初探:Namespace, ResourceQuota, LimitRange, Pod Security簡介
系列文
K8s上的機器人沙盒8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言