1 पॉइंट द्वारा GN⁺ 2024-09-17 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Raspberry Pi WebRTC एक Raspberry Pi या NVIDIA Jetson को लगभग 200ms latency वाले WebRTC streaming platform में बदलने वाला C++20-आधारित प्रोजेक्ट है
  • यह native WebRTC का उपयोग करता है और hardware/software encoding, snapshots, recording, broadcasting, तथा WebRTC DataChannel के जरिए remote control और IoT messaging को सपोर्ट करता है
  • signaling methods के रूप में MQTT, WHEP, और WebSocket को सपोर्ट करता है, और MQTT का उपयोग Pi camera और client के बीच WebRTC connection information के आदान-प्रदान के लिए होता है
  • समर्थित डिवाइस Raspberry Pi Zero/3/4/5 और NVIDIA Jetson Nano/NX/Orin हैं, और कैमरे CSI या USB का उपयोग कर सकते हैं, बशर्ते वे libcamera, libargus, या V4L2 को सपोर्ट करें
  • Pi 5 या hardware encoder के बिना डिवाइसों में run options से --hw-accel हटाना होगा, जबकि WHEP को broker की ज़रूरत नहीं होती लेकिन public hostname चाहिए

प्रोजेक्ट अवलोकन

  • Raspberry Pi WebRTC एक ऐसा प्रोजेक्ट है जो Raspberry Pi या NVIDIA Jetson को low-latency WebRTC streaming platform में बदलता है
  • लक्ष्य latency लगभग 200ms बताई गई है
  • मुख्य तकनीकी विवरण इस प्रकार हैं
    • libwebrtc m146.7680

    • C++20

      • Apache 2.0 लाइसेंस

समर्थित फीचर

  • native WebRTC-आधारित streaming प्रदान करता है
  • वीडियो encoding के लिए hardware encoding और software encoding दोनों को सपोर्ट करता है
  • कैमरा फीचर्स में snapshots, recording, और broadcasting शामिल हैं
  • WebRTC DataChannel के जरिए remote control और IoT messaging को सपोर्ट करता है

signaling methods और clients

आवश्यकताएँ

  • समर्थित बोर्ड Raspberry Pi Zero/3/4/5 या NVIDIA Jetson Nano/NX/Orin हैं
  • कैमरा CSI या USB camera का उपयोग कर सकता है
  • camera input को libcamera, libargus, या V4L2 सपोर्ट करना चाहिए

Raspberry Pi क्विक स्टार्ट

  • Raspberry Pi OS इंस्टॉल करें
  • dependencies इंस्टॉल करें
    • libmosquitto1, pulseaudio, libavformat61, libswscale8, libyaml-cpp0.8 इंस्टॉल करें
  • binary डाउनलोड करें
    • नवीनतम release binary डाउनलोड करके unzip करें
  • MQTT signaling
    • HiveMQ, EMQX, या self-hosted broker का उपयोग किया जा सकता है
    • MQTT Pi camera और client को WebRTC connection information का आदान-प्रदान करने देता है
    • WHEP को broker की ज़रूरत नहीं होती, लेकिन public hostname चाहिए

चलाने का तरीका और ध्यान देने योग्य बातें

  • picamera-web खोलें, MQTT settings जोड़ें, फिर UID बनाएं
  • Pi पर ./pi-webrtc चलाएँ और camera, FPS, resolution, MQTT host, port, username, password, UID आदि को options के रूप में निर्दिष्ट करें
  • उदाहरण options में --camera=libcamera:0, --fps=30, --width=1280, --height=960, --use-mqtt, --no-audio आदि शामिल हैं
  • --hw-accel Pi Zero 2W, 3B, 4B पर hardware encoding इस्तेमाल करते समय जोड़ा जाने वाला option है
  • Pi 5 या hardware encoder के बिना डिवाइसों में --hw-accel हटाना होगा

उन्नत उपयोग

1 टिप्पणियां

 
GN⁺ 2024-09-17
Hacker News की राय
  • पहले रेनोवेशन चल रहे एक घर को दूर से मॉनिटर करना था, इसलिए जान-पहचान वालों के सुझाए हुए, खूब विज्ञापन करने वाले सुरक्षा सिस्टम को लगाने की कोशिश की। वह सस्ता नहीं था, और सेटअप के दौरान ही पता चला कि जिन ज़्यादातर फीचर्स की मुझे ज़रूरत थी, वे ब्रॉडबैंड इंटरनेट मांगते थे
    मार्केटिंग मटेरियल में कहीं भी यह शर्त नहीं लिखी थी, उस घर में इंटरनेट नहीं था, और सुरक्षा सिस्टम के 40 डॉलर प्रति माह के ऊपर इंटरनेट के लिए कम-से-कम 60 डॉलर और देने का मेरा इरादा नहीं था
    इसके बजाय Raspberry Pi कैमरा को अपने पास मौजूद RPi Zero 2W से जोड़ा, और एक LTE हॉटस्पॉट व T-Mobile का 5 डॉलर प्रति माह वाला प्रीपेड SIM खरीदा
    सॉफ्टवेयर में imgcomp से हर सेकंड फोटो लेकर RAM डिस्क में सेव किया, और जब दो फोटो noise को छोड़कर अलग दिखते, तो Pi बदली हुई फोटो को VPS डायरेक्टरी में अपलोड करता था; उसी को trigger बनाकर Gotify से फोन पर फोटो लिंक का notification भेजने की व्यवस्था की
    कुल मिलाकर यह Rube Goldberg जैसी व्यवस्था थी, लेकिन कई सालों तक लगभग परफेक्ट चली

    • “सुरक्षा सिस्टम सस्ता नहीं था” और “सिस्टम करीब 40 डॉलर का था” बात आपस में ठीक से जुड़ती नहीं दिखती। उत्सुकता है कि सुरक्षा सिस्टम कितना सस्ता होने की उम्मीद थी
    • मेरे हिसाब से यह tinkerer और hacker spirit के बिल्कुल मुताबिक तरीका है। ज़रूरत थी तो उपलब्ध चीज़ों से खुद समाधान बना लिया, और मुझे यह खास Rube Goldberg जैसा भी नहीं लगता
    • क्या उम्मीद थी कि इंटरनेट कनेक्शन के बिना कैमरे को इंटरनेट से मॉनिटर कर पाएंगे? पढ़कर ऐसा लगता है जैसे उम्मीद थी कि subscription के बिना कैमरे में LTE built-in होगा
    • काफी अच्छी setup है। आज के समय में शायद उसके पीछे codeproject.ai का GPU या TPU-आधारित Coral module लगाकर processing भी कर सकते हैं
  • पहले कुछ ऐसा ही बना रहा था https://youtube.com/watch?v=5E7_40PWqiQ
    घर बनते समय अपार्टमेंट में रह रहा था, और कैमरे से timelapse video बनाते हुए साथ में इंटरनेट से access करके देखना चाहता था कि workers क्या कर रहे हैं
    दुर्भाग्य से जो भी idea दिमाग में आता, कोई न कोई—इस मामले में चीन की तरफ—पहले ही बना चुका होता था। AliExpress पर ऐसे काफी अच्छे कैमरे हैं जो ये फीचर और उससे भी ज्यादा करते हैं, और 3D-printed कच्चे-पक्के case से उनकी finishing भी बेहतर है

    • ऐसे devices में से कुछ, शायद ज्यादातर या सभी, external service की ज़रूरत रखते हैं। यानी वे सिर्फ तब तक चलते हैं जब तक वह service मौजूद है, और vendor के हाथों पर निर्भर रहते हैं
      सपना है कि ऐसा device बनाया जाए और Tor के जरिए remote access किया जा सके। तब यह पूरी तरह local रहते हुए भी दुनिया में कहीं से भी remotely access हो सकेगा
  • Raspberry Pi Zero WH पर आज़माने के लिए जिन alternative projects को देख रहा था, उनमें mediamtx है
    https://github.com/bluenviron/mediamtx?tab=readme-ov-file#raspberry-pi-cameras

  • WebRTC का अच्छा इस्तेमाल है, और अजीब बात है कि WebRTC अभी भी उतना इस्तेमाल नहीं होता जितना होना चाहिए
    self-hosting करते हुए mobile data से signaling server तक remote access करना हो, तो ISP अगर dynamic IP देता है तो DDNS और port forwarding सेट करनी पड़ सकती है
    हालांकि इस तरीके में server इंटरनेट पर expose हो जाता है। इसके बजाय Pi और server के बीच private connection बनाने वाला open source solution इस्तेमाल किया जा सकता है। तब server पर network access खोलने की ज़रूरत नहीं रहती, और static IP या port forwarding भी नहीं चाहिए

    • WebRTC को अपनी पूरी potential तक पहुंचते देखना मेरी life passion है। P2P/NAT traversal जानने के बाद पीछे लौटना संभव नहीं था
      उत्सुकता है कि आपके हिसाब से WebRTC को व्यापक रूप से जगह बनाने में दिक्कत क्यों आई। क्या यह software quality, educational resources जैसी समस्या है? मैं हमेशा नए projects ढूंढता रहता हूं
    • Pi पर MQTT server बना दें तो समस्या हल हो जाएगी :)
  • यह बात ठीक से समझ नहीं आती कि Raspberry Pi 5 v4l2 hardware encoding support नहीं करता। video decoding तो इतनी मेहनत से डाल दी, फिर encoder क्यों नहीं है?

    • अनुमान है कि encoding करने वाले लोग decoding करने वालों से काफी कम हैं
      encoding और decoding में overlap होता है, लेकिन Opus codec पर काम करते समय भी एक ही path पर लागू होने वाला काफी code था
    • silicon area को कहीं और लगाने का फैसला किया गया। Pi 5 CPU ज्यादातर H.264 streams को software से decode करने जितना शक्तिशाली है, और Pi 5 में H.265 hardware decoder है
  • यही चीज़ ढूंढ रहा था। person detection चलाना चाहता था
    yolov3-tiny इस्तेमाल कर रहा हूं; यह latest तो नहीं है, लेकिन बहुत lightweight computer vision machine learning model है, और अभी घर के आसपास real-time person detection के लिए C++ में inference performance को maximize कर रहा हूं
    चाहता हूं कि रात में कोई property में घुसे तो siren और lights अपने-आप चालू होकर intruder को भगा दें
    https://github.com/jmaczan/yolov3-tiny-openvino

    • आधी रात में alarm randomly बजने का दृश्य दिमाग में आता है
      मैंने कल्पना की थी कि नज़दीक आने पर lights और siren को gradually चालू किया जाए। इससे बहुत पहले response मिलेगा और संभावित intruder को पीछे हटने का पर्याप्त संकेत दिया जा सकेगा
      feedback loop के भीतर adrenaline को धीरे-धीरे बढ़ाना ज्यादा असरदार लग सकता है, क्योंकि अचानक effect पर सिर्फ एक बार फैसला लेना होता है
  • हाल ही में हमेशा चालू रहने वाला recording device बनाया। मुख्य उद्देश्य audio को लगातार रिकॉर्ड करते रहना है; surveillance के लिए नहीं, बल्कि उन musicians और creators के लिए जो किसी शानदार performance के बीच में record button दबाना याद नहीं रखना चाहते
    Zero-W और arecord/aplay को संभालने वाली थोड़ी जटिल shell script, turboLua frontend का इस्तेमाल किया, और यह काफी अच्छी तरह चलता है
    लगातार record करता है, लेकिन user द्वारा तय retention period के बाद केवल “पुराना” audio delete करता है; options 1 मिनट, 5 मिनट, 15 मिनट, 30 मिनट, 1 घंटा, 3 घंटे, 5 घंटे, 24 घंटे तक रखे हैं
    एक frontend भी बनाया जिससे user उस time segment को Keep कर सके जिसमें उसे लगे कि कुछ अच्छा capture हुआ है। यह heuristic कई surveillance products के deadman switch/security camera mechanism जैसी है
    यह इतना अच्छा काम करता है कि हैरानी होती है कि यह अभी तक standard जैसा क्यों नहीं बन गया। लगता है storage भरना नहीं चाहने वाली आर्थिक preference अभी भी बची हुई है, लेकिन आजकल 128GB भी काफी लंबे समय तक चलता है
    कभी न कभी यह तरीका आम हो जाएगा। इसे install करके भूल जाएं, फिर कुछ घंटों की jam के बाद लौटकर सिर्फ वही ढूंढें जिसे रखना है, बाकी cleanup अपने-आप हो चुकी हो—यह काफी inspiring है

  • पुराने RPi Cam Web Interface project को भी भूलना नहीं चाहिए। काफी पुराना है, लेकिन अभी भी मेरे Pi devices पर चल रहा है
    SD card खराब न हो इसलिए लगातार चलने वाले environment में इसे run करता हूं, और storage server पर भेजता हूं। interface भी साफ-सुथरा है
    https://elinux.org/RPi-Cam-Web-Interface

  • मिलते-जुलते उपयोग के लिए https://github.com/TinkerTurtle/Sentry-Picam बहुत अच्छे से इस्तेमाल कर रहा हूं
    recorded image/video folders को syncthing से तीन दूसरी machines के साथ sync करके redundancy रखी है, और sendxmpp-आधारित push notification script लगाई है ताकि कुछ भी हो तो सभी devices पर real-time alerts मिलें

  • काफी शानदार। पहले https://securade.ai पर Nvidia Jetson को edge device की तरह इस्तेमाल करके कुछ ऐसा ही काम किया था
    अब reCamera का इंतज़ार है: https://www.seeedstudio.com/blog/recamera/