Блог

Как работи технически 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 улеснява сдвояването.

Добрата технология донякъде се слива с ежедневието. Тя просто работи, без да превръща детската стая в облачен проект.


Още статии