Blog

Com funciona tècnicament Baby Monitor Timmy

WebRTC, Firebase i protecció d'extrem a extrem, explicats sense fum de paraules de moda.

Tres peces clau, un objectiu

Per dins, Timmy està construït d'una manera força pràctica: Flutter per a l'aplicació, WebRTC per a l'àudio i el vídeo en temps real, i Firebase per a la coordinació. No volia crear una plataforma enorme que fes passar-ho tot pel núvol. Cada part hauria de saber-ne el mínim possible i, alhora, funcionar de manera fiable amb les altres.

WebRTC: connexió directa, xifrada per defecte

WebRTC (Web Real-Time Communication) porta l'àudio i el vídeo entre el dispositiu del nadó i el dels pares. En el millor dels casos, les dades circulen directament entre els dos dispositius, de dispositiu a dispositiu, sense cap servidor multimèdia entremig.

Tota connexió WebRTC utilitza DTLS-SRTP per defecte. Si algú captura paquets de xarxa, no hi obté àudio ni vídeo llegibles. Aquest xifrat forma part del protocol i no es pot desactivar així com així a WebRTC.

Per a mi, aquest era el punt important: el contingut de l'habitació del nadó no ha de ser al meu servidor. Es queda entre els vostres dispositius.

Senyalització amb Firebase Firestore

Abans que WebRTC pugui començar, els dispositius s'han de trobar i negociar com es poden connectar. Aquesta part s'anomena senyalització. Timmy utilitza Firebase Firestore, la base de dades al núvol de Google, per fer-ho.

Només s'intercanvien dades tècniques de connexió:

L'àudio i el vídeo no arriben a Firebase. Firestore només transporta les dades tècniques de connexió. Timmy també xifra aquesta capa de senyalització, de manera que Firestore no es converteix en un punt de trobada en text clar per a SDP i ICE.

Servidors TURN: quan la ruta directa no funciona

Algunes xarxes bloquegen les connexions directes, per exemple els tallafocs estrictes o determinats operadors mòbils. Aleshores WebRTC necessita un relé TURN (Traversal Using Relays around NAT).

Timmy prova primer el servidor TURN local i fa servir Cloudflare com a alternativa quan el relé local no està disponible o està sobrecarregat. El relé reenvia paquets xifrats. No té les claus de l'àudio ni del vídeo; el xifrat de WebRTC es manté intacte.

Les credencials TURN provenen d'una Firebase Cloud Function i només són vàlides durant 24 hores. Les credencials permanents en una aplicació de vigilabebès em semblarien massa arriscades.

Nearby Connections: els dispositius es troben automàticament

Per evitar passos de configuració feixucs entre el dispositiu del nadó i el dels pares, Timmy utilitza Nearby Connections. Google proporciona aquesta capa de detecció mitjançant Bluetooth i Wi‑Fi.

L'aparellament automàtic a Timmy funciona sense introduir cap codi manualment: els dispositius es detecten i troben el mateix punt de trobada per a l'intercanvi de claus. Si falla, hi ha un codi de 4 caràcters que podeu escriure. El codi d'aparellament no surt mai del dispositiu; Firestore només veu un hash criptogràfic (SHA-256) com a identificador del document.

Autenticació anònima

Timmy utilitza Firebase Anonymous Authentication. En obrir l'aplicació per primer cop, cada dispositiu rep un identificador temporal i anònim. No hi ha cap compte, cap adreça electrònica ni cap contrasenya. L'identificador només serveix per aplicar les regles de Firestore: només els dispositius autenticats poden llegir o escriure dades de sessió.

L'arquitectura: qui envia i qui rep

Timmy té dos modes:

Els controls com ara prémer per parlar i activar o desactivar la càmera utilitzen un DataChannel, un altre canal WebRTC que envia missatges petits xifrats directament entre dispositius.

Per què Flutter?

Flutter és el framework de Google per crear aplicacions per a diverses plataformes. Per a Timmy, això vol dir que puc escriure molta lògica una sola vegada i fer-la servir a Android i iOS. Timmy està disponible per a Android, i la versió per a iOS és a punt de publicar-se. Menys codi duplicat vol dir menys llocs on es poden colar errors.

Resum

La regla tècnica és simple: Timmy només ha de tocar les dades que realment necessita. WebRTC protegeix el contingut multimèdia, Firebase coordina la configuració de la connexió, TURN només veu paquets xifrats i Nearby Connections fa que l'aparellament sigui més fàcil.

La bona tecnologia es va integrant una mica en el dia a dia. Funciona sense convertir l'habitació del nadó en un projecte al núvol.


Més articles