Blog

Cómo funciona Baby Monitor Timmy desde el punto de vista técnico

WebRTC, Firebase y la protección de extremo a extremo, explicados sin una maraña de palabras de moda.

Tres componentes, un objetivo

Por dentro, Timmy está construido de forma bastante pragmática: Flutter para la app, WebRTC para el audio y el vídeo en tiempo real, y Firebase para la coordinación. No quería crear una plataforma enorme que lo hiciera pasar todo por la nube. Cada parte debe saber lo mínimo posible y, aun así, funcionar de forma fiable con las demás.

WebRTC: conexión directa y cifrada por defecto

WebRTC (Web Real-Time Communication) transporta el audio y el vídeo entre el dispositivo del bebé y el de los padres. En el mejor de los casos, los datos fluyen directamente entre los dos dispositivos, de igual a igual, sin ningún servidor multimedia de por medio.

Todas las conexiones WebRTC usan DTLS-SRTP por defecto. Si alguien captura paquetes de red, no obtiene audio ni vídeo inteligibles. Este cifrado forma parte del protocolo y no se puede desactivar sin más en WebRTC.

Para mí, ese era el punto importante: el audio y el vídeo de la habitación del bebé no deben acabar en mi servidor. Se quedan entre tus dispositivos.

Señalización mediante Firebase Firestore

Antes de que WebRTC pueda empezar, los dispositivos tienen que encontrarse y acordar cómo pueden conectarse. A esa parte se la llama señalización. Timmy usa Firebase Firestore, la base de datos en la nube de Google, para ello.

Solo se intercambian datos técnicos de conexión:

El audio y el vídeo no llegan a Firebase. Firestore solo transporta los datos técnicos de conexión. Timmy también cifra esta capa de señalización, para que Firestore no se convierta en un punto de encuentro en texto sin cifrar para SDP e ICE.

Servidores TURN: cuando la conexión directa no funciona

Algunas redes bloquean las conexiones directas, por ejemplo, cortafuegos estrictos o determinadas operadoras móviles. Entonces WebRTC necesita un relé TURN (Traversal Using Relays around NAT).

Timmy prueba primero el servidor TURN local y usa Cloudflare como alternativa cuando el relé local no está disponible o está sobrecargado. El relé reenvía paquetes cifrados. No recibe las claves del sonido ni del vídeo; el cifrado de WebRTC se mantiene intacto.

Las credenciales de TURN proceden de una función de Cloud Functions para Firebase y solo son válidas durante 24 horas. Las credenciales permanentes en una app de vigilabebés me parecerían demasiado arriesgadas.

Nearby Connections: los dispositivos se encuentran automáticamente

Para evitar pasos de configuración incómodos entre el dispositivo del bebé y el de los padres, Timmy utiliza Nearby Connections. Google ofrece esta capa de detección mediante Bluetooth y Wi‑Fi.

El emparejamiento automático en Timmy funciona sin introducir códigos manualmente: los dispositivos se detectan entre sí y encuentran el mismo punto de encuentro para el intercambio de claves. Si falla, hay un código de 4 caracteres que puedes escribir. El código de emparejamiento nunca sale del dispositivo; Firestore solo ve un hash criptográfico (SHA-256) como identificador del documento.

Autenticación anónima

Timmy usa la autenticación anónima de Firebase. Al abrir la app por primera vez, cada dispositivo recibe un ID temporal y anónimo. No hay cuenta, dirección de correo electrónico ni contraseña. El ID solo sirve para aplicar las reglas de Firestore: solo los dispositivos autenticados pueden leer o escribir datos de sesión.

La arquitectura: quién envía y quién recibe

Timmy tiene dos modos:

Los controles, como «pulsar para hablar» y el encendido o apagado de la cámara, usan un DataChannel, otro canal de WebRTC que envía pequeños mensajes cifrados directamente entre los dispositivos.

¿Por qué Flutter?

Flutter es el framework de Google para crear apps en varias plataformas. Para Timmy, significa que puedo escribir gran parte de la lógica una sola vez y usarla en Android e iOS. Timmy está disponible en Android y la versión para iOS está a punto de publicarse. Menos código duplicado significa menos lugares donde pueden colarse errores.

Resumen

La regla técnica es sencilla: Timmy solo debe manejar los datos que realmente necesita. WebRTC protege el contenido multimedia, Firebase coordina la configuración de la conexión, TURN solo ve paquetes cifrados y Nearby Connections facilita el emparejamiento.

La buena tecnología pasa un poco desapercibida en el día a día. Funciona sin convertir la habitación del bebé en un proyecto en la nube.


Más artículos