Banana Studio
Guides · BS Manager

CamRelay の全機能を Frigate NVR で使う方法

余ったAndroidスマートフォンを Frigate NVR のカメラにしましょう。CamRelay が音声付きの RTSP を配信し、Frigate に内蔵された go2rtc がそれを受け取って、録画、音声付きライブビュー、 双方向通話に使います。完全な config.yml 付きで手順を順に説明します。

CamRelay の全機能を Frigate NVR で使う方法
On this page

CamRelay の全機能を Frigate NVR で使う方法

CamRelay を使えば、Android スマートフォンを 1 つの RTSP URL だけ で Frigate に追加できます。Frigate に内蔵されている go2rtc がそのストリームを受け取り、録画、ライブビュー、双方向通話のチャネルに振り分けます。

CamRelay は Banana Studio が提供するアプリで、スマートフォンをローカルネットワーク上の IP カメラにします。H.264 または H.265 の映像を、Opus、G.711、AAC の音声とともに配信します。Web インターフェースを備え、ONVIF に対応し、RTSP バックチャネルで視聴側からの音声も受け取れます。

データの流れ: CamRelay を実行するスマートフォン → go2rtc(Frigate 内)→ 録画、音声付きライブビュー、双方向通話。

以下の設定は Frigate 0.16 に基づいています。今後のバージョンでは一部のキーが変わる可能性があるため、Frigate 公式ドキュメント もご確認ください。

Frigate で使える CamRelay の機能

最初の 4 つの機能は go2rtc を通じて Frigate に届きます。残りはアプリ側で設定し、ストリームを 24 時間 365 日安定して動かすためのものです。

CamRelay の機能 Frigate での用途 設定場所
H.264/H.265 の RTSP ストリーム、スマートフォンのカメラに応じた解像度と FPS 録画、検出、ライブビュー go2rtc、手順 2.1
G.711(PCMU/PCMA)、Opus、AAC の音声 ライブビューと録画の音声 アプリでコーデックを選択、手順 2.2
双方向通話(RTSP バックチャネル) ライブビューのマイクボタン WebRTC + HTTPS、手順 2.3
日時、カメラ名、IP、バッテリーと温度、GPS 座標と速度のオーバーレイ Frigate が録画する映像に焼き込み アプリ、手順 1
起動時の自動開始、画面の減光、高温時やバッテリー低下時の一時停止 ストリームが途切れるのを防止 アプリ、手順 1
スマートフォン上での MP4 録画、ブラウザでのファイル管理 Frigate 以外のバックアップ録画 アプリ、手順 1
Web インターフェース ストリームを止めずに映像と音声を確認、設定を変更 手順 1

始める前に

必要なもの:

  • インストール済みで稼働中の Frigate サーバー(Frigate のインストールガイド を参照)。スマートフォンと同じローカルネットワーク上にあること。
  • CamRelay をインストールした Android スマートフォン。常に充電器につなぎ、ルーターで固定 IP アドレスを割り当てておきます。
  • Android 17 の場合:CamRelay に ローカルネットワークへのアクセス を許可してください(Android では 付近のデバイス として表示されます)。許可がないと、Frigate はスマートフォンに接続できません。詳しくは CamRelay 1.0.5 の記事 をご覧ください。

CamRelay のすべての機能を使うには、Frigate のコンテナで次のポートを公開する必要があります。

ポート 用途
8971 Frigate の HTTPS Web インターフェース。双方向通話に必須
8554 go2rtc の RTSP リストリーム
8555 TCP と UDP WebRTC:音声付きライブビューと双方向通話

手順 1:CamRelay を設定する

CamRelay はスマートフォンの言語に合わせて表示されます。以下の設定名は日本語表示のときのものです。注意:設定 を開くとストリームは停止します。CamRelay の配信中は、Web インターフェースから止めずに設定を変更できます。

1.1 RTSP ポート

サーバーポート の項目に RTSP配信ポート(初期値 1935)と Web UIポート(初期値 8888)が表示されます。初期値のままで問題ありません。

CamRelay の設定のサーバーポート:RTSP ポート 1935 と Web ポート 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 音声

オーディオ設定 で オーディオを有効化 をオンにします。ストリームの音声コーデックは 双方向通話 → 双方向通話音声コーデック で選びます。この 1 つの設定が、送出する音声と双方向通話の両方に適用されます。

  • G.711 ULAW:Frigate におすすめ。MSE と WebRTC のどちらでもそのまま再生できます(手順 2.2 を参照)。
  • OPUS:Android 10 以降の初期値。音声はよりクリアですが、WebRTC でしか再生できません。
  • G.711 ALAW:聞き取る側のデバイスが A-law を必要とする場合のみ。
  • AAC:再生専用。双方向通話にはトランスコードが必要です。

双方向通話音声モード は 音声通信 のままにしておきます。エコーキャンセルが働くため、双方向通話でハウリングが起きません。

音声コーデックと双方向通話モード

1.4 オーバーレイ、録画、24 時間運用

  • ビデオオーバーレイ:日時、カメラ名(カメラ名。空欄にすると端末名を使用)、IP アドレス、バッテリーと温度、GPS 座標、スピードメーターを表示できます。オーバーレイは映像そのものに描き込まれるため、Frigate の録画にも残ります。初期状態ではすべてオフです。
  • 録画設定:スマートフォンにもバックアップを残すなら 録画を有効化 をオンにします。MP4 ファイルは Movies/CamRelay に保存され、録画分割時間(分)ごとに分割されます。最大ストレージ容量 (MB) に達すると、古いファイルから削除されます。
  • 安全 & 自動化:端末起動時に自動開始 をオンにすると、スマートフォンの再起動後に CamRelay が自動で配信を再開します。Android 10 以降では、他のアプリの上に重ねて表示する権限も必要です。温度保護 と バッテリー保護 は、スマートフォンが熱くなりすぎたときやバッテリーが少なくなったときに配信を一時停止し、正常に戻ると再開します。
  • バッテリーの最適化:CamRelay のバッテリー最適化がオフになっていることを確認してください。オンのままだと、Android がバックグラウンドで CamRelay を停止することがあります。

ビデオオーバーレイのオプション

スマートフォン上での MP4 録画

起動時の自動開始と温度保護

1.5 配信を開始して URL を取得する

メイン画面に戻り、再生ボタンをタップします。上部のバーには、使用中の解像度、FPS、ビットレート、コーデックが表示されます。下の隅には 3 つのアドレスがコピーボタン付きで表示されます。

  • rtsp://<phone-ip>:1935/:Frigate 用の RTSP URL。
  • http://<phone-ip>:8888:CamRelay の Web インターフェース。
  • http://<phone-ip>:8889/onvif/device_service:ONVIF サービス。

配信中の CamRelay:下部に RTSP、Web、ONVIF のアドレス

カメラを固定して使う場合は、月 のアイコン(画面を減光)をタップして画面を真っ暗にしましょう。電力を節約でき、OLED 画面の焼き付きも防げます。ダブルタップで元に戻ります。

以下の例では rtsp://192.168.1.50:1935/ を使っています。CamRelay に表示される URL に置き換えてください。現在のバージョンの CamRelay は RTSP でまだログインを求めないため、信頼できるネットワーク内でのみ使用してください。

近日公開: 次回の CamRelay アップデートでは、ユーザー名とパスワードを設定して RTSP ストリームを保護できるようになります。その場合は go2rtc の URL に追加するだけです。例: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 だけです。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 に表示される URL
  webrtc:
    candidates:
      - 192.168.1.100:8555   # Frigate サーバーの IP
      - stun:8555
  • RTSP の行は 1 行で十分です。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 非対応 対応 MSE で聞くには ffmpeg:camrelay#audio=aac
AAC 対応 非対応 WebRTC 用に ffmpeg:camrelay#audio=opus

主に 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 バックチャネルで音声を受け取れる状態にあり、オンにするスイッチはありません。go2rtc は 2.1 の RTSP の行からこのチャネルを開くため、追加の設定は不要です。

話すときは、ポート 8971 の HTTPS で Frigate を開き、カメラのライブビューでマイクを押します。Frigate は自動的に WebRTC に切り替わります。声はスマートフォンのスピーカーから、CamRelay の 再生音量 で設定した音量で流れます。

ほかのアプリからもスマートフォンと直接通話する必要がある場合は、RTSP URL の末尾に #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 が送るのは 1 つのストリームだけ(サブストリームなし)なので、カメラは録画と検出の両方にそれを使います。

再起動して確認します。

docker compose restart frigate
docker logs -f frigate

go2rtc 単体で確認するには、docker-compose に一時的にポート 1984:1984 を追加し、http://<server-ip>:1984 を開きます。camrelay ストリームに、H264 映像と PCMU/PCMA または OPUS 音声の RTSP ソースがあれば OK です。Frigate のホーム画面に CamRelay が表示されれば完了です。

手順 3:完全な config.yml

以下のファイルには、CamRelay に必要なものだけが含まれています。go2rtc ストリーム、WebRTC、ログイン(双方向通話に必要な HTTPS のため)、音声付き録画です。

go2rtc:
  streams:
    camrelay:
      - rtsp://192.168.1.50:1935/   # CamRelay に表示される URL、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 に追加するときの問題の多くは、ストリームの URL、コーデック、ネットワークのいずれかが原因です。

症状 よくある原因 対処法
カメラに「No frames received」と表示される URL やポートの誤り、CamRelay が配信していない、Android がバックグラウンドで停止した CamRelay のメイン画面から URL をコピーし直す。ffprobe で確認する。http://<ip>:1984(公開している場合)を開き、go2rtc がストリームを受信しているか確認する
同じ Wi-Fi でも接続できない Android 17 のスマートフォンでローカルネットワークへのアクセスが未許可、ルーターの「クライアント分離」、ゲストネットワーク、VPN CamRelay に 付近のデバイス を許可する。クライアント/AP 分離をオフにする。サーバーとスマートフォンを同じメインネットワークに接続する
映像がカクつく、乱れる UDP パケットの損失 go2rtc の URL に #transport=tcp を追加する
ブラウザでライブビューが再生されない H.265 ストリーム、または WebRTC candidates の未設定 CamRelay で H.264 を選ぶか、ffmpeg:...#video=h264 でトランスコードする。webrtc.candidates を設定する
ときどき接続が切れる 不安定な Wi-Fi、Android のバッテリー最適化、スマートフォンの過熱 固定 IP を使う。スマートフォンを充電したままにする。CamRelay のバッテリー最適化をオフにする。端末起動時に自動開始 をオンにする。減光ボタンを使う。CamRelay 画面上部の温度を確認する。Frigate のログを Settings → System → Logs で確認する
ライブビューで音が出ない オーディオを有効化 がオフ、または CamRelay が OPUS を送っているのに MSE で視聴している CamRelay で音声をオンにする。MSE と WebRTC の両方で音を聞くには G.711 ULAW を選ぶ
マイクが使えない Frigate を HTTPS ではなく HTTP で開いている、またはポート 8555 が未公開 Frigate を https://<ip>:8971 で開く。ポート 8555 TCP/UDP を公開し、webrtc.candidates を設定する

Frigate の GitHub Discussions で質問するときは、設定ファイル、起動時のログ、CamRelay ストリームの ffprobe の出力を添えてください。CamRelay に関するご質問は、アプリの このアプリについて 画面で フィードバック をタップしてお送りください。

Google Play で CamRelay を入手

Banana Studio のニュース、ガイド、アプリの詳細は xnano.net をご覧ください。


出典:go2rtc については Frigate Live View ドキュメント、CamRelay については CamRelay ユーザーガイド と Google Play のストアページ。

Related app

CamRelay - RTSPライブIPカメラ

Androidスマートフォンを高性能なRTSPネットワークカメラに変身させましょう。

Related posts