બ્લોગ

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 સર્વર્સ: જ્યારે સીધો માર્ગ કામ ન કરે

કેટલાક નેટવર્ક સીધા કનેક્શન બ્લોક કરે છે, જેમ કે કડક ફાયરવૉલ અથવા કેટલીક મોબાઇલ નેટવર્ક સેવાઓ. ત્યારે WebRTCને TURN રિલે (Traversal Using Relays around NAT)ની જરૂર પડે છે.

Timmy પહેલાં સ્થાનિક TURN સર્વર અજમાવે છે અને સ્થાનિક રિલે ઉપલબ્ધ ન હોય અથવા વધુ લોડમાં હોય ત્યારે Cloudflareને વિકલ્પ તરીકે વાપરે છે. રિલે એનક્રિપ્ટેડ પેકેટ આગળ મોકલે છે. તેને અવાજ કે વિડિયોની કીઓ મળતી નથી; WebRTC એનક્રિપ્શન યથાવત રહે છે.

TURN ઓળખપત્રો Firebase Cloud Functionમાંથી આવે છે અને માત્ર 24 કલાક માટે માન્ય હોય છે. બેબી મોનિટર એપમાં કાયમી ઓળખપત્રો મારા મતે બહુ જોખમી હશે.

Nearby Connections: ડિવાઇસો એકબીજાને આપમેળે શોધે છે

બાળકના અને માતા-પિતાના ડિવાઇસ વચ્ચેના અણગમતા સેટઅપ પગલાં ટાળવા માટે, Timmy Nearby Connections વાપરે છે. Google Bluetooth અને WiFi મારફતે આ શોધવાની સુવિધા આપે છે.

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 પેરિંગને સરળ બનાવે છે.

સારી ટેક્નોલોજી રોજિંદા જીવનમાં થોડીઘણી ઓગળી જાય છે. તે નર્સરીને ક્લાઉડ પ્રોજેક્ટ બનાવ્યા વગર કામ કરે છે.


વધુ લેખો