Drie boublokke, een doel
Agter die skerms is Timmy op ’n redelik praktiese manier gebou: Flutter vir die app, WebRTC vir intydse klank en video, en Firebase vir koördinering. Ek wou nie ’n groot platform bou wat alles deur die wolk stoot nie. Elke deel moet so min moontlik weet en steeds betroubaar met die ander saamwerk.
WebRTC: Direkte verbinding, standaard geënkripteer
WebRTC (Web Real-Time Communication) dra klank en video tussen die baba- en ouertoestelle oor. In die beste geval vloei die data direk tussen die twee toestelle, eweknie-tot-eweknie, sonder ’n mediabediener tussenin.
Elke WebRTC-verbinding gebruik standaard DTLS-SRTP. As iemand netwerkpakkette onderskep, kry hulle nie leesbare klank of video nie. Hierdie enkripsie is deel van die protokol en kan nie sommer in WebRTC afgeskakel word nie.
Dit was vir my die belangrike punt: media uit die babakamer hoort nie op my bediener nie. Dit bly tussen jou toestelle.
Seinuitruiling via Firebase Firestore
Voordat WebRTC kan begin, moet die toestelle mekaar vind en onderhandel oor hoe hulle kan koppel. Daardie deel word seinuitruiling genoem. Timmy gebruik Firebase Firestore, Google se wolkdatabasis, daarvoor.
Slegs tegniese verbindingsdata word uitgeruil:
- SDP-aanbiedinge en -antwoorde: Beskryf die vermoëns van die toestelle (ondersteunde codecs, resolusies, ens.).
- ICE-kandidate: Moontlike netwerkpaaie waardeur die toestelle mekaar kan bereik.
Klank en video beland nie in Firebase nie. Firestore vervoer net die tegniese verbindingsdata. Timmy enkripteer ook hierdie seinlaag, sodat Firestore nie ’n ongeënkripteerde ontmoetingsplek vir SDP en ICE word nie.
TURN-bedieners: Wanneer die direkte pad nie werk nie
Sommige netwerke blokkeer direkte verbindings, byvoorbeeld streng brandmure of sekere mobiele netwerke. Dan het WebRTC ’n TURN-aflos (Traversal Using Relays around NAT) nodig.
Timmy probeer eers die plaaslike TURN-bediener en gebruik Cloudflare as terugval wanneer die plaaslike aflos nie beskikbaar is of oorlaai is nie. Die aflos stuur geënkripteerde pakkette aan. Dit kry nie sleutels vir klank of video nie; WebRTC-enkripsie bly ongeskonde.
TURN-toegangsbewyse kom van ’n Firebase Cloud Function en is net 24 uur geldig. Permanente toegangsbewyse in ’n babamonitor-app sou vir my smaak te riskant wees.
Nabygeleë verbindings: Toestelle vind mekaar outomaties
Om omslagtige opstelstappe tussen die baba- en ouertoestel te vermy, gebruik Timmy Nearby Connections. Google bied hierdie ontdekkingslaag via Bluetooth en WiFi.
Outomatiese koppeling in Timmy werk sonder dat jy ’n kode handmatig invoer: die toestelle ontdek mekaar en vind dieselfde ontmoetingspunt vir die sleuteluitruiling. As dit misluk, is daar ’n kode van 4 karakters wat jy kan intik. Die koppelingskode verlaat nooit die toestel nie; Firestore sien net ’n kriptografiese hutswaarde (SHA-256) as die dokumentidentifiseerder.
Anonieme stawing
Timmy gebruik Firebase Anonymous Authentication. Met die eerste gebruik kry elke toestel ’n tydelike, anonieme ID. Daar is geen rekening, e-posadres of wagwoord nie. Die ID is net daar om Firestore-reëls toe te pas: slegs geverifieerde toestelle mag sessiedata lees of skryf.
Die argitektuur: Wie stuur, wie ontvang
Timmy het twee modusse:
- Babamodus (sender): Die toestel neem klank via die mikrofoon op en stuur dit via WebRTC na die ouertoestel. Die kamera kan opsioneel geaktiveer word; video word dan ook direk gestuur.
- Ouermodus (ontvanger): Die toestel ontvang klank en video, wys die kamerastroom en bied druk-om-te-praat vir kort stemboodskappe na die babatoestel.
Kontroles soos druk-om-te-praat en kamera aan/af gebruik ’n DataChannel, nog ’n WebRTC-kanaal wat klein geënkripteerde boodskappe direk tussen toestelle stuur.
Waarom Flutter?
Flutter is Google se raamwerk vir apps op verskeie platforms. Vir Timmy beteken dit ek kan baie van die logika een keer skryf en dit op Android en iOS gebruik. Timmy is op Android beskikbaar, en die iOS-weergawe is amper gereed vir vrystelling. Minder gedupliseerde kode beteken minder plekke waar foute kan insluip.
Opsomming
Die tegniese reël is eenvoudig: Timmy moet net die data hanteer wat dit werklik nodig het. WebRTC beskerm die media, Firebase koördineer die verbindingsopstelling, TURN sien net geënkripteerde pakkette, en Nearby Connections maak koppeling makliker.
Goeie tegnologie verdwyn ’n bietjie in die alledaagse lewe. Dit werk sonder om die babakamer in ’n wolkprojek te verander.