تین بنیادی اجزا، ایک مقصد
اندر سے 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 آفرز اور جوابات: آلات کی صلاحیتیں بیان کرتے ہیں (سپورٹ شدہ codecs، resolutions وغیرہ)۔
- ICE candidates: ممکنہ نیٹ ورک راستے جن کے ذریعے آلات ایک دوسرے تک پہنچ سکتے ہیں۔
آڈیو اور ویڈیو Firebase میں نہیں جاتی۔ Firestore صرف تکنیکی کنکشن ڈیٹا منتقل کرتا ہے۔ Timmy اس سگنلنگ پرت کو بھی انکرپٹ کرتا ہے، اس لیے Firestore SDP اور ICE کے لیے سادہ متن کی ملاقات گاہ نہیں بنتا۔
TURN سرورز: جب براہِ راست راستہ کام نہ کرے
کچھ نیٹ ورکس براہِ راست کنکشن روک دیتے ہیں، مثلاً سخت فائر والز یا بعض موبائل نیٹ ورکس۔ تب WebRTC کو ایک TURN relay (Traversal Using Relays around NAT) کی ضرورت ہوتی ہے۔
Timmy پہلے مقامی TURN سرور آزماتا ہے اور جب مقامی relay دستیاب نہ ہو یا اس پر بہت بوجھ ہو تو Cloudflare کو متبادل کے طور پر استعمال کرتا ہے۔ relay انکرپٹڈ پیکٹس آگے بھیجتا ہے۔ اسے آواز یا ویڈیو کی keys نہیں ملتیں؛ WebRTC انکرپشن برقرار رہتی ہے۔
TURN کی اسناد Firebase Cloud Function سے آتی ہیں اور صرف 24 گھنٹے کے لیے درست ہوتی ہیں۔ بیبی مانیٹر ایپ میں مستقل اسناد میرے خیال میں بہت خطرناک ہوں گی۔
Nearby Connections: ڈیوائسز خود بخود ایک دوسرے کو ڈھونڈ لیتی ہیں
بچے اور والدین کے آلے کو جوڑنے کے غیر ضروری مشکل مراحل سے بچنے کے لیے، Timmy Nearby Connections استعمال کرتا ہے۔ Google Bluetooth اور WiFi کے ذریعے یہ دریافت کرنے کی پرت فراہم کرتا ہے۔
Timmy میں خودکار pairing دستی طور پر کوڈ داخل کیے بغیر کام کرتی ہے: آلات ایک دوسرے کو ڈھونڈتے ہیں اور key exchange کے لیے ایک ہی meeting point تلاش کر لیتے ہیں۔ اگر یہ ناکام ہو جائے تو آپ 4 حروف کا کوڈ ٹائپ کر سکتے ہیں۔ pairing code کبھی آلے سے باہر نہیں جاتا؛ Firestore کو صرف ایک cryptographic hash (SHA-256) بطور document identifier نظر آتا ہے۔
گمنام توثیق
Timmy Firebase Anonymous Authentication استعمال کرتا ہے۔ پہلی بار ایپ کھولنے پر، ہر آلے کو ایک عارضی، گمنام ID ملتی ہے۔ کوئی اکاؤنٹ، ای میل ایڈریس یا پاس ورڈ نہیں ہوتا۔ یہ ID صرف Firestore کے قواعد نافذ کرنے کے لیے ہے: صرف تصدیق شدہ آلات ہی سیشن ڈیٹا پڑھ یا لکھ سکتے ہیں۔
آرکیٹیکچر: کون بھیجتا ہے، کون وصول کرتا ہے
Timmy کے دو موڈ ہیں:
- بیبی موڈ (بھیجنے والا): آلہ مائیکروفون سے آڈیو لیتا ہے اور اسے WebRTC کے ذریعے والدین کے آلے تک بھیجتا ہے۔ چاہیں تو کیمرہ بھی فعال کیا جا سکتا ہے؛ پھر ویڈیو بھی براہِ راست بھیجی جاتی ہے۔
- پیرنٹ موڈ (وصول کرنے والا): آلہ آڈیو اور ویڈیو وصول کرتا ہے، کیمرے کی stream دکھاتا ہے، اور بچے والے آلے تک مختصر صوتی پیغامات بھیجنے کے لیے push-to-talk فراہم کرتا ہے۔
push-to-talk اور کیمرہ آن/آف جیسے کنٹرول ایک DataChannel استعمال کرتے ہیں، جو WebRTC کا ایک اور چینل ہے اور چھوٹے انکرپٹڈ پیغامات براہِ راست آلات کے درمیان بھیجتا ہے۔
Flutter کیوں؟
Flutter کئی پلیٹ فارمز کے لیے ایپس بنانے کا Google کا framework ہے۔ Timmy کے لیے اس کا مطلب ہے کہ میں زیادہ تر logic ایک بار لکھ کر اسے Android اور iOS، دونوں پر استعمال کر سکتا ہوں۔ Timmy Android پر دستیاب ہے، اور iOS ورژن ریلیز کے قریب ہے۔ کم دہرایا گیا code یعنی کم جگہیں جہاں bugs آ سکتے ہیں۔
خلاصہ
تکنیکی اصول سادہ ہے: Timmy کو صرف اسی ڈیٹا تک رسائی ہونی چاہیے جس کی اسے واقعی ضرورت ہے۔ WebRTC میڈیا کو محفوظ رکھتا ہے، Firebase کنکشن کی تیاری میں رابطہ کاری کرتا ہے، TURN صرف انکرپٹڈ پیکٹس دیکھتا ہے، اور Nearby Connections pairing کو آسان بناتا ہے۔
اچھی ٹیکنالوجی روزمرہ زندگی میں کچھ یوں گھل مل جاتی ہے کہ اس کا احساس نہیں رہتا۔ یہ بچوں کے کمرے کو کلاؤڈ پروجیکٹ بنائے بغیر کام کرتی ہے۔