Блог

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

WebRTC, Firebase и заштита од крај до крај, објаснети јасно и без непотребен технички жаргон.

Три градбени блока, една цел

Под хаубата, Timmy е направен прилично практично: Flutter за апликацијата, WebRTC за аудио и видео во реално време, и Firebase за координација. Не сакав да градам огромна платформа што турка сè преку облакот. Секој дел треба да знае што е можно помалку, а сепак сигурно да работи со другите.

WebRTC: директна врска, стандардно шифрирана

WebRTC (Web Real-Time Communication) пренесува аудио и видео меѓу уредите за бебето и родителот. Во најдобар случај, податоците течат директно меѓу двата уреда, од уред до уред, без медиумски сервер помеѓу нив.

Секоја 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. При првото стартување, секој уред добива привремен, анонимен ID. Нема сметка, е-пошта ниту лозинка. ID-то служи само за спроведување на правилата на Firestore: само автентицирани уреди смеат да читаат или запишуваат податоци за сесијата.

Архитектурата: кој испраќа, кој прима

Timmy има два режима:

Контролите како push-to-talk и вклучување/исклучување на камерата користат DataChannel, уште еден WebRTC канал што испраќа мали шифрирани пораки директно меѓу уредите.

Зошто Flutter?

Flutter е рамката на Google за апликации на повеќе платформи. За Timmy, тоа значи дека можам еднаш да напишам голем дел од логиката и да ја користам на Android и iOS. Timmy е достапен на Android, а верзијата за iOS е блиску до објавување. Помалку дуплиран код значи помалку места каде што може да се вовлечат грешки.

Резиме

Техничкото правило е едноставно: Timmy треба да ги допира само податоците што навистина му се потребни. WebRTC ги штити медиумите, Firebase го координира воспоставувањето на врската, TURN гледа само шифрирани пакети, а Nearby Connections го олеснува спарувањето.

Добрата технологија донекаде станува незабележлива во секојдневието. Работи без да ја претвори детската соба во проект во облакот.


Повеќе статии