Блог

Как технически работает Baby Monitor Timmy

WebRTC, Firebase и сквозная защита — без тумана из модных слов.

Три составляющих — одна цель

В основе Timmy лежит довольно практичный подход: Flutter для приложения, WebRTC для аудио и видео в реальном времени и Firebase для координации. Я не хотел создавать огромную платформу, которая пропускает всё через облако. Каждая часть должна знать как можно меньше, но при этом надёжно работать с остальными.

WebRTC: прямое соединение и шифрование по умолчанию

WebRTC (Web Real-Time Communication) передаёт аудио и видео между устройствами ребёнка и родителя. В идеальном случае данные идут напрямую между двумя устройствами, по схеме peer-to-peer, без медиасервера между ними.

Каждое соединение WebRTC по умолчанию использует DTLS-SRTP. Если кто-то перехватит сетевые пакеты, он не получит читаемых аудио- или видеоданных. Это шифрование является частью протокола и не может быть просто отключено в WebRTC.

Для меня это было принципиально: данные из детской не должны попадать на мой сервер. Они остаются только между вашими устройствами.

Сигналинг через Firebase Firestore

Прежде чем WebRTC начнёт работу, устройствам нужно найти друг друга и согласовать способ подключения. Эта часть называется сигналингом. Для этого Timmy использует Firebase Firestore — облачную базу данных Google.

Передаются только технические данные для соединения:

Аудио и видео не попадают в Firebase. Firestore передаёт только технические данные для соединения. Timmy также шифрует этот слой сигналинга, поэтому Firestore не становится точкой обмена незашифрованными данными SDP и ICE.

TURN-серверы: когда прямое соединение не работает

Некоторые сети блокируют прямые соединения — например, из-за строгих межсетевых экранов или у некоторых мобильных операторов. Тогда WebRTC нужен TURN-ретранслятор (Traversal Using Relays around NAT).

Timmy сначала пробует локальный TURN-сервер, а при недоступности или перегрузке локального ретранслятора использует Cloudflare как резервный вариант. Ретранслятор пересылает зашифрованные пакеты. У него нет ключей для расшифровки аудио или видео; шифрование WebRTC сохраняется.

Учётные данные TURN выдаёт Firebase Cloud Function, и они действуют всего 24 часа. Постоянные учётные данные в приложении-радионяне, на мой взгляд, были бы слишком рискованными.

Nearby Connections: устройства находят друг друга автоматически

Чтобы не усложнять настройку между устройством ребёнка и родительским устройством, Timmy использует Nearby Connections. Google предоставляет этот уровень обнаружения через Bluetooth и Wi‑Fi.

Автоматическое сопряжение в Timmy работает без ручного ввода кода: устройства обнаруживают друг друга и находят одну и ту же точку для обмена ключами. Если это не сработает, можно ввести 4-символьный код. Код сопряжения никогда не покидает устройство; Firestore видит только криптографический хеш (SHA-256) в качестве идентификатора документа.

Анонимная аутентификация

Timmy использует Firebase Anonymous Authentication. При первом запуске каждое устройство получает временный анонимный идентификатор. Здесь нет аккаунта, адреса электронной почты или пароля. Идентификатор нужен только для соблюдения правил Firestore: читать или записывать данные сеанса могут только аутентифицированные устройства.

Архитектура: кто отправляет, кто получает

У Timmy есть два режима:

Элементы управления, такие как «нажми и говори» и включение/выключение камеры, используют DataChannel, ещё один канал WebRTC, который напрямую передаёт между устройствами небольшие зашифрованные сообщения.

Почему Flutter?

Flutter — фреймворк Google для приложений на разных платформах. Для Timmy это означает, что большую часть логики можно написать один раз и использовать и на Android, и на iOS. Timmy доступен на Android, а версия для iOS скоро выйдет. Чем меньше дублирующегося кода, тем меньше мест, где могут появиться ошибки.

Итог

Технический принцип прост: Timmy должен работать только с теми данными, которые ему действительно нужны. WebRTC защищает медиаданные, Firebase координирует настройку соединения, TURN видит только зашифрованные пакеты, а Nearby Connections упрощает сопряжение.

Хорошая технология немного растворяется в повседневной жизни. Она работает, не превращая детскую в облачный проект.


Другие статьи