तीन घटक, एकच उद्देश
आतील रचनेत Timmy अगदी व्यवहार्य पद्धतीने बनवले आहे: Flutter अॅपसाठी, WebRTC रिअल-टाइम ऑडिओ आणि व्हिडिओसाठी, आणि Firebase समन्वयासाठी. सर्वकाही क्लाउडमधून पाठवणारे मोठे प्लॅटफॉर्म बनवायचे नव्हते. प्रत्येक भागाला शक्य तितकी कमी माहिती असावी आणि तरीही इतर भागांसोबत तो विश्वासार्हपणे काम करावा, अशी कल्पना होती.
WebRTC: थेट कनेक्शन, डीफॉल्टनुसार एन्क्रिप्टेड
WebRTC (Web Real-Time Communication) बाळाच्या आणि पालकांच्या डिव्हाइसदरम्यान ऑडिओ व व्हिडिओ पोहोचवते. सर्वात चांगल्या परिस्थितीत, डेटा थेट दोन डिव्हाइसदरम्यान, peer-to-peer पद्धतीने वाहतो; मध्ये कोणताही मीडिया सर्व्हर नसतो.
प्रत्येक WebRTC कनेक्शनमध्ये डीफॉल्टनुसार DTLS-SRTP वापरले जाते. कोणी नेटवर्क पॅकेट्स पकडले, तरी त्यांना ऐकता किंवा पाहता येईल असा ऑडिओ किंवा व्हिडिओ मिळत नाही. हे एन्क्रिप्शन प्रोटोकॉलचाच भाग आहे आणि WebRTC मध्ये ते बंद करता येत नाही.
माझ्यासाठी महत्त्वाचा मुद्दा हाच होता: बाळाच्या खोलीतील मीडिया माझ्या सर्व्हरवर असू नये. तो तुमच्या डिव्हाइसदरम्यानच राहतो.
Firebase Firestore द्वारे सिग्नलिंग
WebRTC सुरू होण्यापूर्वी, डिव्हाइसना एकमेकांना शोधावे लागते आणि ते कसे जोडले जाऊ शकतात यावर सहमती करावी लागते. या भागाला सिग्नलिंग म्हणतात. Timmy यासाठी Google चा क्लाउड डेटाबेस Firebase Firestore वापरते.
फक्त तांत्रिक कनेक्शन डेटा देवाणघेवाण केला जातो:
- SDP ऑफर आणि उत्तरे: डिव्हाइसच्या क्षमता सांगतात (समर्थित कोडेक्स, रिझोल्यूशन इ.).
- ICE कँडिडेट्स: डिव्हाइस एकमेकांपर्यंत पोहोचू शकतील असे संभाव्य नेटवर्क मार्ग.
ऑडिओ आणि व्हिडिओ Firebase मध्ये जात नाहीत. Firestore फक्त तांत्रिक कनेक्शन डेटा वाहून नेते. Timmy या सिग्नलिंग स्तरालाही एन्क्रिप्ट करते, त्यामुळे Firestore हे SDP आणि ICE साठी साध्या मजकुराचे भेटण्याचे ठिकाण बनत नाही.
TURN सर्व्हर: थेट मार्ग काम करत नसताना
काही नेटवर्क थेट कनेक्शन अडवतात—उदाहरणार्थ, कडक फायरवॉल किंवा काही मोबाईल नेटवर्क ऑपरेटर. अशावेळी WebRTC ला TURN रिले (Traversal Using Relays around NAT) ची गरज असते.
Timmy आधी स्थानिक TURN सर्व्हर वापरण्याचा प्रयत्न करते आणि स्थानिक रिले उपलब्ध नसेल किंवा त्यावर जास्त भार असेल तर Cloudflare बॅकअप म्हणून वापरते. रिले एन्क्रिप्टेड पॅकेट्स फॉरवर्ड करते. त्याला आवाज किंवा व्हिडिओच्या कळा मिळत नाहीत; WebRTC एन्क्रिप्शन अबाधित राहते.
TURN क्रेडेन्शियल्स Firebase Cloud Function कडून येतात आणि फक्त 24 तास वैध असतात. बेबी मॉनिटर अॅपमध्ये कायमस्वरूपी क्रेडेन्शियल्स ठेवणे माझ्या मते खूप धोकादायक ठरेल.
Nearby Connections: डिव्हाइस आपोआप एकमेकांना शोधतात
बाळाच्या आणि पालकांच्या डिव्हाइसमधील कटकटीच्या सेटअप पायऱ्या टाळण्यासाठी, Timmy Nearby Connections वापरते. Google Bluetooth आणि WiFi वर ही शोधण्याची सुविधा देते.
Timmy मध्ये आपोआप पेअरिंग हाताने कोड टाकल्याशिवाय काम करते: डिव्हाइस एकमेकांना शोधतात आणि की एक्स्चेंजसाठी तोच संपर्कबिंदू मिळवतात. ते अयशस्वी झाल्यास, तुम्ही टाइप करू शकता असा 4-अक्षरी कोड आहे. पेअरिंग कोड कधीही डिव्हाइसच्या बाहेर जात नाही; Firestore ला दस्तऐवज ओळखकर्ता म्हणून फक्त क्रिप्टोग्राफिक हॅश (SHA-256) दिसतो.
अनामिक प्रमाणीकरण
Timmy Firebase Anonymous Authentication वापरते. पहिल्यांदा अॅप उघडल्यावर, प्रत्येक डिव्हाइसला तात्पुरता, अनामिक ID मिळतो. कोणतेही खाते, ईमेल पत्ता किंवा पासवर्ड नाही. हा ID फक्त Firestore नियम लागू करण्यासाठी आहे: केवळ प्रमाणित डिव्हाइसच सत्राचा डेटा वाचू किंवा लिहू शकतात.
रचना: कोण पाठवते, कोण प्राप्त करते
Timmy मध्ये दोन मोड आहेत:
- बेबी मोड (पाठवणारा): डिव्हाइस मायक्रोफोनद्वारे आवाज घेते आणि WebRTC द्वारे पालकांच्या डिव्हाइसवर पाठवते. पर्यायाने कॅमेरा सुरू करता येतो; त्यानंतर व्हिडिओही थेट पाठवला जातो.
- पालक मोड (प्राप्तकर्ता): डिव्हाइस ऑडिओ आणि व्हिडिओ प्राप्त करते, कॅमेराचा लाइव्ह व्हिडिओ दाखवते आणि बाळाच्या डिव्हाइसला छोटे व्हॉइस मेसेज पाठवण्यासाठी push-to-talk सुविधा देते.
push-to-talk आणि कॅमेरा चालू/बंद यांसारखी नियंत्रणे DataChannel वापरतात—हा आणखी एक WebRTC चॅनेल असून तो डिव्हाइसदरम्यान थेट छोटे एन्क्रिप्टेड संदेश पाठवतो.
Flutter का?
Flutter हे अनेक प्लॅटफॉर्मसाठी अॅप्स बनवण्याचे Google चे फ्रेमवर्क आहे. Timmy साठी याचा अर्थ असा की मी बरेच लॉजिक एकदाच लिहून Android आणि iOS दोन्हीवर वापरू शकतो. Timmy Android वर उपलब्ध आहे आणि iOS आवृत्ती लवकरच रिलीज होणार आहे. कमी डुप्लिकेट कोड म्हणजे बग शिरकाव करू शकतील अशी ठिकाणेही कमी.
सारांश
तांत्रिक नियम सोपा आहे: Timmy ने तिला खरोखर आवश्यक असलेल्या डेटालाच हाताळावे. WebRTC मीडिया सुरक्षित ठेवते, Firebase कनेक्शन सेटअपचा समन्वय करते, TURN ला फक्त एन्क्रिप्टेड पॅकेट्स दिसतात आणि Nearby Connections मुळे पेअरिंगमधली कटकट कमी होते.
चांगले तंत्रज्ञान थोडेसे दैनंदिन जीवनात मिसळून जाते. ते बाळाची खोली क्लाउड प्रोजेक्ट न बनवता सहज काम करते.