Tri základné prvky, jeden cieľ
V zákulisí je Timmy postavený celkom pragmaticky: Flutter pre aplikáciu, WebRTC pre zvuk a video v reálnom čase a Firebase na koordináciu. Nechcel som vytvoriť obrovskú platformu, ktorá všetko posiela cez cloud. Každá časť má vedieť čo najmenej a pritom spoľahlivo fungovať s ostatnými.
WebRTC: priame spojenie, štandardne šifrované
WebRTC (Web Real-Time Communication) prenáša zvuk a video medzi zariadením pri bábätku a zariadením rodiča. V ideálnom prípade dáta prúdia priamo medzi týmito dvoma zariadeniami, peer-to-peer, bez mediálneho servera medzi nimi.
Každé spojenie WebRTC štandardne používa DTLS-SRTP. Ak niekto zachytí sieťové pakety, nezíska čitateľný zvuk ani video. Toto šifrovanie je súčasťou protokolu a vo WebRTC sa nedá jednoducho vypnúť.
To bol pre mňa dôležitý bod: médiá z detskej izby nepatria na môj server. Zostávajú medzi vašimi zariadeniami.
Signalizácia cez Firebase Firestore
Skôr než sa môže WebRTC spustiť, zariadenia sa musia navzájom nájsť a dohodnúť sa, ako sa môžu pripojiť. Táto časť sa nazýva signalizácia. Timmy na ňu používa Firebase Firestore, cloudovú databázu od Googlu.
Vymieňajú sa iba technické údaje o pripojení:
- Ponuky a odpovede SDP: Opisujú možnosti zariadení (podporované kodeky, rozlíšenia atď.).
- Kandidáti ICE: Možné sieťové cesty, cez ktoré sa zariadenia môžu navzájom dosiahnuť.
Zvuk ani video sa do Firebase neukladajú. Firestore prenáša iba technické údaje o pripojení. Timmy túto signalizačnú vrstvu tiež šifruje, takže Firestore sa nestane miestom, kde sú SDP a ICE v otvorenom texte.
Servery TURN: keď priama cesta nefunguje
Niektoré siete blokujú priame spojenia, napríklad prísne firewally alebo niektorí mobilní operátori. Vtedy WebRTC potrebuje sprostredkovací server TURN (Traversal Using Relays around NAT).
Timmy najskôr skúsi lokálny server TURN a Cloudflare použije ako zálohu, keď lokálny sprostredkovací server nie je dostupný alebo je preťažený. Sprostredkovací server preposiela šifrované pakety. Nemá kľúče k zvuku ani videu; šifrovanie WebRTC zostáva zachované.
Prihlasovacie údaje TURN pochádzajú z Firebase Cloud Function a platia iba 24 hodín. Trvalé prihlasovacie údaje v aplikácii na monitorovanie bábätka by boli podľa mňa príliš rizikové.
Pripojenia nablízku: zariadenia sa nájdu automaticky
Aby sa predišlo zdĺhavému nastavovaniu medzi zariadením pri bábätku a zariadením rodiča, Timmy používa Nearby Connections. Google poskytuje túto vrstvu na objavovanie zariadení cez Bluetooth a Wi‑Fi.
Automatické párovanie v Timmy funguje bez ručného zadávania kódu: zariadenia sa navzájom nájdu a nájdu rovnaké miesto stretnutia na výmenu kľúčov. Ak to zlyhá, môžete zadať 4-znakový kód. Párovací kód nikdy neopustí zariadenie; Firestore vidí iba kryptografický hash (SHA-256) ako identifikátor dokumentu.
Anonymné overenie
Timmy používa anonymné overenie Firebase. Pri prvom spustení dostane každé zariadenie dočasné anonymné ID. Nie je potrebný účet, e-mailová adresa ani heslo. ID slúži iba na vynútenie pravidiel Firestore: údaje relácie môžu čítať alebo zapisovať iba overené zariadenia.
Architektúra: kto odosiela, kto prijíma
Timmy má dva režimy:
- Režim bábätka (odosielateľ): Zariadenie zachytáva zvuk cez mikrofón a posiela ho do zariadenia rodiča cez WebRTC. Voliteľne sa dá aktivovať kamera; video sa potom tiež posiela priamo.
- Režim rodiča (prijímač): Zariadenie prijíma zvuk a video, zobrazuje obraz z kamery a ponúka funkciu push-to-talk na krátke hlasové správy do zariadenia pri bábätku.
Ovládanie, napríklad push-to-talk a zapnutie/vypnutie kamery, používa DataChannel, ďalší kanál WebRTC, ktorý posiela malé šifrované správy priamo medzi zariadeniami.
Prečo Flutter?
Flutter je framework od Googlu na aplikácie pre viacero platforiem. Pre Timmy to znamená, že veľkú časť logiky môžem napísať raz a používať ju v Androide aj iOS. Timmy je dostupný pre Android a verzia pre iOS je tesne pred vydaním. Menej duplicitného kódu znamená menej miest, kde sa môžu objaviť chyby.
Zhrnutie
Technické pravidlo je jednoduché: Timmy má pracovať len s dátami, ktoré naozaj potrebuje. WebRTC chráni médiá, Firebase koordinuje vytvorenie spojenia, TURN vidí iba šifrované pakety a Nearby Connections zjednodušuje párovanie.
Dobrá technológia trochu mizne v každodennom živote. Funguje bez toho, aby sa detská izba zmenila na cloudový projekt.