1 ポイント 投稿者 GN⁺ 2024-09-17 | 1件のコメント | WhatsAppで共有
  • 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がある

1件のコメント

 
GN⁺ 2024-09-17
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が良いソリューションなのか気にしていた