Banana Studio
Guides · BS Manager

Tích hợp đầy đủ tính năng CamRelay vào Frigate NVR

Biến chiếc điện thoại Android cũ thành camera cho Frigate NVR: CamRelay phát luồng RTSP có tiếng, go2rtc trong Frigate nhận lại để ghi hình, xem trực tiếp và đàm thoại hai chiều. Hướng dẫn từng bước, kèm file config.yml hoàn chỉnh.

Tích hợp đầy đủ tính năng CamRelay vào Frigate NVR
On this page

Tích hợp đầy đủ tính năng CamRelay vào Frigate NVR

CamRelay đưa điện thoại Android vào Frigate qua một URL RTSP duy nhất. go2rtc, thành phần có sẵn trong Frigate, nhận luồng đó rồi phân phối cho bộ ghi, giao diện xem trực tiếp và kênh đàm thoại hai chiều.

CamRelay là ứng dụng của Banana Studio, biến điện thoại thành camera IP trong mạng LAN. Ứng dụng phát video H.264 hoặc H.265 kèm âm thanh Opus, G.711 hoặc AAC. Nó có giao diện web, hỗ trợ ONVIF và nhận tiếng nói ngược lại qua RTSP backchannel.

Luồng dữ liệu: điện thoại chạy CamRelay → go2rtc (trong Frigate) → ghi hình, xem trực tiếp có tiếng, đàm thoại hai chiều.

Cú pháp cấu hình dưới đây theo Frigate 0.16. Một số khóa có thể đổi ở phiên bản mới hơn, nên đối chiếu với tài liệu chính thức của Frigate.

Tính năng CamRelay trong Frigate

Bốn tính năng đầu đi vào Frigate qua go2rtc. Các tính năng còn lại chỉnh trong ứng dụng để luồng chạy ổn định 24/7.

Tính năng CamRelay Dùng trong Frigate Cấu hình ở đâu
Luồng RTSP H.264/H.265, độ phân giải và FPS theo camera của máy Ghi hình, nhận diện, xem trực tiếp go2rtc, Bước 2.1
Âm thanh G.711 (PCMU/PCMA), Opus hoặc AAC Nghe khi xem trực tiếp, ghi hình có tiếng Chọn codec trong app, Bước 2.2
Đàm thoại hai chiều (RTSP backchannel) Nút micro trong màn hình xem trực tiếp WebRTC + HTTPS, Bước 2.3
Lớp phủ ngày giờ, tên camera, IP, pin và nhiệt độ, tọa độ GPS, tốc độ Hiện sẵn trên hình Frigate ghi lại Trong app, Bước 1
Tự khởi động khi bật máy, làm tối màn hình, ngắt khi quá nóng hoặc pin yếu Giữ luồng không bị ngắt Trong app, Bước 1
Ghi MP4 trên điện thoại, quản lý file qua web Bản ghi dự phòng ngoài Frigate Trong app, Bước 1
Giao diện web Kiểm tra hình và tiếng, đổi cấu hình mà không dừng phát Bước 1

Chuẩn bị

Bạn cần:

  • Một máy chủ Frigate đã cài và đang chạy (xem hướng dẫn cài đặt Frigate), cùng mạng LAN với điện thoại.
  • Một điện thoại Android cài CamRelay, cắm sạc liên tục và được đặt IP tĩnh trên router.
  • Trên Android 17: cho phép CamRelay quyền truy cập mạng cục bộ (trong Android gọi là Thiết bị ở gần). Thiếu quyền này, Frigate không kết nối được tới điện thoại. Xem thêm bài viết về CamRelay 1.0.5.

Container Frigate phải mở các cổng sau để dùng đủ tính năng CamRelay:

Cổng Dùng cho
8971 Giao diện web HTTPS của Frigate, bắt buộc cho đàm thoại hai chiều
8554 Luồng RTSP phát lại của go2rtc
8555 TCP và UDP WebRTC: xem trực tiếp có tiếng và đàm thoại

Bước 1: Cấu hình CamRelay

CamRelay hiển thị theo ngôn ngữ của điện thoại; tên mục dưới đây là tên khi điện thoại đặt tiếng Việt. Lưu ý: vào Cài đặt sẽ dừng luồng đang phát. Khi CamRelay đã chạy, bạn có thể đổi cấu hình qua giao diện web mà không phải dừng.

1.1 Cổng RTSP

Mục Cổng máy chủ cho biết Cổng phát RTSP (mặc định 1935) và Cổng giao diện web (mặc định 8888). Giữ nguyên mặc định là được.

Mục Cổng máy chủ trong cài đặt CamRelay: cổng RTSP 1935 và cổng web 8888

1.2 Hình ảnh

  1. Ở Chọn camera, chọn camera sẽ dùng (camera sau thường cho hình đẹp hơn).
  2. Mở phần cài đặt riêng của camera đó, chọn Độ phân giải, Tốc độ khung hình (FPS) và Bitrate video. Danh sách độ phân giải và FPS tùy theo camera của máy.
  3. Ở Cài đặt video chung → Codec video, chọn H.264 để trình duyệt xem trực tiếp được.
  4. Để Khoảng cách khung hình chính (GOP) ở 1s (mặc định) để xem trực tiếp mở nhanh.

Chọn độ phân giải, FPS và bitrate cho từng camera

Chọn codec H.264 và khoảng keyframe 1 giây

Với giám sát, 1080p ở 15 FPS là đủ và nhẹ cho máy chủ Frigate. H.265 tiết kiệm băng thông nhưng Frigate phải chuyển mã khi xem trên trình duyệt (xem Bước 2.2).

1.3 Âm thanh

Ở Cài đặt âm thanh, bật công tắc Bật âm thanh. Codec âm thanh của luồng chọn ở mục Đàm thoại hai chiều → Codec âm thanh đàm thoại hai chiều. Mục này đặt codec cho cả tiếng phát ra lẫn đàm thoại:

  • G.711 ULAW: khuyến nghị cho Frigate, chạy thẳng ở cả MSE và WebRTC (xem Bước 2.2).
  • OPUS: mặc định từ Android 10, tiếng rõ hơn nhưng chỉ nghe được qua WebRTC.
  • G.711 ALAW: chỉ dùng khi thiết bị nghe bắt buộc A-law.
  • AAC: chỉ để phát, đàm thoại hai chiều cần chuyển mã.

Để Chế độ âm thanh đàm thoại hai chiều ở Đàm thoại: chế độ này có khử tiếng vọng nên đàm thoại không bị hú.

Chọn codec âm thanh và chế độ đàm thoại hai chiều

1.4 Lớp phủ, ghi hình và chạy 24/7

  • Lớp phủ video: bật ngày giờ, tên camera (Tên camera, để trống thì dùng tên máy), địa chỉ IP, pin và nhiệt độ, tọa độ GPS hoặc đồng hồ tốc độ. Lớp phủ được vẽ thẳng vào video nên hiện cả trên bản ghi của Frigate. Mặc định tất cả đều tắt.
  • Cài đặt ghi hình: bật công tắc Bật ghi hình nếu muốn có bản ghi dự phòng ngay trên điện thoại. File MP4 lưu ở Movies/CamRelay, chia đoạn theo Độ dài mỗi đoạn ghi (phút). Khi vượt Dung lượng tối đa (MB), file cũ nhất tự bị xóa.
  • An toàn & tự động hóa: bật Tự phát khi khởi động máy để CamRelay tự phát lại sau khi máy khởi động lại. Trên Android 10 trở lên, ứng dụng cần thêm quyền hiển thị trên ứng dụng khác. An toàn nhiệt độ và An toàn pin tạm dừng phát khi máy quá nóng hoặc pin yếu, rồi tự phát lại khi trở về bình thường.
  • Tối ưu hóa pin: để CamRelay ở trạng thái không bị tối ưu pin, tránh Android tắt ứng dụng khi chạy nền.

Các tùy chọn lớp phủ video

Ghi hình MP4 ngay trên điện thoại

Tự khởi động khi bật máy và ngắt khi quá nóng

1.5 Bắt đầu phát và lấy URL

Quay lại màn hình chính và bấm nút phát. Thanh trên cùng hiện độ phân giải, FPS, bitrate và codec đang dùng. Góc dưới hiện ba địa chỉ, mỗi địa chỉ có nút sao chép:

  • rtsp://<ip-điện-thoại>:1935/: URL RTSP để đưa vào Frigate.
  • http://<ip-điện-thoại>:8888: giao diện web của CamRelay.
  • http://<ip-điện-thoại>:8889/onvif/device_service: dịch vụ ONVIF.

CamRelay đang phát: URL RTSP, giao diện web và ONVIF ở góc dưới

Với camera đặt cố định, bấm biểu tượng mặt trăng (Làm tối màn hình) để phủ đen màn hình, giúp tiết kiệm pin và tránh lưu ảnh trên màn OLED. Chạm hai lần để sáng lại.

Các ví dụ dưới dùng URL rtsp://192.168.1.50:1935/; hãy thay bằng đúng URL mà CamRelay hiển thị. Phiên bản hiện tại của CamRelay chưa yêu cầu tài khoản cho RTSP, nên chỉ dùng trong mạng LAN tin cậy.

Sắp có: bản cập nhật tới của CamRelay sẽ cho phép đặt tên đăng nhập và mật khẩu để bảo vệ luồng RTSP. Khi đó, chỉ cần thêm thông tin đăng nhập vào URL trong go2rtc, ví dụ rtsp://user:[email protected]:1935/.

Có thể kiểm tra nhanh từ máy chủ Frigate bằng ffprobe:

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

Kết quả phải có một luồng video h264 và một luồng âm thanh (pcm_mulaw nếu chọn G.711 ULAW, opus nếu chọn OPUS).

Bước 2: Cấu hình go2rtc trong Frigate

go2rtc trong Frigate là nơi duy nhất kết nối tới điện thoại. Nó kéo luồng RTSP của CamRelay một lần, rồi phát lại cho ghi hình, nhận diện, xem trực tiếp (MSE, WebRTC) và đàm thoại hai chiều. Frigate chỉ đọc lại từ rtsp://127.0.0.1:8554/camrelay, nên điện thoại không phải phục vụ nhiều kết nối cùng lúc. Việc này giúp điện thoại mát và đỡ tốn pin hơn.

2.1 Khai báo luồng

Thêm khối go2rtc vào ~/frigate/config/config.yml:

go2rtc:
  streams:
    camrelay:                              # đặt trùng tên camera trong Frigate
      - rtsp://192.168.1.50:1935/          # URL CamRelay hiển thị
  webrtc:
    candidates:
      - 192.168.1.100:8555   # IP máy chủ Frigate
      - stun:8555
  • Chỉ cần một dòng RTSP. Với âm thanh G.711 hoặc Opus, go2rtc đưa thẳng video và âm thanh tới trình duyệt, không cần ffmpeg: để chuyển mã. Dòng RTSP này cũng mang kênh đàm thoại hai chiều.
  • webrtc.candidates bắt buộc khi chạy Docker thường; thiếu nó thì WebRTC và micro không chạy trong mạng LAN. Cổng 8555 TCP/UDP đã mở ở phần Chuẩn bị.
  • Nếu tên luồng trùng tên camera, Frigate tự dùng luồng đó để xem trực tiếp. Nếu khác tên, phải khai báo live.streams cho camera.

2.2 Codec và âm thanh

Đặt CamRelay ở video H.264. G.711 là lựa chọn âm thanh gọn nhất. Theo tài liệu Frigate, MSE (chế độ xem mặc định) phát AAC hoặc PCMA/PCMU, còn WebRTC (dùng khi đàm thoại) phát Opus hoặc PCMA/PCMU. Vì vậy chỉ G.711 chạy thẳng ở cả hai.

Âm thanh CamRelay MSE WebRTC Cần thêm trong go2rtc
G.711 ULAW / ALAW (PCMU/PCMA) Có Có Không
OPUS Không Có ffmpeg:camrelay#audio=aac nếu muốn nghe ở MSE
AAC Có Không ffmpeg:camrelay#audio=opus cho WebRTC

Opus cho tiếng rõ hơn G.711 (chuẩn thoại 8 kHz) nếu bạn chủ yếu xem qua WebRTC. Nếu buộc phải dùng H.265, thêm một dòng chuyển mã video và giữ nguyên dòng RTSP:

go2rtc:
  streams:
    camrelay:
      - rtsp://192.168.1.50:1935/
      - "ffmpeg:camrelay#video=h264#hardware"   # bản H.264 cho trình duyệt

2.3 Đàm thoại hai chiều

CamRelay luôn sẵn sàng nhận âm thanh ngược qua RTSP backchannel khi đang phát; không có công tắc nào phải bật. go2rtc tự mở kênh này từ dòng RTSP ở 2.1, không cần khai báo thêm.

Để nói, mở Frigate qua HTTPS cổng 8971, vào màn hình xem trực tiếp của camera và bấm micro; Frigate tự chuyển sang WebRTC. Tiếng phát ra từ loa điện thoại, âm lượng chỉnh ở Âm lượng phát trong CamRelay.

Nếu một ứng dụng khác cũng cần đàm thoại thẳng với điện thoại, thêm #backchannel=0 vào cuối URL RTSP để go2rtc không giữ kênh này.

2.4 Đưa luồng vào camera Frigate

Thêm khối cameras bên dưới khối go2rtc. Camera đọc lại luồng từ go2rtc chứ không nối thẳng tới điện thoại:

cameras:
  camrelay:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/camrelay   # luồng go2rtc ở 2.1
          input_args: preset-rtsp-restream
          roles:
            - record
            - detect   # Frigate bắt buộc phải có, không cần cấu hình thêm
    record:
      enabled: true

CamRelay phát một luồng duy nhất (không có luồng phụ), nên camera dùng luồng đó cho cả ghi hình và nhận diện.

Khởi động lại và kiểm tra:

docker compose restart frigate
docker logs -f frigate

Để kiểm tra riêng go2rtc, tạm thêm cổng 1984:1984 vào docker-compose rồi mở http://<ip-máy-chủ>:1984. Luồng camrelay phải có nguồn RTSP với video H264 và âm thanh PCMU/PCMA hoặc OPUS. CamRelay xuất hiện trên trang chủ Frigate là thành công.

Bước 3: File config.yml hoàn chỉnh

File dưới chỉ gồm phần cần cho CamRelay: luồng go2rtc, WebRTC, đăng nhập (để có HTTPS cho đàm thoại) và ghi hình có tiếng.

go2rtc:
  streams:
    camrelay:
      - rtsp://192.168.1.50:1935/   # URL CamRelay hiển thị, H.264 + G.711 ULAW
  webrtc:
    candidates:
      - 192.168.1.100:8555   # IP máy chủ Frigate
      - 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 bắt buộc phải có
    record:
      enabled: true
    live:
      streams:
        CamRelay: camrelay

version: 0.16-0

Xử lý sự cố thường gặp

Phần lớn lỗi khi đưa CamRelay vào Frigate nằm ở URL luồng, codec hoặc mạng.

Triệu chứng Nguyên nhân thường gặp Cách khắc phục
Camera hiện "No frames received" Sai URL hoặc cổng, CamRelay chưa bắt đầu phát, hoặc bị Android tắt khi chạy nền Chép lại URL từ màn hình chính CamRelay; kiểm tra bằng ffprobe; mở http://<ip>:1984 (nếu mở cổng) để xem go2rtc đã nhận luồng chưa
Không kết nối được, dù cùng Wi-Fi Điện thoại Android 17 chưa có quyền mạng cục bộ; router bật "client isolation"; mạng khách; VPN Cho phép CamRelay quyền Thiết bị ở gần; tắt client/AP isolation; đưa máy chủ và điện thoại vào cùng mạng chính
Hình bị giật, xé hình Mất gói UDP Thêm #transport=tcp vào URL trong go2rtc
Xem trực tiếp không chạy trên trình duyệt Luồng H.265 hoặc thiếu ứng viên WebRTC Chọn H.264 trong CamRelay, hoặc chuyển mã bằng ffmpeg:...#video=h264; khai báo webrtc.candidates
Mất kết nối định kỳ Wi-Fi chập chờn, Android tối ưu pin, điện thoại quá nóng Đặt IP tĩnh, cắm sạc, tắt tối ưu pin cho CamRelay, bật Tự phát khi khởi động máy, dùng nút làm tối màn hình; theo dõi nhiệt độ ở góc trên màn hình CamRelay; xem log ở Settings → System → Logs của Frigate
Không có âm thanh khi xem Công tắc Bật âm thanh đang tắt, hoặc xem bằng MSE khi CamRelay phát OPUS Bật âm thanh trong CamRelay; chọn G.711 ULAW để nghe được ở cả MSE và WebRTC
Micro không chạy Mở Frigate qua HTTP thay vì HTTPS, hoặc thiếu cổng 8555 Mở Frigate qua https://<ip>:8971; mở cổng 8555 TCP/UDP và khai báo webrtc.candidates

Khi hỏi trợ giúp trên GitHub Discussions của Frigate, hãy kèm file config, log khởi động và kết quả ffprobe của luồng CamRelay. Câu hỏi về CamRelay gửi qua mục Góp ý trong màn hình Giới thiệu của ứng dụng.

Tải CamRelay trên Google Play

Xem thêm tin tức, hướng dẫn và các ứng dụng khác của Banana Studio tại xnano.net.


Nguồn: tài liệu Live View của Frigate cho phần go2rtc; hướng dẫn sử dụng CamRelay và trang ứng dụng trên Google Play cho phần CamRelay.

Related app

CamRelay - RTSP Live IP Camera

Biến điện thoại Android của bạn thành một chiếc máy ảnh mạng RTSP mạnh mẽ.

Related posts