1 poin oleh GN⁺ 2024-09-17 | 1 komentar | Bagikan ke WhatsApp
  • Raspberry Pi WebRTC adalah proyek berbasis C++20 yang mengubah Raspberry Pi atau NVIDIA Jetson menjadi platform streaming WebRTC dengan latensi sekitar 200 ms
  • Menggunakan WebRTC native dan mendukung encoding hardware/software, snapshot, perekaman, siaran, kendali jarak jauh melalui WebRTC DataChannel, serta messaging IoT
  • Metode signaling yang didukung adalah MQTT, WHEP, dan WebSocket; MQTT digunakan agar kamera Pi dan klien dapat bertukar informasi koneksi WebRTC
  • Perangkat yang didukung mencakup Raspberry Pi Zero/3/4/5 dan NVIDIA Jetson Nano/NX/Orin; kamera dapat menggunakan CSI atau USB dan harus mendukung libcamera, libargus, atau V4L2
  • Pada Pi 5 atau perangkat tanpa hardware encoder, opsi --hw-accel harus dihapus dari opsi eksekusi; WHEP tidak memerlukan broker, tetapi membutuhkan hostname publik

Ikhtisar Proyek

  • Raspberry Pi WebRTC adalah proyek yang mengubah Raspberry Pi atau NVIDIA Jetson menjadi platform streaming WebRTC berlatensi rendah
  • Target latensi yang dinyatakan adalah sekitar 200 ms
  • Teknologi utama yang dicantumkan adalah sebagai berikut
    • libwebrtc m146.7680

    • C++20

      • Lisensi Apache 2.0

Fitur yang Didukung

  • Menyediakan streaming berbasis WebRTC native
  • Encoding video mendukung encoding hardware dan encoding software
  • Fitur kamera mencakup snapshot, perekaman, dan siaran
  • Mendukung kendali jarak jauh dan messaging IoT melalui DataChannel WebRTC

Metode Signaling dan Klien

Persyaratan

  • Board yang didukung adalah Raspberry Pi Zero/3/4/5 atau NVIDIA Jetson Nano/NX/Orin
  • Kamera dapat menggunakan kamera CSI atau USB
  • Input kamera harus mendukung libcamera, libargus, atau V4L2

Mulai Cepat Raspberry Pi

  • Instal Raspberry Pi OS
  • Instal dependensi
    • Instal libmosquitto1, pulseaudio, libavformat61, libswscale8, libyaml-cpp0.8
  • Unduh binary
  • Signaling MQTT
    • Dapat menggunakan HiveMQ, EMQX, atau broker yang di-host sendiri
    • MQTT memungkinkan kamera Pi dan klien bertukar informasi koneksi WebRTC
    • WHEP tidak memerlukan broker, tetapi membutuhkan hostname publik

Cara Menjalankan dan Catatan

  • Buka picamera-web, tambahkan pengaturan MQTT, lalu buat UID
  • Jalankan ./pi-webrtc di Pi, lalu tentukan kamera, FPS, resolusi, host MQTT, port, nama pengguna, kata sandi, UID, dan lainnya sebagai opsi
  • Contoh opsi mencakup --camera=libcamera:0, --fps=30, --width=1280, --height=960, --use-mqtt, --no-audio, dan lainnya
  • --hw-accel adalah opsi yang ditambahkan saat menggunakan encoding hardware pada Pi Zero 2W, 3B, 4B
  • Pada Pi 5 atau perangkat tanpa hardware encoder, --hw-accel harus dihapus

Penggunaan Lanjutan

1 komentar

 
GN⁺ 2024-09-17
Komentar Hacker News
  • Dulu saya perlu memantau rumah yang sedang direnovasi dari jarak jauh, jadi saya mencoba memasang sistem keamanan yang banyak diiklankan dan direkomendasikan oleh kenalan. Ternyata tidak murah, dan baru saat konfigurasi saya tahu sebagian besar fitur yang saya inginkan mensyaratkan internet broadband
    Tidak ada materi pemasaran yang menyebutkan syarat ini, rumah itu tidak punya internet, dan saya tidak berniat membayar 40 dolar per bulan untuk sistem keamanan plus minimal 60 dolar lagi untuk internet
    Sebagai gantinya, saya memasang kamera Raspberry Pi ke RPi Zero 2W yang saya punya, lalu membeli hotspot LTE dan SIM prabayar T-Mobile seharga 5 dolar per bulan
    Untuk perangkat lunaknya, saya memakai imgcomp untuk mengambil foto tiap detik dan menyimpannya ke RAM disk. Jika dua foto berbeda setelah mengabaikan noise, Pi akan mengunggah foto yang berubah itu ke direktori VPS, lalu itu dijadikan pemicu agar Gotify mengirim tautan foto ke ponsel sebagai notifikasi
    Secara keseluruhan memang rangkaian ala Rube Goldberg, tetapi selama beberapa tahun hampir selalu berjalan sempurna

    • Bagian “sistem keamanannya tidak murah” dan “sistemnya sekitar 40 dolar” terasa kurang nyambung. Jadi penasaran, seberapa murah sistem keamanan yang diharapkan?
    • Menurut saya ini sangat cocok dengan semangat oprek dan hacker. Saat butuh sesuatu, ia membuat solusi sendiri dari apa yang dimiliki, dan saya juga tidak merasa ini terlalu ala Rube Goldberg
    • Apakah memang berharap bisa memantau kamera lewat internet tanpa koneksi internet? Kedengarannya seperti berharap kamera punya LTE bawaan tanpa langganan
    • Konfigurasinya lumayan bagus. Kalau sekarang, mungkin bisa ditambahkan modul Coral berbasis GPU atau TPU dari codeproject.ai di belakangnya untuk pemrosesan
  • Dulu saya pernah membuat sesuatu yang mirip https://youtube.com/watch?v=5E7_40PWqiQ
    Saya tinggal di apartemen selama rumah dibangun, dan ingin membuat video timelapse dengan kamera sekaligus, sebagai fungsi tambahan, bisa mengaksesnya dari internet untuk melihat bagaimana para pekerja mengerjakannya
    Sayangnya, setiap ide yang terpikir ternyata sudah dibuat orang lain, dalam kasus ini oleh pihak dari Tiongkok. Di AliExpress ada kamera-kamera yang cukup bagus yang bisa melakukan fungsi seperti ini dan bahkan lebih, dengan finishing yang juga lebih baik daripada casing kasar hasil cetak 3D

    • Sebagian, mungkin sebagian besar atau bahkan semua perangkat seperti ini membutuhkan layanan eksternal. Artinya perangkat hanya berfungsi selama layanan itu ada, dan nasibnya berada di tangan vendor
      Impian saya adalah membuat perangkat seperti ini dan memungkinkan akses jarak jauh lewat Tor. Dengan begitu semuanya tetap sepenuhnya lokal, tetapi tetap bisa diakses dari jarak jauh dari mana saja di dunia
  • Salah satu proyek alternatif yang saya lihat untuk dicoba di Raspberry Pi Zero WH adalah mediamtx
    https://github.com/bluenviron/mediamtx?tab=readme-ov-file#raspberry-pi-cameras

  • Ini contoh pemanfaatan WebRTC yang bagus, dan anehnya WebRTC masih belum cukup banyak digunakan
    Jika self-hosting dan ingin mengakses server signaling dari jarak jauh lewat data seluler, saat ISP memberi IP dinamis mungkin perlu mengatur DDNS dan port forwarding
    Namun cara ini mengekspos server ke internet. Sebagai gantinya, bisa memakai solusi open source yang membuat koneksi privat antara Pi dan server. Dengan begitu tidak perlu membuka akses jaringan ke server, dan tidak perlu IP statis atau port forwarding

    • Melihat WebRTC mencapai potensi penuhnya adalah gairah hidup saya. Setelah mengenal P2P/NAT traversal, saya tidak bisa kembali seperti dulu
      Saya penasaran kenapa menurut Anda WebRTC kesulitan diadopsi luas. Apakah karena kualitas perangkat lunak, materi edukasi, atau masalah lain? Saya selalu mencari proyek baru
    • Membuat server MQTT di atas Pi akan menyelesaikan masalahnya :)
  • Saya kurang paham bagian bahwa Raspberry Pi 5 tidak mendukung encoding hardware v4l2. Decoding video saja dimasukkan dengan begitu serius, jadi kenapa tidak ada encoder?

    • Dugaan saya karena jumlah orang yang melakukan encoding jauh lebih sedikit daripada yang melakukan decoding
      Encoding dan decoding memang punya bagian yang tumpang tindih, tetapi saat mengerjakan codec Opus pun ada cukup banyak kode yang hanya relevan untuk salah satu jalur
    • Mereka memutuskan memakai area silikon untuk hal lain. CPU Pi 5 cukup kuat untuk men-decode sebagian besar stream H.264 secara software, dan Pi 5 punya decoder hardware H.265
  • Ini persis yang saya cari. Saya ingin menjalankan deteksi manusia
    Saya memakai yolov3-tiny; model machine learning computer vision ini memang bukan yang terbaru, tetapi sangat ringan. Saat ini saya sedang memaksimalkan performa inferensi di C++ untuk deteksi manusia real-time di sekitar rumah
    Saya ingin saat malam ada orang masuk ke properti, sirene dan lampu menyala otomatis untuk mengusir penyusup
    https://github.com/jmaczan/yolov3-tiny-openvino

    • Saya membayangkan alarm berbunyi acak di tengah malam
      Saya sempat membayangkan pendekatan menyalakan lampu dan sirene secara bertahap saat seseorang makin mendekat. Dengan begitu sistem bereaksi jauh lebih awal sekaligus memberi sinyal yang cukup kepada calon penyusup untuk mundur
      Sepertinya menaikkan adrenalin perlahan dalam sebuah feedback loop akan lebih efektif. Efek mendadak hanya perlu dinilai satu kali
  • Baru-baru ini saya membuat perangkat perekam yang selalu menyala. Tujuan utamanya merekam audio terus-menerus, bukan untuk pengawasan, melainkan untuk musisi dan kreator yang tidak ingin harus ingat menekan tombol rekam di tengah permainan yang bagus
    Saya memakai Zero-W, skrip shell yang agak rumit untuk menangani arecord/aplay, serta frontend turboLua, dan hasilnya berjalan cukup baik
    Perangkat terus merekam, tetapi hanya menghapus audio “lama” setelah melewati periode retensi yang ditentukan pengguna. Opsinya dari 1 menit, 5 menit, 15 menit, 30 menit, 1 jam, 3 jam, 5 jam, sampai 24 jam
    Saya juga membuat frontend agar pengguna bisa memilih Keep untuk rentang waktu ketika mereka merasa telah menangkap sesuatu yang bagus. Heuristik ini mirip mekanisme dead man's switch/kamera keamanan pada banyak produk pengawasan
    Cara ini bekerja begitu baik sampai saya heran kenapa belum menjadi semacam standar. Sepertinya masih ada preferensi ekonomis untuk tidak memenuhi ruang penyimpanan, tetapi sekarang 128GB pun bisa bertahan cukup lama
    Suatu saat saya rasa pendekatan seperti ini akan menjadi umum. Pasang, lupakan, lalu setelah beberapa jam jam session kembali dan hanya cari bagian yang ingin disimpan; sisanya sudah beres sendiri. Cukup menginspirasi

  • Jangan lupakan proyek lama RPi Cam Web Interface. Sudah cukup tua, tetapi masih berjalan di Pi-Pi saya
    Saya menjalankannya dalam lingkungan operasi terus-menerus agar tidak merusak kartu SD, dan penyimpanan dikirim ke server. Antarmukanya juga rapi
    https://elinux.org/RPi-Cam-Web-Interface

  • Untuk kebutuhan serupa, saya memakai https://github.com/TinkerTurtle/Sentry-Picam dengan sangat baik
    Folder gambar/video yang direkam saya sinkronkan ke 3 mesin lain dengan syncthing untuk redundansi, lalu saya menambahkan skrip notifikasi push berbasis sendxmpp agar kalau ada sesuatu terjadi, semua perangkat langsung mendapat notifikasi real-time

  • Cukup keren. Dulu saya pernah mengerjakan hal mirip di https://securade.ai dengan Nvidia Jetson sebagai perangkat edge
    Sekarang saya menantikan reCamera: https://www.seeedstudio.com/blog/recamera/