接上攝影機模組的 Raspberry Pi,正把畫面串流到後方的筆電

開源 · WebRTC · Raspberry Pi 與 Jetson

無國界遠端操作硬體

機器人、無人機和起重機像參加視訊會議一樣加入房間。所有人約 100 毫秒就看到即時畫面,一次由一個人操作。建立在開源的 pi-webrtc 上。

區網內,鏡頭至螢幕
低於 100 ms
硬體編碼
H.264 / AV1
可抽換的信令
MQTT · WHEP · SFU
開源授權
Apache-2.0

01

任何有鏡頭的設備,都能加入房間

Raspberry Pi、NVIDIA Jetson,或你現有的 RTSP 攝影機。一個 pi-webrtc 執行檔就能上線。

Raspberry Pi

libcamera · H.264 硬體編碼

NVIDIA Jetson

libargus · H.264 / AV1 硬體編碼

RTSP 攝影機

在攝影機旁重新編碼,降低碼率

robot arm on a factory line

機械手臂

人在另一個城市,也能維修產線、取放零件。每個動作都即時看得到。

drone over hills

無人機

用 LTE 或 5G 飛巡檢任務,整個團隊看同一個畫面。

gantry crane over containers

橋式起重機

港口與工廠的起重機,集中在一間控制室操作。

industrial camera

攝影機與巡檢

即時看機台、實驗室和工地,同時在裝置上留一份錄影。

Pi 5 與 Jetson Orin Nano 沒有硬體編碼器,會改用軟體編碼。兩個平台都支援 USB 攝影機。

實際運作

用網頁遙控無人機

瀏覽器裡的搖桿透過 WiFi 操控 PX4 無人機,DataChannel 和影像共用同一條連線。

裝置端物件追蹤

YOLOv11 與 NvDCF 在 Jetson Orin NX 上執行,直接畫在即時影像上。

一條串流,多個螢幕

Pi 5 透過 Cloudflare 串流到筆電和兩支手機,筆電上的碼表大約只慢 100 毫秒。

02

一台設備,多人觀看,一人操作

房間就像視訊會議。人和設備都能加入,大家一起看,同一時間由一個人控制設備。

共享房間

房間裡的每個人都看得到每台設備。一台設備最多可以加入 4 個房間。

一次一人操作

同一時間只有一個人控制設備,其他人排隊等候。

語音

房間裡的人可以互相說話,設備也會用喇叭播出他們的聲音。

控制走同一條連線

搖桿和鍵盤指令跟影像一起傳送,再由 IPC bridge 交給你的程式。

沒人看就不推流

閒置的設備只送出很小的 ping。有人加入,影像才開始傳。

你自己的 Cloudflare 帳號

一鍵部署 cf-sfu-worker,或先用我們的免費測試伺服器試試。Apache-2.0 開源。

Raspberry Pi 5 到瀏覽器約 50 毫秒

區網、100 fps,搖桿透過 DataChannel 操作。

03

信令

選擇裝置被連上的方式。多種傳輸方式可以同時啟用。

webrtc mqtt signaling

MQTT

需要: 一台 MQTT broker

從任何地方點對點觀看。裝置不需要公開網址 — 任何 broker 都能居中完成交握。

webrtc whep signaling

WHEP

需要: 不需要額外的伺服器 — 區網 IP 就夠了

裝置自己提供端點,所以任何 WHEP 播放器(包含 Home Assistant)都能用一個網址直接播放。

webrtc sfu signaling

SFU

需要: 部署在你 Cloudflare 帳號上的 cf-sfu-worker,或一台 LiveKit 伺服器

支援大量同時觀看。裝置只上傳一條串流,由 SFU 負責轉發,觀看人數不再是它要煩惱的事。

有了 SFU,板子只要上傳一次,任意數量的觀看者都能觀看,並透過 DataChannel 把控制訊息傳回去。
本機裝置透過 Unix socket 與 V4L2 和板子溝通;板子把串流發布到 SFU,再由 SFU 轉送給每位觀看者,glass to glass 100 到 200 毫秒。

Glass to glass:從鏡頭到觀看者螢幕。兩端靠近同一 Cloudflare 節點、120 fps 時約 100 毫秒;距離、網路與較低幀率會再增加。

04

為什麼選 pi-webrtc

攝影機板子本身就是 WebRTC 端點。媒體路徑上沒有任何閘道器。

這樣做的好處是:少一台要部署、要顧安全、要擴充的常駐主機。中間不會有任何轉碼或再串流,所以延遲貼近網路來回時間,不會一段一段疊上去。控制訊息走同一條連線上的 DataChannel 回傳,不需要再維護第二條路徑。而且同一個執行檔就涵蓋兩種型態 — 單一觀看者用點對點,需要多人時就接上 SFU。

傳統架構RTSP 攝影機 + 閘道器媒體路徑上多了一台常駐主機 — 又多一個要維運、要顧安全、要擴充的東西。
傳統 RTSP 攝影機與瀏覽器之間必須有閘道器或媒體伺服器,會多出 500 毫秒到 2 秒的延遲。
pi-webrtc板子本身就是端點板子只編碼一次,自己就會說 WebRTC — 直接送給觀看者,或送進 SFU 轉發給大量觀看者。
pi-webrtc 直接在板子上編碼,自己就會說 WebRTC:一條串流直接送到瀏覽器(一對一),或送進 SFU 轉發給大量觀看者(一對多)。
RTSP 攝影機RTSP 攝影機的流量帳單,也能變小接 IP 攝影機時,pi-webrtc 跑在攝影機旁邊的小板子上,是一個會重新編碼的閘道器。MediaMTX 這類 media server 會把碼流原封不動轉出去;想降低碼率,就得在旁邊另跑 FFmpeg,每種畫質一路固定轉碼。pi-webrtc 在裝置上設定碼率,並隨網路自動調整。監控牆上的小畫面只需要一小部分流量,每個月的雲端與行動網路費用跟著下降。

一台 1080p60 攝影機,每天 24 小時、連續 30 天的流量

  • media server 直通1080p60 · 8 Mbps2,592 GB
  • pi-webrtc · 監控牆上限 2 Mbps · 最高 1080p60648 GB−75%
  • pi-webrtc · 狀態縮圖上限 0.5 Mbps · 960×540、60 fps162 GB−94%

pi-webrtc 的數值是碼率上限,實際用量依畫面內容而定。解析度在 Jetson Orin NX 上實測,畫面大多靜止。

05Roadmap

下一步:AI 副駕駛

每次操作時,影像和操作者的指令本來就走在同一條連線上。我們計畫把兩者一起錄下來,在雲端訓練模型,讓它協助操作。

  1. 規劃中

    1錄製

    每次操作都把影像和指令同步存下來。

  2. 規劃中

    2訓練

    在雲端用你自己的操作紀錄訓練模型。

  3. 規劃中

    3副駕駛

    模型提出建議,或接手例行動作。人隨時可以接管。

06

幾分鐘就能試用

使用我們的免費測試伺服器。你需要一台接了鏡頭的 Raspberry Pi 或 Jetson。

裝置
  1. 1

    安裝

    安裝需要的函式庫,再下載 pi-webrtc 並解壓縮。

    sudo apt update
    sudo apt install libmosquitto1 pulseaudio libavformat61 libyaml-cpp0.8
    wget https://github.com/mazupo/pi-webrtc/releases/latest/download/pi-webrtc_raspios-trixie-arm64.tar.gz
    tar -xzf pi-webrtc_raspios-trixie-arm64.tar.gz
  2. 2

    執行

    開始串流到免費測試伺服器。房間名稱和裝置 ID 已經幫你產生好了。

    ./pi-webrtc --camera=libcamera:0 --uid=your-device --no-audio \
      --use-cloudflare --api-url=https://api.mazupo.com/sfu \
      --api-key=1L4-mUUztDWhzF_ORhPHb4xpQK2Y9bEgeif0pYn7PXI \
      --cloudflare-room=your-room
  3. 3

    觀看

    打開你的觀看連結,再按 Join。

    https://api.mazupo.com/sfu/?room=your-room&viewer_key=-706d13ForZLHmv6FwARf9ZgEEfO78AattyxWhNoHFo
    打開觀看頁

這是共用的測試伺服器,拿到你連結的人都能觀看。要有自己的伺服器,請把 cf-sfu-worker 部署到你的 Cloudflare 帳號。