Banana Studio
Guides · BS Manager

在 Frigate NVR 中使用 CamRelay 的所有功能

把閒置的 Android 手機變成 Frigate NVR 的攝影機:CamRelay 串流含聲音的 RTSP, Frigate 內建的 go2rtc 接收後用於錄影、有聲即時影像和雙向對講。 逐步說明,並附上完整的 config.yml。

在 Frigate NVR 中使用 CamRelay 的所有功能
On this page

在 Frigate NVR 中使用 CamRelay 的所有功能

CamRelay 只要一個 RTSP 網址,就能把 Android 手機接入 Frigate。Frigate 內建的 go2rtc 會接收這個串流,再分享給錄影器、即時影像和雙向對講頻道。

CamRelay 是 Banana Studio 推出的 App,能把手機變成區域網路中的 IP 攝影機。它可以串流 H.264 或 H.265 影像,搭配 Opus、G.711 或 AAC 音訊;提供網頁介面、支援 ONVIF,也能透過 RTSP backchannel 接收觀看端傳回的聲音。

資料流程: 執行 CamRelay 的手機 → go2rtc(在 Frigate 內)→ 錄影、有聲即時影像、雙向對講。

以下設定以 Frigate 0.16 為準。後續版本可能會變更部分設定鍵,請一併參考 Frigate 官方文件。

CamRelay 在 Frigate 中的功能

前四項功能透過 go2rtc 進入 Frigate;其餘功能在 App 中設定,讓串流全天候穩定運作。

CamRelay 功能 在 Frigate 中的用途 設定位置
H.264/H.265 RTSP 串流,解析度與 FPS 依手機相機而定 錄影、偵測、即時影像 go2rtc,步驟 2.1
G.711(PCMU/PCMA)、Opus 或 AAC 音訊 即時影像與錄影中的聲音 在 App 中選擇編解碼器,步驟 2.2
雙向對講(RTSP backchannel) 即時影像中的麥克風按鈕 WebRTC + HTTPS,步驟 2.3
日期時間、相機名稱、IP、電池與溫度、GPS 座標與速度疊加資訊 直接燒錄在 Frigate 錄下的畫面上 在 App 中,步驟 1
開機自動啟動、調暗螢幕、過熱或電量低時暫停 避免串流中斷 在 App 中,步驟 1
在手機上錄製 MP4、透過瀏覽器管理檔案 Frigate 以外的備份錄影 在 App 中,步驟 1
網頁介面 不必停止串流就能檢查畫面和聲音、變更設定 步驟 1

開始之前

你需要:

  • 一台已安裝並正在執行的 Frigate 伺服器(請參閱 Frigate 安裝指南),且與手機位於同一個區域網路。
  • 一支已安裝 CamRelay 的 Android 手機,持續接上充電器,並在路由器上設定固定 IP 位址。
  • 在 Android 17 上:允許 CamRelay 存取區域網路(Android 將它列在鄰近裝置中)。沒有這項權限,Frigate 就無法連線到手機。詳情請參閱 CamRelay 1.0.5 文章。

Frigate 容器必須開放以下連接埠,才能使用 CamRelay 的所有功能:

連接埠 用途
8971 Frigate 的 HTTPS 網頁介面,雙向對講必須使用
8554 go2rtc 的 RTSP 轉播串流
8555 TCP 與 UDP WebRTC:有聲即時影像與雙向對講

步驟 1:設定 CamRelay

CamRelay 會依照手機的語言顯示;以下的設定名稱是繁體中文介面的名稱。注意:開啟設定會停止串流。CamRelay 執行後,你可以透過網頁介面變更設定,不必停止串流。

1.1 RTSP 連接埠

伺服器連接埠區塊會顯示 RTSP 串流連接埠(預設 1935)和網頁介面連接埠(預設 8888)。使用預設值即可。

CamRelay 設定中的伺服器連接埠:RTSP 連接埠 1935 與網頁連接埠 8888

1.2 影像

  1. 在選擇相機中,選擇要使用的相機(後置相機的畫質通常較好)。
  2. 開啟該相機的個別設定,選擇解析度、影格率 (FPS) 和視訊位元率。可選的解析度與影格率依手機相機而定。
  3. 在全域視訊設定 → 視訊編解碼器中選擇 H.264,瀏覽器才能播放即時影像。
  4. 將關鍵影格間隔 (GOP) 保持在 1s(預設值),即時影像才能快速開啟。

每個相機的解析度、FPS 與位元率

H.264 視訊編解碼器與 1 秒關鍵影格間隔

監控用途使用 1080p、15 FPS 就足夠,Frigate 伺服器的負擔也較輕。H.265 可以節省頻寬,但 Frigate 必須轉碼才能在瀏覽器中播放(請參閱步驟 2.2)。

1.3 音訊

在音訊設定中開啟啟用音訊。串流的音訊編解碼器在雙向對講 → 雙向對講音訊編解碼器中選擇。這一個設定同時套用於送出的聲音和雙向對講:

  • G.711 ULAW:建議用於 Frigate,在 MSE 和 WebRTC 中都能直接播放(請參閱步驟 2.2)。
  • OPUS:Android 10 起的預設值,聲音較清晰,但只能透過 WebRTC 播放。
  • G.711 ALAW:只有在收聽裝置要求 A-law 時才使用。
  • AAC:僅供播放,雙向對講需要轉碼。

將雙向對講音訊模式保持為語音通訊:此模式具備回音消除,雙向對講時不會產生嘯叫。

音訊編解碼器與雙向對講模式

1.4 疊加資訊、錄影與全天候運作

  • 視訊重疊資訊:可顯示日期時間、相機名稱(相機名稱,留空則使用裝置名稱)、IP 位址、電池與溫度、GPS 座標或速度表。疊加資訊直接繪製在影像中,因此也會出現在 Frigate 的錄影裡。預設全部關閉。
  • 錄影設定:如果想在手機上保留備份,請開啟啟用錄影。MP4 檔案會存放在 Movies/CamRelay,並依錄影分段時間(分鐘)分段。達到最大儲存空間 (MB) 時,會刪除最舊的檔案。
  • 安全與自動化:開啟裝置開機時自動啟動,手機重新啟動後 CamRelay 就會自動恢復串流。在 Android 10 以上版本,App 還需要「顯示在其他應用程式上層」的權限。溫度安全保護和電池安全保護會在手機過熱或電量不足時暫停串流,並在恢復正常後繼續。
  • 電池最佳化:請確認 CamRelay 的電池最佳化已關閉,以免 Android 在背景停止它。

視訊重疊資訊選項

在手機上錄製 MP4

開機自動啟動與溫度安全保護

1.5 開始串流並取得網址

回到主畫面,點選播放按鈕。頂端的列會顯示目前使用的解析度、FPS、位元率和編解碼器。下方角落會顯示三個位址,各附有一個複製按鈕:

  • rtsp://<phone-ip>:1935/:給 Frigate 使用的 RTSP 網址。
  • http://<phone-ip>:8888:CamRelay 的網頁介面。
  • http://<phone-ip>:8889/onvif/device_service:ONVIF 服務。

串流中的 CamRelay:下方顯示 RTSP、網頁與 ONVIF 位址

如果攝影機固定在同一個位置,點選月亮圖示(調暗螢幕)即可讓螢幕全黑,既省電又能避免 OLED 螢幕烙印。點兩下即可喚醒。

以下範例使用 rtsp://192.168.1.50:1935/,請換成 CamRelay 顯示的網址。目前版本的 CamRelay 尚未要求 RTSP 登入,請只在你信任的網路中使用。

即將推出: 下一次 CamRelay 更新將可設定使用者名稱和密碼來保護 RTSP 串流。屆時只要把它們加到 go2rtc 的網址中即可,例如 rtsp://user:[email protected]:1935/。

你可以在 Frigate 伺服器上用 ffprobe 檢查串流:

ffprobe -rtsp_transport tcp rtsp://192.168.1.50:1935/

輸出應列出一個 h264 視訊串流和一個音訊串流(G.711 ULAW 為 pcm_mulaw,OPUS 為 opus)。

步驟 2:在 Frigate 中設定 go2rtc

只有 Frigate 內的 go2rtc 會連線到手機。它只拉取一次 CamRelay 的 RTSP 串流,再分享給錄影、偵測、即時影像(MSE、WebRTC)和雙向對講。Frigate 本身從 rtsp://127.0.0.1:8554/camrelay 讀取,因此手機不必同時處理多個連線,既能降低發熱,也更省電。

2.1 新增串流

在 ~/frigate/config/config.yml 中新增 go2rtc 區塊:

go2rtc:
  streams:
    camrelay:                              # 與 Frigate 攝影機同名
      - rtsp://192.168.1.50:1935/          # CamRelay 顯示的網址
  webrtc:
    candidates:
      - 192.168.1.100:8555   # Frigate 伺服器 IP
      - stun:8555
  • 一行 RTSP 就夠了。使用 G.711 或 Opus 音訊時,go2rtc 會將影像和聲音直接傳給瀏覽器,不需要 ffmpeg: 轉碼。同一行 RTSP 也承載雙向對講頻道。
  • 以一般 Docker 執行時必須設定 webrtc.candidates;少了它,WebRTC 和麥克風在區域網路中都無法運作。連接埠 8555 TCP/UDP 已在「開始之前」開放。
  • 串流名稱與攝影機名稱相同時,Frigate 會自動用它來顯示即時影像;否則請為攝影機設定 live.streams。

2.2 編解碼器與音訊

將 CamRelay 的影像設為 H.264。音訊選 G.711 最簡單。根據 Frigate 文件,MSE(預設的即時影像)可播放 AAC 或 PCMA/PCMU,WebRTC(用於雙向對講)可播放 Opus 或 PCMA/PCMU。只有 G.711 在兩者中都能直接使用。

CamRelay 音訊 MSE WebRTC go2rtc 額外設定行
G.711 ULAW / ALAW (PCMU/PCMA) 是 是 無
OPUS 否 是 ffmpeg:camrelay#audio=aac,才能在 MSE 中聽到
AAC 是 否 ffmpeg:camrelay#audio=opus,供 WebRTC 使用

如果你主要透過 WebRTC 觀看,Opus 的聲音比 G.711(8 kHz 電話音質)更清晰。如果一定要使用 H.265,請加入一行影像轉碼,並保留 RTSP 那一行:

go2rtc:
  streams:
    camrelay:
      - rtsp://192.168.1.50:1935/
      - "ffmpeg:camrelay#video=h264#hardware"   # 給瀏覽器用的 H.264 副本

2.3 雙向對講

串流期間,CamRelay 隨時都能透過 RTSP backchannel 接收音訊,不需要開啟任何開關。go2rtc 會從 2.1 的 RTSP 設定行開啟這個頻道,無須額外設定。

要說話時,請透過連接埠 8971 以 HTTPS 開啟 Frigate,進入攝影機的即時影像並按下麥克風;Frigate 會自動切換到 WebRTC。你的聲音會從手機喇叭播出,音量依 CamRelay 中的播放音量設定。

如果還有其他 App 需要直接與手機對講,請在 RTSP 網址結尾加上 #backchannel=0,讓 go2rtc 不佔用這個頻道。

2.4 將攝影機加入 Frigate

在 go2rtc 區塊下方新增 cameras 區塊。攝影機會從 go2rtc 讀取串流,而不是直接連線到手機:

cameras:
  camrelay:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/camrelay   # 2.1 的 go2rtc 串流
          input_args: preset-rtsp-restream
          roles:
            - record
            - detect   # Frigate 必須設定,不需其他設定
    record:
      enabled: true

CamRelay 只送出單一串流(沒有子串流),因此攝影機會同時用它來錄影和偵測。

重新啟動並檢查:

docker compose restart frigate
docker logs -f frigate

若要單獨檢查 go2rtc,可暫時在 docker-compose 中加入連接埠 1984:1984,然後開啟 http://<server-ip>:1984。camrelay 串流應有一個 RTSP 來源,包含 H264 影像和 PCMU/PCMA 或 OPUS 音訊。當 CamRelay 出現在 Frigate 首頁上,就大功告成了。

步驟 3:完整的 config.yml

以下檔案只包含 CamRelay 所需的內容:go2rtc 串流、WebRTC、登入(為了雙向對講所需的 HTTPS)和有聲錄影。

go2rtc:
  streams:
    camrelay:
      - rtsp://192.168.1.50:1935/   # CamRelay 顯示的網址,H.264 + G.711 ULAW
  webrtc:
    candidates:
      - 192.168.1.100:8555   # Frigate 伺服器 IP
      - stun:8555

auth:
  enabled: true

cameras:
  camrelay:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/camrelay
          input_args: preset-rtsp-restream
          roles: [record, detect]   # detect:Frigate 必須設定
    record:
      enabled: true
    live:
      streams:
        CamRelay: camrelay

version: 0.16-0

疑難排解

將 CamRelay 加入 Frigate 時遇到的問題,大多出在串流網址、編解碼器或網路。

症狀 常見原因 解決方法
攝影機顯示「No frames received」 網址或連接埠錯誤、CamRelay 未在串流,或 Android 在背景停止了它 從 CamRelay 主畫面重新複製網址;用 ffprobe 檢查;開啟 http://<ip>:1984(若已開放)確認 go2rtc 是否收到串流
即使在同一個 Wi-Fi 也無法連線 Android 17 手機未允許存取區域網路;路由器開啟「用戶端隔離」;訪客網路;VPN 允許 CamRelay 使用鄰近裝置;關閉用戶端/AP 隔離;讓伺服器和手機位於同一個主網路
畫面卡頓或破圖 UDP 封包遺失 在 go2rtc 的網址加上 #transport=tcp
瀏覽器無法播放即時影像 H.265 串流,或缺少 WebRTC candidates 在 CamRelay 中選擇 H.264,或用 ffmpeg:...#video=h264 轉碼;設定 webrtc.candidates
連線不時中斷 Wi-Fi 不穩定、Android 電池最佳化、手機過熱 使用固定 IP、讓手機持續充電、關閉 CamRelay 的電池最佳化、開啟裝置開機時自動啟動、使用調暗螢幕按鈕;留意 CamRelay 畫面頂端的溫度;在 Frigate 的 Settings → System → Logs 查看記錄
即時影像沒有聲音 啟用音訊已關閉,或以 MSE 觀看而 CamRelay 送出 OPUS 在 CamRelay 中開啟音訊;選擇 G.711 ULAW,即可在 MSE 和 WebRTC 中都聽到聲音
麥克風無法使用 以 HTTP 而非 HTTPS 開啟 Frigate,或未開放連接埠 8555 以 https://<ip>:8971 開啟 Frigate;開放連接埠 8555 TCP/UDP 並設定 webrtc.candidates

在 Frigate 的 GitHub Discussions 尋求協助時,請附上設定檔、啟動記錄,以及 CamRelay 串流的 ffprobe 輸出。CamRelay 相關問題,請在 App 的關於畫面點選意見回饋。

在 Google Play 下載 CamRelay

更多 Banana Studio 的最新消息、指南和 App,請造訪 xnano.net。


資料來源:go2rtc 部分參考 Frigate Live View 文件;CamRelay 部分參考 CamRelay 使用者指南 與 Google Play 商店頁面。

Related app

CamRelay - RTSP 即時 IP 攝影機

將您的 Android 手機變成強大的 RTSP 網路攝影機。

Related posts