Tri blloqe ndërtuese, një qëllim
Në prapaskenë, Timmy është ndërtuar në mënyrë mjaft praktike: Flutter për aplikacionin, WebRTC për audio dhe video në kohë reale, dhe Firebase për koordinim. Nuk doja të ndërtoja një platformë gjigante që kalon gjithçka përmes cloud-it. Çdo pjesë duhet të dijë sa më pak të jetë e mundur dhe prapë të funksionojë me besueshmëri me të tjerat.
WebRTC: lidhje e drejtpërdrejtë, e enkriptuar si parazgjedhje
WebRTC (Web Real-Time Communication) përcjell audion dhe videon mes pajisjeve të bebit dhe prindit. Në rastin më të mirë, të dhënat kalojnë drejtpërdrejt mes dy pajisjeve, nga njëra pajisje te tjetra, pa server media në mes.
Çdo lidhje WebRTC përdor DTLS-SRTP si parazgjedhje. Nëse dikush kap paketat e rrjetit, nuk merr audio ose video të lexueshme. Ky enkriptim është pjesë e protokollit dhe nuk mund të çaktivizohet thjesht në WebRTC.
Kjo ishte pika e rëndësishme për mua: media e dhomës së bebit nuk i përket serverit tim. Ajo mbetet mes pajisjeve tuaja.
Sinjalizimi përmes Firebase Firestore
Para se WebRTC të mund të nisë, pajisjet duhet të gjejnë njëra-tjetrën dhe të negociojnë mënyrën si mund të lidhen. Kjo pjesë quhet sinjalizim. Timmy përdor Firebase Firestore, bazën e të dhënave cloud të Google, për këtë.
Shkëmbehen vetëm të dhëna teknike të lidhjes:
- Oferta dhe përgjigje SDP: Përshkruajnë aftësitë e pajisjeve (kodekët e mbështetur, rezolucionet etj.).
- Kandidatët ICE: Rrugë të mundshme rrjeti përmes të cilave pajisjet mund të arrijnë njëra-tjetrën.
Audioja dhe videoja nuk përfundojnë në Firebase. Firestore transporton vetëm të dhënat teknike të lidhjes. Timmy gjithashtu e enkripton këtë shtresë sinjalizimi, që Firestore të mos bëhet një vendtakim me tekst të qartë për SDP dhe ICE.
Serverët TURN: kur rruga e drejtpërdrejtë nuk funksionon
Disa rrjete bllokojnë lidhjet e drejtpërdrejta, për shembull firewall-e të rrepta ose disa operatorë celularë. Atëherë WebRTC ka nevojë për një server ndërmjetësues TURN (Traversal Using Relays around NAT).
Timmy provon fillimisht serverin lokal TURN dhe përdor Cloudflare si alternativë kur serveri ndërmjetësues lokal nuk është i disponueshëm ose është i mbingarkuar. Serveri ndërmjetësues përcjell paketa të enkriptuara. Ai nuk merr çelësat e audios apo të videos; enkriptimi WebRTC mbetet i paprekur.
Kredencialet TURN vijnë nga një Firebase Cloud Function dhe vlejnë vetëm për 24 orë. Kredencialet e përhershme në një aplikacion për monitorimin e bebit do të ishin tepër të rrezikshme për shijen time.
Nearby Connections: pajisjet e gjejnë njëra-tjetrën automatikisht
Për të shmangur hapat e bezdisshëm të konfigurimit mes pajisjes së bebit dhe asaj të prindit, Timmy përdor Nearby Connections. Google e ofron këtë shtresë zbulimi përmes Bluetooth dhe WiFi.
Çiftimi automatik në Timmy funksionon pa futje manuale të kodit: pajisjet zbulojnë njëra-tjetrën dhe gjejnë të njëjtën pikë takimi për shkëmbimin e çelësave. Nëse kjo dështon, ka një kod me 4 karaktere që mund ta shkruani. Kodi i çiftimit nuk del kurrë nga pajisja; Firestore sheh vetëm një hash kriptografik (SHA-256) si identifikues dokumenti.
Autentikim anonim
Timmy përdor Firebase Anonymous Authentication. Në nisjen e parë, çdo pajisje merr një ID të përkohshme dhe anonime. Nuk ka llogari, adresë emaili apo fjalëkalim. ID-ja shërben vetëm për zbatimin e rregullave të Firestore: vetëm pajisjet e autentikuara mund të lexojnë ose shkruajnë të dhëna sesioni.
Arkitektura: kush dërgon, kush merr
Timmy ka dy mënyra:
- Mënyra e bebit (dërguesi): Pajisja kap audion përmes mikrofonit dhe e dërgon te pajisja e prindit përmes WebRTC. Kamera mund të aktivizohet sipas dëshirës; videoja dërgohet gjithashtu drejtpërdrejt.
- Mënyra e prindit (marrësi): Pajisja merr audio dhe video, shfaq transmetimin e kamerës dhe ofron push-to-talk për mesazhe të shkurtra zanore drejt pajisjes së bebit.
Kontrollet si push-to-talk dhe ndezja/fikja e kamerës përdorin një DataChannel, një kanal tjetër WebRTC që dërgon drejtpërdrejt mes pajisjeve mesazhe të vogla të enkriptuara.
Pse Flutter?
Flutter është framework-u i Google për krijimin e aplikacioneve në shumë platforma. Për Timmy, kjo do të thotë se mund të shkruaj një pjesë të madhe të logjikës një herë dhe ta përdor në Android dhe iOS. Timmy është i disponueshëm në Android dhe versioni për iOS është pranë publikimit. Më pak kod i përsëritur do të thotë më pak vende ku mund të futen gabime.
Përmbledhje
Rregulli teknik është i thjeshtë: Timmy duhet të prekë vetëm të dhënat që i nevojiten vërtet. WebRTC mbron median, Firebase koordinon krijimin e lidhjes, TURN sheh vetëm paketa të enkriptuara dhe Nearby Connections e bën çiftimin më të thjeshtë.
Teknologjia e mirë zhduket paksa në jetën e përditshme. Ajo funksionon pa e kthyer dhomën e bebit në një projekt cloud.