1P by neo 3일전 | favorite | 댓글 1개
  • 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 어댑터

환경 설정

  1. Raspberry Pi Imager를 사용하여 Lite OS (Bookworm 64-bit)를 micro SD 카드에 쓰기
  2. 필수 라이브러리 설치
    sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6
    
  3. /boot/firmware/config.txt에 아래 내용 추가하여 Raspberry Pi 하드웨어 활성화
    camera_auto_detect=0
    start_x=1
    gpu_mem=16
    
    camera_auto_detect=0 설정하여 v4l2로 카메라 읽기
  4. 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 플래그와 함께 실행하여 모든 옵션 확인 가능
  • 설정을 적용하여 애플리케이션 시작
    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/
    
    힌트 1: Pi 5는 하드웨어 인코딩을 지원하지 않으므로 --hw_accel 플래그 제거하고 --v4l2_formatmjpeg로 설정. 비디오 인코딩은 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가 좋은 솔루션인지 궁금해했음