Blog

Cum funcționează Baby Monitor Timmy din punct de vedere tehnic

WebRTC, Firebase și protecția de la un capăt la altul, explicate fără jargon.

Trei componente, un singur scop

În culise, Timmy este construit într-un mod destul de pragmatic: Flutter pentru aplicație, WebRTC pentru audio și video în timp real, și Firebase pentru coordonare. Nu am vrut să construiesc o platformă uriașă care trimite totul prin cloud. Fiecare componentă ar trebui să știe cât mai puțin posibil și totuși să funcționeze fiabil împreună cu celelalte.

WebRTC: conexiune directă, criptată implicit

WebRTC (Web Real-Time Communication) transmite audio și video între dispozitivul copilului și cel al părintelui. În scenariul ideal, datele circulă direct între cele două dispozitive, peer-to-peer, fără un server media între ele.

Fiecare conexiune WebRTC folosește implicit DTLS-SRTP. Dacă cineva interceptează pachetele de rețea, nu obține conținut audio sau video inteligibil. Această criptare face parte din protocol și nu poate fi pur și simplu dezactivată în WebRTC.

Pentru mine, acesta a fost punctul important: datele audio-video din camera copilului nu au ce căuta pe serverul meu. Ele rămân între dispozitivele voastre.

Semnalizare prin Firebase Firestore

Înainte ca WebRTC să poată porni, dispozitivele trebuie să se găsească și să negocieze cum se pot conecta. Această parte se numește semnalizare. Timmy folosește Firebase Firestore, baza de date cloud de la Google, pentru asta.

Sunt transmise doar date tehnice de conectare:

Datele audio și video nu ajung în Firebase. Firestore transportă doar datele tehnice de conectare. Timmy criptează și acest nivel de semnalizare, astfel încât Firestore să nu devină un punct în care datele SDP și ICE sunt expuse în clar.

Servere TURN: când calea directă nu funcționează

Unele rețele blochează conexiunile directe, de exemplu firewall-uri stricte sau anumiți operatori de telefonie mobilă. Atunci WebRTC are nevoie de un releu TURN (Traversal Using Relays around NAT).

Timmy încearcă mai întâi serverul TURN local și folosește Cloudflare ca soluție de rezervă atunci când releul local nu este disponibil sau este supraîncărcat. Releul redirecționează pachete criptate. Nu primește cheile pentru conținutul audio sau video, iar criptarea WebRTC rămâne intactă.

Datele de autentificare TURN provin dintr-o Firebase Cloud Function și sunt valabile doar 24 de ore. Pentru mine, folosirea unor date de autentificare permanente într-o aplicație de monitorizare pentru bebeluși ar fi prea riscantă.

Nearby Connections: dispozitivele se găsesc automat

Pentru a evita pașii de configurare incomozi între dispozitivul copilului și cel al părintelui, Timmy folosește Nearby Connections. Google oferă acest mecanism de descoperire prin Bluetooth și Wi‑Fi.

Asocierea automată în Timmy funcționează fără introducerea manuală a unui cod: dispozitivele se descoperă reciproc și găsesc același punct de întâlnire pentru schimbul de chei. Dacă nu reușește, există un cod din 4 caractere pe care îl poți introduce. Codul de asociere nu părăsește niciodată dispozitivul; Firestore vede doar un hash criptografic (SHA-256) ca identificator al documentului.

Autentificare anonimă

Timmy folosește Firebase Anonymous Authentication. La prima pornire, fiecare dispozitiv primește un ID temporar, anonim. Nu există cont, adresă de e-mail sau parolă. ID-ul există doar pentru a aplica regulile Firestore: numai dispozitivele autentificate pot citi sau scrie datele sesiunii.

Arhitectura: cine trimite, cine primește

Timmy are două moduri:

Comenzi precum „apasă pentru a vorbi” și pornirea sau oprirea camerei folosesc un DataChannel, un alt canal WebRTC care trimite direct între dispozitive mesaje mici, criptate.

De ce Flutter?

Flutter este frameworkul Google pentru aplicații pe mai multe platforme. Pentru Timmy, asta înseamnă că pot scrie o mare parte din logică o singură dată și o pot folosi pe Android și iOS. Timmy este disponibil pe Android, iar versiunea pentru iOS este aproape de lansare. Mai puțin cod duplicat înseamnă mai puține locuri în care se pot strecura erori.

Pe scurt

Regula tehnică este simplă: Timmy ar trebui să acceseze doar datele de care are cu adevărat nevoie. WebRTC protejează datele media, Firebase coordonează configurarea conexiunii, TURN vede doar pachete criptate, iar Nearby Connections simplifică asocierea.

Tehnologia bună se integrează discret în viața de zi cu zi. Funcționează fără să transforme camera copilului într-un proiect cloud.


Mai multe articole