Բլոգ

Ինչպես է տեխնիկապես աշխատում 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-ն օգտագործում է Google-ի ամպային տվյալների բազան՝ Firebase Firestore-ը։

Փոխանակվում են միայն կապի տեխնիկական տվյալներ՝

Ձայնն ու տեսանյութը Firebase չեն հասնում։ Firestore-ը փոխանցում է միայն կապի տեխնիկական տվյալները։ Timmy-ն կոդավորում է նաև այս ազդանշանավորման շերտը, այնպես որ Firestore-ը չի դառնում SDP և ICE տվյալների բաց տեքստով հանդիպման վայր։

TURN սերվերներ. երբ ուղիղ կապը չի աշխատում

Որոշ ցանցեր արգելափակում են ուղիղ կապերը, օրինակ՝ խիստ firewall-ները կամ որոշ բջջային օպերատորներ։ Այդ դեպքում WebRTC-ին պետք է TURN փոխանցող սերվեր (Traversal Using Relays around NAT)։

Timmy-ն նախ փորձում է տեղային TURN սերվերը, իսկ եթե այն անհասանելի է կամ գերծանրաբեռնված, որպես պահուստային տարբերակ օգտագործում է Cloudflare-ը։ Փոխանցող սերվերը պարզապես փոխանցում է կոդավորված փաթեթները։ Այն ձայնի կամ տեսանյութի բանալիներ չի ստանում. WebRTC-ի կոդավորումը մնում է անխախտ։

TURN-ի մուտքի տվյալները գալիս են Firebase Cloud Function-ից և գործում են ընդամենը 24 ժամ։ Երեխայի մոնիտորի հավելվածում մշտական մուտքի տվյալները, իմ կարծիքով, չափազանց ռիսկային կլինեին։

Մոտակա կապեր. սարքերն ավտոմատ գտնում են միմյանց

Որպեսզի երեխայի և ծնողի սարքերի միջև կարգավորումը անհարմար քայլեր չպահանջի, Timmy-ն օգտագործում է Nearby Connections։ Google-ն այս հայտնաբերման շերտն ապահովում է Bluetooth-ի և Wi‑Fi-ի միջոցով։

Timmy-ում ավտոմատ զուգակցումը աշխատում է առանց կոդը ձեռքով մուտքագրելու․ սարքերը հայտնաբերում են միմյանց և բանալիների փոխանակման համար գտնում նույն հանդիպման կետը։ Եթե դա չհաջողվի, կարող եք մուտքագրել 4 նիշից բաղկացած կոդ։ Զուգակցման կոդը երբեք չի լքում սարքը․ Firestore-ը որպես փաստաթղթի նույնացուցիչ տեսնում է միայն կրիպտոգրաֆիկ հեշ (SHA-256)։

Անանուն նույնականացում

Timmy-ն օգտագործում է Firebase Anonymous Authentication։ Առաջին գործարկման ժամանակ յուրաքանչյուր սարք ստանում է ժամանակավոր, անանուն ID։ Չկա հաշիվ, էլփոստի հասցե կամ գաղտնաբառ։ ID-ն միայն Firestore-ի կանոնները կիրառելու համար է. միայն նույնականացված սարքերը կարող են կարդալ կամ գրել սեսիայի տվյալներ։

Ճարտարապետությունը. ով է ուղարկում, ով՝ ստանում

Timmy-ն ունի երկու ռեժիմ՝

Սեղմելով խոսելու և տեսախցիկը միացնելու կամ անջատելու կառավարման հրամանները փոխանցվում են DataChannel՝ մեկ այլ WebRTC ալիք, որը փոքր կոդավորված հաղորդագրություններն ուղիղ փոխանցում է սարքերի միջև։

Ինչո՞ւ Flutter

Flutter-ը Google-ի բազմահարթակ հավելվածների շրջանակն է։ Timmy-ի համար դա նշանակում է, որ կարող եմ տրամաբանության մեծ մասը մեկ անգամ գրել և օգտագործել Android-ում ու iOS-ում։ Timmy-ն հասանելի է Android-ում, իսկ iOS տարբերակը շուտով պատրաստ կլինի։ Կրկնվող կոդի պակասը նշանակում է ավելի քիչ տեղ, որտեղ կարող են սխալներ հայտնվել։

Ամփոփում

Տեխնիկական կանոնը պարզ է․ Timmy-ն պետք է գործ ունենա միայն այն տվյալների հետ, որոնք իսկապես անհրաժեշտ են։ WebRTC-ը պաշտպանում է մեդիան, Firebase-ը համակարգում է կապի ստեղծումը, TURN-ը տեսնում է միայն կոդավորված փաթեթներ, իսկ Nearby Connections-ը հեշտացնում է զուգակցումը։

Լավ տեխնոլոգիան առօրյա կյանքում գրեթե աննկատ է դառնում։ Այն աշխատում է՝ առանց մանկասենյակն ամպային նախագծի վերածելու։


Ավելի շատ հոդվածներ