GN⁺: 라즈베리 파이 기반 오픈 소스 보안 카메라
(github.com/TzuHuanTai)- Raspberry Pi를 저지연 홈 보안 카메라로 변환하는 프로젝트
- v4l2DMA 하드웨어 인코더와 WebRTC를 사용
- 미디어 서버 없이 순수 P2P 기반 카메라로 비디오 재생 및 다운로드 가능
- 여러 사용자가 동시에 라이브 스트림 시청 가능
- Raspberry Pi 5 또는 다른 SBC는 v4l2 하드웨어 인코딩을 지원하지 않음, 소프트웨어 인코딩 모드에서 실행 필요
사용 방법
- 최신 바이너리 파일을 Releases에서 다운로드
- Pi Camera 앱 설치 및 지침 따르기
하드웨어 요구 사항
- Raspberry Pi (Zero 2W 이상)
- CSI 카메라 모듈
- 최소 4GB의 micro SD 카드
- USB 디스크 및 Micro-USB Male to USB-A Female 어댑터
환경 설정
- Raspberry Pi Imager를 사용하여 Lite OS (Bookworm 64-bit)를 micro SD 카드에 쓰기
- 필수 라이브러리 설치
sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6
-
/boot/firmware/config.txt
에 아래 내용 추가하여 Raspberry Pi 하드웨어 활성화camera_auto_detect=0 start_x=1 gpu_mem=16
camera_auto_detect=0
설정하여 v4l2로 카메라 읽기 - USB 디스크 마운트 [참조]
- 비디오 녹화를 원하지 않으면 이 단계를 건너뛰고 실행 시
record_path
플래그 설정하지 않기 - 디스크 드라이브가 감지되면 자동으로
/mnt/ext_disk
에 마운트됨
sudo apt-get install autofs echo '/- /etc/auto.usb --timeout=5' | sudo tee -a /etc/auto.master > /dev/null echo '/mnt/ext_disk -fstype=auto,nofail,nodev,nosuid,noatime,umask=000 :/dev/sda1' | sudo tee -a /etc/auto.usb > /dev/null sudo systemctl restart autofs
- 비디오 녹화를 원하지 않으면 이 단계를 건너뛰고 실행 시
애플리케이션 실행
- 현재 MQTT가 유일한 신호 메커니즘으로 사용되므로, 애플리케이션 시작 전에 MQTT 서버 준비 필요
- 애플리케이션이 LAN 내에서만 사용될 경우, 같은 Pi에 Mosquitto와 같은 MQTT 서버 설치 가능
- 원격 액세스가 필요한 경우, 클라우드 기반 MQTT 서버 사용 권장 (예: HiveMQ, EXMQ)
- 원격 신호 서버에 모바일 데이터로 접근하려면 DDNS 및 포트 포워딩 설정 필요
실행
-
pi_webrtc
바이너리 파일을-h
플래그와 함께 실행하여 모든 옵션 확인 가능 - 설정을 적용하여 애플리케이션 시작
힌트 1: Pi 5는 하드웨어 인코딩을 지원하지 않으므로pulseaudio --start /path/to/pi_webrtc --device=/dev/video0 --fps=30 --width=1280 --height=960 --v4l2_format=h264 --hw_accel --mqtt_host=example.s1.eu.hivemq.cloud --mqtt_port=8883 --mqtt_username=hakunamatata --mqtt_password=Wonderful --uid=home-pi-zero2w --record_path=/mnt/ext_disk/video/
--hw_accel
플래그 제거하고--v4l2_format
을mjpeg
로 설정. 비디오 인코딩은 OpenH264로 처리됨 힌트 2:1920x1080
설정 시 하드웨어 디코더 펌웨어가1920x1088
로 변경되지만, isp/인코더가 조정되지 않아 메모리 범위를 벗어남.1920x1088
로 설정하면 문제 없음
Linux 서비스로 실행
1. pulseaudio
를 시스템 전역 데몬으로 실행 [참조]
-
/etc/systemd/system/pulseaudio.service
파일 생성[Unit] Description= Pulseaudio Daemon After=rtkit-daemon.service systemd-udevd.service dbus.service [Service] Type=simple ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disallow-module-loading Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
- 클라이언트 설정에
autospawn = no
추가echo 'autospawn = no' | sudo tee -a /etc/pulse/client.conf > /dev/null
- root를 pulse 그룹에 추가
sudo adduser root pulse-access
- 서비스 활성화 및 시작
sudo systemctl daemon-reload sudo systemctl enable pulseaudio.service sudo systemctl start pulseaudio.service
2. pi_webrtc
실행 및 재부팅 시 자동 시작 설정
-
/etc/systemd/system/pi-webrtc.service
파일 생성[Unit] Description= The p2p camera via webrtc. After=systemd-networkd.service [Service] Type=simple WorkingDirectory=/path/to ExecStart=/path/to/pi_webrtc --device=/dev/video0 --fps=30 --width=1280 --height=960 --v4l2_format=h264 --hw_accel --mqtt_host=example.s1.eu.hivemq.cloud --mqtt_port=8883 --mqtt_username=hakunamatata --mqtt_password=wonderful --record_path=/mnt/ext_disk/video/ Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
- 서비스 활성화 및 시작
sudo systemctl daemon-reload sudo systemctl enable pi-webrtc.service sudo systemctl start pi-webrtc.service
고급 설정
- 양방향 통신을 위해 마이크와 스피커 추가 필요
마이크
- 마이크 배선 및 테스트에 대한 지침은 링크 참조
스피커
- 스피커 설정에 대한 지침은 링크 참조
라이선스
- 이 프로젝트는 Apache License, Version 2.0에 따라 라이선스 부여됨. 자세한 내용은 LICENSE 파일 참조
GN⁺의 정리
- 이 프로젝트는 Raspberry Pi를 저지연 홈 보안 카메라로 변환하는 방법을 제공함
- v4l2DMA 하드웨어 인코더와 WebRTC를 사용하여 미디어 서버 없이 순수 P2P 기반으로 동작함
- 여러 사용자가 동시에 라이브 스트림을 시청할 수 있어 가정용 보안 카메라로 유용함
- MQTT를 사용한 신호 메커니즘으로 LAN 및 원격 액세스 모두 지원 가능
- 유사한 기능을 가진 다른 프로젝트로는 MotionEye 및 ZoneMinder가 있음
Hacker News 의견
-
한 사용자는 집 수리 중 원격 감시를 위해 보안 시스템을 설치하려 했으나, 대부분의 기능이 광대역 인터넷을 필요로 한다는 사실을 알게 되었음
- 대신 Raspberry Pi 카메라와 RPi Zero 2W, LTE 핫스팟, T-Mobile의 $5/월 선불 SIM을 사용하여 자체 시스템을 구축했음
- 소프트웨어로는 imgcomp를 사용하여 매초 사진을 찍고, 변경된 사진을 VPS에 업로드하여 Gotify를 통해 휴대폰으로 알림을 받았음
-
다른 사용자는 집을 짓는 동안 아파트에 살면서 타임랩스 비디오를 만들고 인터넷을 통해 작업 상황을 확인하려 했음
- AliExpress에서 더 나은 품질의 카메라를 찾았음
-
또 다른 사용자는 Raspberry Pi Zero WH를 사용하여 mediamtx 프로젝트를 고려했음
- WebRTC를 활용한 좋은 예시로, DDNS와 포트 포워딩 설정이 필요할 수 있음
- 오픈 소스 솔루션을 사용하여 Pi와 서버 간의 비공개 연결을 만들 수 있음
-
한 사용자는 Raspberry Pi 5가 v4l2 하드웨어 인코딩을 지원하지 않는 점에 의문을 가졌음
-
다른 사용자는 yolov3-tiny 모델을 사용하여 실시간 사람 감지를 시도하고 있었음
- C++로 성능을 최대화하려고 노력 중임
-
또 다른 사용자는 Sentry-Picam을 사용하여 유사한 목적을 달성했으며, Syncthing을 통해 3대의 다른 기기와 동기화하고 sendxmpp를 기반으로 푸시 알림 스크립트를 연결했음
-
한 사용자는 Nvidia Jetson을 사용하여 유사한 프로젝트를 진행했으며, 현재 reCamera에 관심을 가지고 있음
-
또 다른 사용자는 오픈 소스 펌웨어를 사용하는 보드를 찾고 있었음
-
마지막으로, 한 사용자는 소리만 녹음하려면 WebRTC가 좋은 솔루션인지 궁금해했음