1 puan yazan GN⁺ 2024-09-17 | 1 yorum | WhatsApp'ta paylaş
  • Raspberry Pi WebRTC, Raspberry Pi veya NVIDIA Jetson'ı yaklaşık 200 ms gecikmeli bir WebRTC akış platformuna dönüştüren C++20 tabanlı bir projedir
  • Yerel WebRTC kullanır ve donanım/yazılım kodlama, anlık görüntü, kayıt, yayın, WebRTC DataChannel üzerinden uzaktan kontrol ve IoT mesajlaşmasını destekler
  • Sinyalleşme yöntemleri olarak MQTT, WHEP, WebSocket desteklenir; MQTT, Pi kamera ile istemcinin WebRTC bağlantı bilgilerini değiş tokuş etmesinde kullanılır
  • Desteklenen cihazlar Raspberry Pi Zero/3/4/5 ile NVIDIA Jetson Nano/NX/Orin'dir; kamera olarak CSI veya USB kullanılabilir ve libcamera, libargus, V4L2 desteklenmelidir
  • Pi 5 veya donanım kodlayıcısı olmayan cihazlarda çalıştırma seçeneklerinden --hw-accel kaldırılmalıdır; WHEP bir broker gerektirmez ancak genel erişilebilir bir host adı gerektirir

Proje genel bakışı

  • Raspberry Pi WebRTC, Raspberry Pi veya NVIDIA Jetson'ı düşük gecikmeli bir WebRTC akış platformuna dönüştüren bir projedir
  • Hedef gecikme süresi yaklaşık 200 ms olarak belirtilir
  • Başlıca teknik bilgiler şunlardır
    • libwebrtc m146.7680

    • C++20

      • Apache 2.0 lisansı

Desteklenen özellikler

  • Yerel WebRTC tabanlı akış sunar
  • Video kodlama tarafında donanım kodlama ve yazılım kodlamayı destekler
  • Kamera özellikleri arasında anlık görüntü, kayıt ve yayın bulunur
  • WebRTC DataChannel üzerinden uzaktan kontrol ve IoT mesajlaşmasını destekler

Sinyalleşme yöntemleri ve istemciler

Gereksinimler

  • Desteklenen kartlar Raspberry Pi Zero/3/4/5 veya NVIDIA Jetson Nano/NX/Orin'dir
  • Kamera olarak CSI veya USB kamera kullanılabilir
  • Kamera girdisi libcamera, libargus veya V4L2 desteklemelidir

Raspberry Pi hızlı başlangıç

  • Raspberry Pi OS kurulumu
  • Bağımlılıkların kurulumu
    • libmosquitto1, pulseaudio, libavformat61, libswscale8, libyaml-cpp0.8 kurulmalıdır
  • İkili dosyanın indirilmesi
  • MQTT sinyalleşmesi
    • HiveMQ, EMQX veya kendi barındırdığınız bir broker kullanılabilir
    • MQTT, Pi kamera ile istemcinin WebRTC bağlantı bilgilerini değiş tokuş etmesini sağlar
    • WHEP broker gerektirmez, ancak genel erişilebilir bir host adı gerektirir

Çalıştırma yöntemi ve dikkat edilmesi gerekenler

  • picamera-web açılır, MQTT ayarları eklenir ve ardından UID oluşturulur
  • Pi üzerinde ./pi-webrtc çalıştırılır; kamera, FPS, çözünürlük, MQTT host'u, port, kullanıcı adı, parola, UID gibi seçenekler belirtilir
  • Örnek seçenekler arasında --camera=libcamera:0, --fps=30, --width=1280, --height=960, --use-mqtt, --no-audio yer alır
  • --hw-accel, Pi Zero 2W, 3B, 4B üzerinde donanım kodlama kullanılırken eklenen bir seçenektir
  • Pi 5 veya donanım kodlayıcısı olmayan cihazlarda --hw-accel kaldırılmalıdır

Gelişmiş kullanım

1 yorum

 
GN⁺ 2024-09-17
Hacker News yorumları
  • Bir zamanlar tadilat halindeki bir evi uzaktan izlemem gerekiyordu; tanıdıklarımın önerdiği, bol reklam yapan bir güvenlik sistemini kurmayı denedim ama ucuz değildi ve kurulum sırasında istediğim özelliklerin çoğunun geniş bant internet gerektirdiğini fark ettim
    Bu şart pazarlama materyallerinin hiçbir yerinde yazmıyordu, o evde internet yoktu ve güvenlik sistemine aylık 40 doların üstüne internet için en az 60 dolar daha ödemeyi düşünmüyordum
    Onun yerine elimdeki Raspberry Pi kamerayı bir RPi Zero 2W'ye bağladım, bir LTE hotspot ve T-Mobile'ın aylık 5 dolarlık ön ödemeli SIM'ini aldım
    Yazılım tarafında imgcomp ile her saniye fotoğraf çekip RAM diske kaydediyordum; iki fotoğraf gürültü dışında farklıysa Pi değişen fotoğrafı VPS üzerindeki bir dizine yüklüyor, bunu tetikleyen Gotify da fotoğraf bağlantısını telefona bildirim olarak gönderiyordu
    Genel olarak Rube Goldberg usulü bir kurulumdu ama birkaç yıl boyunca neredeyse kusursuz çalıştı

    • “Güvenlik sistemi ucuz değildi” ile “sistem yaklaşık 40 dolardı” pek örtüşmüyor. Güvenlik sisteminin ne kadar ucuz olmasını beklediğini merak ettim
    • Bence bu tam bir tamirci ve hacker zihniyeti örneği. İhtiyacın olan bir şey vardı, elindekilerle kendi çözümünü ürettin; bana pek de Rube Goldberg usulü gibi gelmiyor
    • İnternet bağlantısı olmadan kamerayı internet üzerinden izleyebilmeyi mi bekliyordu? Abonelik olmadan kamerada gömülü LTE olmasını bekliyormuş gibi okunuyor
    • Gayet iyi bir kurulum. Bugün olsa arkasına codeproject.ai için GPU ya da TPU tabanlı bir Coral modülü de eklenebilir gibi duruyor
  • Bir zamanlar ben de benzer bir şey yapıyordum https://youtube.com/watch?v=5E7_40PWqiQ
    Evi inşa ederken bir dairede yaşıyordum; kamerayla bir timelapse video oluştururken ek olarak internetten bağlanıp işçilerin nasıl çalıştığını görebilmeyi istiyordum
    Ne yazık ki aklıma gelen her fikri benden önce birileri, bu durumda Çin tarafında, zaten yapmıştı. AliExpress'te bunları ve daha fazlasını yapan oldukça iyi kameralar var; ayrıca 3D yazıcıyla basılmış derme çatma bir kasadan da daha iyi görünüyorlar

    • Bu cihazların bazıları, belki çoğu ya da hepsi, harici bir hizmete ihtiyaç duyuyor. Yani yalnızca o hizmet var olduğu sürece çalışıyorlar ve kontrol satıcının elinde oluyor
      Hayalim böyle bir cihaz yapıp Tor üzerinden uzaktan erişilebilir kılmak. Böylece tamamen yerel kalırken dünyanın her yerinden uzaktan erişim mümkün olur
  • Raspberry Pi Zero WH üzerinde kullanmak için baktığım alternatif projelerden biri de mediamtx
    https://github.com/bluenviron/mediamtx?tab=readme-ov-file#raspberry-pi-cameras

  • WebRTC'nin iyi kullanıldığı bir örnek ve tuhaf biçimde WebRTC hâlâ yeterince kullanılmıyor
    Kendi barındırdığınız bir sistemde mobil veri üzerinden sinyalleşme sunucusuna uzaktan erişmek istiyorsanız, ISP'niz dinamik IP veriyorsa DDNS ve port yönlendirme ayarlamanız gerekebilir
    Ancak bu yöntem sunucuyu internete açık hale getirir. Bunun yerine Pi ile sunucu arasında özel bağlantı kuran bir açık kaynak çözüm kullanılabilir. Böylece sunucuya ağ erişimi açmanız gerekmez; statik IP ya da port yönlendirme de istemez

    • WebRTC'nin potansiyelini tam olarak gerçekleştirdiğini görmek hayat tutkum. P2P/NAT geçişini öğrendikten sonra eskiye dönemedim
      Sence WebRTC neden yaygınlaşmakta zorlandı? Yazılım kalitesi, eğitim materyalleri gibi sorunlar mı var; hep yeni projeler arıyorum
    • Pi üzerinde bir MQTT sunucusu kurarsanız sorun çözülür :)
  • Raspberry Pi 5'in v4l2 donanımsal kodlamayı desteklememesi kısmını pek anlamadım. Video çözme işine bu kadar emek verilmişken neden kodlayıcı yok?

    • Muhtemelen kodlama yapanların sayısı çözme yapanlardan çok daha az olduğu içindir
      Kodlama ve çözmede ortak kısımlar var ama Opus codec üzerinde çalışırken de yalnızca bir tarafa ait epeyce kod olduğunu görmüştüm
    • Silikon alanını başka yerde kullanmaya karar verdiler. Pi 5 CPU'su çoğu H.264 akışını yazılımla çözebilecek kadar güçlü ve Pi 5'te H.265 donanımsal çözücü var
  • Tam da aradığım şey. İnsan algılama çalıştırmak istiyordum
    yolov3-tiny kullanıyorum; en yeni model değil ama çok hafif bir bilgisayarlı görü makine öğrenimi modeli ve şu anda evin çevresinde gerçek zamanlı insan algılama için C++ ile çıkarım performansını en üst düzeye çıkarmaya çalışıyorum
    Gece biri araziye girerse siren ve ışıkların otomatik olarak devreye girip davetsiz kişiyi uzaklaştırmasını istiyorum
    https://github.com/jmaczan/yolov3-tiny-openvino

    • Gecenin bir yarısı alarmın rastgele çaldığı sahneyi gözümde canlandırdım
      Yaklaştıkça ışık ve sireni kademeli olarak açan bir yöntem düşünmüştüm. Böylece çok daha erken tepki verilirken potansiyel davetsiz kişiye geri çekilmesi için yeterince sinyal de verilmiş olur
      Geri bildirim döngüsü içinde adrenalini yavaş yavaş yükseltmek daha etkili olabilir. Ani etkiyi ise yalnızca bir kez değerlendirmek gerekir
  • Yakın zamanda sürekli açık bir kayıt cihazı yaptım. Asıl amacı sesi düzenli biçimde sürekli kaydetmek; gözetim için değil, harika bir performansın ortasında kayıt düğmesine basmayı hatırlamak istemeyen müzisyenler ve üreticiler için
    Zero-W, arecord/aplay kullanan biraz nazlı bir shell script ve turboLua frontend kullandım; gayet iyi çalışıyor
    Sürekli kayıt yapıyor ama yalnızca kullanıcının belirlediği saklama süresini geçmiş “eski” sesleri siliyor; seçenekler 1 dakika, 5 dakika, 15 dakika, 30 dakika, 1 saat, 3 saat, 5 saat ve 24 saate kadar gidiyor
    Kullanıcının iyi bir şey yakaladığını düşündüğü zaman aralığını Keep olarak işaretleyebildiği bir frontend de yaptım. Bu sezgisel yaklaşım birçok gözetim ürünündeki deadman switch/güvenlik kamerası mekanizmasına benziyor
    O kadar iyi çalışıyor ki neden hâlâ standart hale gelmediğini merak ediyorum. Depolama alanını doldurmak istememe yönündeki ekonomik tercih hâlâ sürüyor gibi ama bugünlerde 128GB bile oldukça uzun gidiyor
    Sanırım bir gün bu yaklaşım yaygınlaşacak. Kurup unutmak, birkaç saat jam yaptıktan sonra geri dönüp yalnızca saklamak istediklerini seçmek ve geri kalan temizliğin kendiliğinden yapılmış olması oldukça ilham verici

  • Eski RPi Cam Web Interface projesini de unutmamak lazım. Epey eski ama hâlâ Pi'larımda çalışıyor
    SD kartı bozmamak için sürekli çalışma ortamında kullanıyorum ve kayıtları bir sunucuya gönderiyor. Arayüzü de temiz
    https://elinux.org/RPi-Cam-Web-Interface

  • Benzer bir amaç için https://github.com/TinkerTurtle/Sentry-Picam çözümünü çok başarılı şekilde kullanıyorum
    Kaydedilen görüntü/video klasörlerini syncthing ile 3 başka makineyle senkronize ederek yedeklilik sağladım; ayrıca sendxmpp tabanlı bir push bildirim script'i ekleyip bir şey olduğunda tüm cihazlarda gerçek zamanlı bildirim alır hale getirdim

  • Oldukça havalı. Bir zamanlar https://securade.ai tarafında Nvidia Jetson'ı edge cihaz olarak kullanarak benzer bir şey üzerinde çalışmıştım
    Şimdi ise reCamera'yı merakla bekliyorum: https://www.seeedstudio.com/blog/recamera/