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 URL 하나만으로 Android 휴대폰을 Frigate에 연결합니다. Frigate에 내장된 go2rtc가 이 스트림을 받아 녹화기, 실시간 보기, 양방향 통화 채널에 나눠 줍니다.

CamRelay는 Banana Studio에서 만든 앱으로, 휴대폰을 로컬 네트워크의 IP 카메라로 바꿔 줍니다. H.264 또는 H.265 영상을 Opus, G.711, AAC 오디오와 함께 스트리밍합니다. 웹 인터페이스를 제공하고 ONVIF를 지원하며, RTSP 백채널을 통해 시청자의 음성도 받을 수 있습니다.

데이터 흐름: CamRelay를 실행하는 휴대폰 → go2rtc(Frigate 내부) → 녹화, 소리가 나오는 실시간 보기, 양방향 통화.

아래 설정은 Frigate 0.16 기준입니다. 이후 버전에서는 일부 키가 바뀔 수 있으니 Frigate 공식 문서도 확인하세요.

Frigate에서 쓸 수 있는 CamRelay 기능

처음 네 가지 기능은 go2rtc를 거쳐 Frigate에 전달됩니다. 나머지는 앱에서 설정하며, 스트림이 24시간 내내 끊기지 않도록 해 줍니다.

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단계
웹 인터페이스 스트림을 멈추지 않고 영상과 소리 확인, 설정 변경 1단계

시작하기 전에

필요한 것:

  • 설치되어 실행 중인 Frigate 서버(Frigate 설치 가이드 참고). 휴대폰과 같은 로컬 네트워크에 있어야 합니다.
  • CamRelay가 설치된 Android 휴대폰. 항상 충전기에 연결해 두고, 공유기에서 고정 IP 주소를 지정해 두세요.
  • Android 17에서는 CamRelay에 로컬 네트워크 접근을 허용하세요(Android에서는 근처 기기로 표시됩니다). 이 권한이 없으면 Frigate가 휴대폰에 연결할 수 없습니다. 자세한 내용은 CamRelay 1.0.5 소식을 참고하세요.

CamRelay의 모든 기능을 사용하려면 Frigate 컨테이너에서 다음 포트를 열어야 합니다.

포트 용도
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 오버레이, 녹화, 24시간 운영

  • 비디오 오버레이: 날짜와 시간, 카메라 이름(카메라 이름, 비워 두면 기기 이름 사용), IP 주소, 배터리와 온도, GPS 좌표 또는 속도계를 표시합니다. 오버레이는 영상 자체에 그려지므로 Frigate 녹화에도 나타납니다. 기본적으로 모두 꺼져 있습니다.
  • 녹화 설정: 휴대폰에 백업본을 남기려면 녹화 기능 활성화를 켭니다. MP4 파일은 Movies/CamRelay에 저장되며 녹화 분할 단위 시간(분)마다 나뉩니다. 최대 저장 용량 (MB) 한도에 도달하면 가장 오래된 파일부터 삭제됩니다.
  • 안전 및 자동화: 기기 부팅 시 자동 시작을 켜면 휴대폰이 다시 시작된 뒤 CamRelay가 자동으로 스트리밍을 다시 시작합니다. Android 10 이상에서는 다른 앱 위에 표시 권한도 필요합니다. 발열 안전 보호와 배터리 안전 보호는 휴대폰이 너무 뜨거워지거나 배터리가 부족할 때 스트림을 일시 중지하고, 정상으로 돌아오면 다시 시작합니다.
  • 배터리 최적화: Android가 백그라운드에서 CamRelay를 종료하지 않도록 CamRelay의 배터리 최적화가 꺼져 있는지 확인하세요.

비디오 오버레이 옵션

휴대폰에서 MP4 녹화

부팅 시 자동 시작과 발열 안전 보호

1.5 스트리밍 시작 및 URL 확인

메인 화면으로 돌아가 재생 버튼을 탭합니다. 상단 바에는 사용 중인 해상도, FPS, 비트레이트, 코덱이 표시됩니다. 아래쪽 모서리에는 복사 버튼이 있는 주소 세 개가 표시됩니다.

  • rtsp://<phone-ip>:1935/: Frigate용 RTSP URL.
  • http://<phone-ip>:8888: CamRelay 웹 인터페이스.
  • http://<phone-ip>:8889/onvif/device_service: ONVIF 서비스.

스트리밍 중인 CamRelay: 하단의 RTSP, 웹, 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 줄 하나면 충분합니다. 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의 재생 음량에서 설정한 음량으로 휴대폰 스피커에서 나옵니다.

다른 앱도 휴대폰과 직접 통화해야 한다면, go2rtc가 채널을 점유하지 않도록 RTSP URL 끝에 #backchannel=0을 붙이세요.

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 스트림에 H264 비디오와 PCMU/PCMA 또는 OPUS 오디오가 있는 RTSP 소스가 보여야 합니다. 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가 열려 있지 않음 https://<ip>:8971로 Frigate 열기, 포트 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