1 puan yazan GN⁺ 2024-09-17 | 1 yorum | WhatsApp'ta paylaş
  • Raspberry Pi’yi düşük gecikmeli bir ev güvenlik kamerasına dönüştüren proje
    • v4l2DMA donanım kodlayıcısı ve WebRTC kullanır
    • Medya sunucusu olmadan tamamen P2P tabanlı kamera olarak video oynatma ve indirme mümkündür
    • Birden fazla kullanıcı aynı anda canlı yayını izleyebilir
    • Raspberry Pi 5 veya diğer SBC’ler v4l2 donanım kodlamayı desteklemez, yazılım kodlama modunda çalıştırılması gerekir

Kullanım

  • En güncel ikili dosyayı Releases bölümünden indirin
  • Pi Camera uygulamasını kurun ve yönergeleri izleyin

Donanım gereksinimleri

  • Raspberry Pi (Zero 2W veya üzeri)
  • CSI kamera modülü
  • En az 4 GB micro SD kart
  • USB disk ve Micro-USB Male to USB-A Female adaptör

Ortam kurulumu

  1. Raspberry Pi Imager kullanarak Lite OS’yi (Bookworm 64-bit) micro SD karta yazın
  2. Gerekli kütüphaneleri kurun
    sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6
    
  3. Raspberry Pi donanımını etkinleştirmek için /boot/firmware/config.txt dosyasına aşağıdaki içeriği ekleyin
    camera_auto_detect=0
    start_x=1
    gpu_mem=16
    
    Kamerayı v4l2 ile okumak için camera_auto_detect=0 ayarını yapın
  4. USB diski bağlayın [referans]
    • Video kaydı istemiyorsanız bu adımı atlayın ve çalıştırırken record_path bayrağını ayarlamayın
    • Disk sürücüsü algılandığında otomatik olarak /mnt/ext_disk konumuna bağlanır
    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
    

Uygulamayı çalıştırma

  • Şu anda tek sinyalleşme mekanizması olarak MQTT kullanıldığı için, uygulamayı başlatmadan önce bir MQTT sunucusunun hazır olması gerekir
  • Uygulama yalnızca LAN içinde kullanılacaksa, aynı Pi üzerine Mosquitto gibi bir MQTT sunucusu kurulabilir
  • Uzak erişim gerekiyorsa bulut tabanlı bir MQTT sunucusu kullanılması önerilir (ör. HiveMQ, EXMQ)
  • Mobil veriyle uzak sinyalleşme sunucusuna erişmek için DDNS ve port yönlendirme ayarları gerekir

Çalıştırma

  • Tüm seçenekleri görmek için pi_webrtc ikili dosyasını -h bayrağıyla çalıştırabilirsiniz
  • Yapılandırmayı uygulayarak uygulamayı başlatın
    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/
    
    İpucu 1: Pi 5 donanım kodlamayı desteklemediği için --hw_accel bayrağını kaldırın ve --v4l2_format değerini mjpeg olarak ayarlayın. Video kodlama OpenH264 tarafından işlenir İpucu 2: 1920x1080 ayarlandığında donanım kod çözücü firmware’i 1920x1088 değerine değişir, ancak isp/kodlayıcı buna göre ayarlanmadığından bellek sınırı aşılır. 1920x1088 olarak ayarlarsanız sorun olmaz

Linux servisi olarak çalıştırma

1. pulseaudioyu sistem genelinde daemon olarak çalıştırın [referans]
  • /etc/systemd/system/pulseaudio.service dosyasını oluşturun
    [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
    
  • İstemci yapılandırmasına autospawn = no ekleyin
    echo 'autospawn = no' | sudo tee -a /etc/pulse/client.conf > /dev/null
    
  • root kullanıcısını pulse grubuna ekleyin
    sudo adduser root pulse-access
    
  • Servisi etkinleştirin ve başlatın
    sudo systemctl daemon-reload
    sudo systemctl enable pulseaudio.service
    sudo systemctl start pulseaudio.service
    
2. pi_webrtcyi çalıştırın ve yeniden başlatmada otomatik başlamasını ayarlayın
  • /etc/systemd/system/pi-webrtc.service dosyasını oluşturun
    [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
    
  • Servisi etkinleştirin ve başlatın
    sudo systemctl daemon-reload
    sudo systemctl enable pi-webrtc.service
    sudo systemctl start pi-webrtc.service
    

Gelişmiş ayarlar

  • Çift yönlü iletişim için mikrofon ve hoparlör eklenmesi gerekir

Mikrofon

  • Mikrofon kablolaması ve testiyle ilgili yönergeler için bağlantıya bakın

Hoparlör

  • Hoparlör kurulumu ile ilgili yönergeler için bağlantıya bakın

Lisans

  • Bu proje Apache License, Version 2.0 kapsamında lisanslanmıştır. Ayrıntılar için LICENSE dosyasına bakın

GN⁺ özeti

  • Bu proje, Raspberry Pi’yi düşük gecikmeli bir ev güvenlik kamerasına dönüştürmenin bir yolunu sunar
  • v4l2DMA donanım kodlayıcısı ve WebRTC kullanarak medya sunucusu olmadan tamamen P2P tabanlı çalışır
  • Birden fazla kullanıcının aynı anda canlı yayını izleyebilmesi sayesinde ev tipi güvenlik kamerası olarak kullanışlıdır
  • MQTT kullanan sinyalleşme mekanizması sayesinde hem LAN hem de uzak erişim desteklenebilir
  • Benzer işlevlere sahip diğer projeler arasında MotionEye ve ZoneMinder bulunur

1 yorum

 
GN⁺ 2024-09-17
Hacker News görüşleri
  • Bir kullanıcı, ev tadilatı sırasında uzaktan izleme için bir güvenlik sistemi kurmak istemiş, ancak çoğu özelliğin geniş bant internete ihtiyaç duyduğunu fark etmiş

    • Bunun yerine Raspberry Pi kamera, RPi Zero 2W, LTE hotspot ve T-Mobile’ın aylık 5 dolarlık ön ödemeli SIM’i ile kendi sistemini kurmuş
    • Yazılım olarak imgcomp kullanarak her saniye fotoğraf çekmiş, değişen fotoğrafları VPS’e yüklemiş ve Gotify üzerinden telefonuna bildirim almış
  • Başka bir kullanıcı, evini inşa ederken apartmanda yaşayıp bir timelapse video oluşturmak ve internet üzerinden işin durumunu kontrol etmek istemiş

    • AliExpress’te daha iyi kaliteli bir kamera bulmuş
  • Bir başka kullanıcı, Raspberry Pi Zero WH kullanarak mediamtx projesini değerlendirmiş

    • WebRTC kullanan iyi bir örnek olduğunu, DDNS ve port forwarding ayarı gerektirebileceğini belirtmiş
    • Açık kaynak bir çözüm kullanarak Pi ile sunucu arasında özel bir bağlantı kurulabileceğini söylemiş
  • Bir kullanıcı, Raspberry Pi 5’in neden v4l2 donanımsal kodlamayı desteklemediğini merak etmiş

  • Başka bir kullanıcı, yolov3-tiny modeliyle gerçek zamanlı insan algılamayı deniyormuş

    • C++ ile performansı en üst düzeye çıkarmaya çalışıyormuş
  • Bir başka kullanıcı, benzer bir amaç için Sentry-Picam kullanmış; Syncthing ile 3 farklı cihazla senkronize etmiş ve sendxmpp tabanlı bir push bildirim betiği bağlamış

  • Bir kullanıcı, benzer bir projeyi Nvidia Jetson ile yapmış ve şu anda reCamera ile ilgileniyormuş

  • Bir başka kullanıcı, açık kaynak firmware kullanan bir kart arıyormuş

  • Son olarak, bir kullanıcı yalnızca ses kaydetmek için WebRTC’nin iyi bir çözüm olup olmadığını merak etmiş