Emuārs

Kā tehniski darbojas Baby Monitor Timmy

WebRTC, Firebase un aizsardzība no gala līdz galam — bez tehnisko modes vārdu miglas.

Trīs pamatelementi, viens mērķis

Timmy pamatā ir veidots diezgan praktiski: Flutter lietotnei, WebRTC audio un video reāllaikā, un Firebase koordinācijai. Es negribēju veidot milzīgu platformu, kas visu sūta caur mākoni. Katrai daļai jāzina pēc iespējas mazāk, vienlaikus droši sadarbojoties ar pārējām.

WebRTC: tiešs savienojums un šifrēšana pēc noklusējuma

WebRTC (Web Real-Time Communication) pārraida audio un video starp bērna un vecāka ierīci. Ideālā gadījumā dati plūst tieši starp abām ierīcēm, vienādranga savienojumā, bez starpā esoša multivides servera.

Katrā WebRTC savienojumā pēc noklusējuma tiek izmantots DTLS-SRTP. Ja kāds pārtver tīkla paketes, viņš neiegūst nolasāmu audio vai video. Šī šifrēšana ir daļa no protokola, un WebRTC to nevar vienkārši izslēgt.

Man tas bija svarīgākais: bērnistabas audio un video nepieder manam serverim. Tie paliek starp jūsu ierīcēm.

Signalizācija ar Firebase Firestore

Lai WebRTC varētu sākt darbu, ierīcēm vispirms jāatrod vienai otra un jāvienojas, kā tās var savienoties. Šo daļu sauc par signalizāciju. Tam Timmy izmanto Google mākoņdatu bāzi Firebase Firestore.

Tiek apmainīti tikai tehniski savienojuma dati:

Audio un video nenonāk Firebase. Firestore pārsūta tikai tehniskos savienojuma datus. Timmy šifrē arī šo signalizācijas slāni, tāpēc Firestore nekļūst par SDP un ICE atklātā teksta satikšanās vietu.

TURN serveri: kad tiešais ceļš nedarbojas

Daži tīkli bloķē tiešos savienojumus, piemēram, stingri ugunsmūri vai atsevišķi mobilo sakaru operatori. Tad WebRTC nepieciešams TURN retranslators (Traversal Using Relays around NAT).

Timmy vispirms mēģina izmantot lokālo TURN serveri un kā rezerves variantu izmanto Cloudflare, ja lokālais retranslators nav pieejams vai ir pārslogots. Retranslators pārsūta šifrētas paketes. Tam nav piekļuves audio vai video atslēgām; WebRTC šifrēšana paliek neskarta.

TURN piekļuves dati tiek saņemti no Firebase Cloud Function un ir derīgi tikai 24 stundas. Pastāvīgi piekļuves dati mazuļu monitora lietotnē, manuprāt, būtu pārāk riskanti.

Nearby Connections: ierīces pašas atrod viena otru

Lai izvairītos no neveiklām iestatīšanas darbībām starp bērna un vecāka ierīci, Timmy izmanto Nearby Connections. Google nodrošina šo atrašanas slāni, izmantojot Bluetooth un Wi‑Fi.

Automātiskā savienošana pārī Timmy lietotnē notiek bez manuālas koda ievadīšanas: ierīces atrod viena otru un vienu un to pašu atslēgu apmaiņas vietu. Ja tas neizdodas, var ievadīt 4 rakstzīmju kodu. Savienošanas pārī kods nekad neatstāj ierīci; Firestore kā dokumenta identifikatoru redz tikai kriptogrāfisku jaucējkodu (SHA-256).

Anonīmā autentifikācija

Timmy izmanto Firebase anonīmo autentifikāciju. Pirmajā palaišanas reizē katra ierīce saņem pagaidu anonīmu ID. Nav konta, e-pasta adreses vai paroles. ID ir nepieciešams tikai Firestore noteikumu nodrošināšanai: sesijas datus drīkst lasīt vai rakstīt tikai autentificētas ierīces.

Arhitektūra: kas sūta un kas saņem

Timmy ir divi režīmi:

Tādas vadīklas kā rācijas funkcija un kameras ieslēgšana vai izslēgšana izmanto DataChannel, vēl vienu WebRTC kanālu, kas tieši starp ierīcēm nosūta nelielas šifrētas ziņas.

Kāpēc Flutter?

Flutter ir Google ietvars lietotnēm vairākās platformās. Timmy gadījumā tas nozīmē, ka lielu daļu loģikas varu uzrakstīt vienreiz un izmantot gan Android, gan iOS. Timmy ir pieejams Android ierīcēs, un iOS versijas izlaidums ir pavisam tuvu. Mazāk dublēta koda nozīmē mazāk vietu, kur var rasties kļūdas.

Kopsavilkums

Tehniskais princips ir vienkāršs: Timmy jāapstrādā tikai tie dati, kas tam patiešām nepieciešami. WebRTC aizsargā multividi, Firebase koordinē savienojuma izveidi, TURN redz tikai šifrētas paketes, un Nearby Connections padara savienošanu pārī vienkāršāku.

Laba tehnoloģija mazliet pazūd ikdienā. Tā vienkārši darbojas, nepārvēršot bērnistabu par mākoņprojektu.


Vairāk rakstu