Үш негізгі бөлік, бір мақсат
Техникалық жағынан Timmy барынша практикалық тәсілмен жасалған: Flutter қолданба үшін, WebRTC нақты уақыттағы дыбыс пен бейне үшін және Firebase үйлестіру үшін. Барлығын бұлт арқылы өткізетін алып платформа жасағым келмеді. Әр бөлік мүмкіндігінше аз дерек біліп, сонымен бірге басқаларымен сенімді жұмыс істеуі керек.
WebRTC: тікелей байланыс, әдепкіде шифрланған
WebRTC (Web Real-Time Communication) бала құрылғысы мен ата-ана құрылғысы арасында дыбыс пен бейнені тасымалдайды. Ең қолайлы жағдайда деректер екі құрылғының арасында тікелей, яғни тең дәрежелі (peer-to-peer) байланыспен, арадағы медиа-серверсіз ағады.
Әрбір WebRTC байланысы әдепкіде DTLS-SRTP протоколын қолданады. Біреу желілік пакеттерді ұстап алса да, дыбыс пен бейненің мазмұнын оқи алмайды. Бұл шифрлау протоколдың ажырамас бөлігі, сондықтан оны WebRTC-де жай ғана өшіру мүмкін емес.
Мен үшін маңыздысы осы болды: бала бөлмесіндегі медиа деректер менің серверімде болмауы керек. Ол сіздің құрылғыларыңыздың арасында қалады.
Firebase Firestore арқылы сигнал беру
WebRTC іске қосылмас бұрын, құрылғылар бірін-бірі тауып, қалай қосылатынын келісуі керек. Бұл бөлік сигнал беру деп аталады. Timmy бұл үшін Google-дың Firebase Firestore атты бұлттық дерекқорын пайдаланады.
Тек техникалық қосылым деректері алмасылады:
- SDP ұсыныстары мен жауаптары: Құрылғылардың мүмкіндіктерін сипаттайды (қолдайтын кодектер, ажыратымдылықтар және т.б.).
- ICE кандидаттары: Құрылғылар бір-біріне жете алатын ықтимал желілік жолдар.
Дыбыс пен бейне Firebase-ке түспейді. Firestore тек техникалық қосылу деректерін тасымалдайды. Timmy осы сигнал беру қабатын да шифрлайды, сондықтан Firestore SDP мен ICE үшін ашық мәтіндегі кездесу орнына айналмайды.
TURN серверлері: тікелей жол жұмыс істемесе
Кей желілер тікелей қосылуды бұғаттайды, мысалы қатаң брандмауэрлер немесе кейбір ұялы байланыс операторлары. Ондайда WebRTC-ге TURN релесі (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 қызметін қолданады. Алғаш рет іске қосылғанда әр құрылғыға уақытша анонимді идентификатор беріледі. Тіркелгі, электрондық пошта мекенжайы немесе құпиясөз қажет емес. Бұл идентификатор Firestore ережелерін орындау үшін ғана қолданылады: сеанс деректерін тек аутентификациядан өткен құрылғылар оқи немесе жаза алады.
Архитектура: кім жібереді, кім қабылдайды
Timmy-де екі режим бар:
- Бала режимі (жіберуші): Құрылғы микрофон арқылы дыбысты жазып алып, оны WebRTC арқылы ата-ана құрылғысына жібереді. Қажет болса, камераны қосуға болады; онда бейне де тікелей жіберіледі.
- Ата-ана режимі (қабылдаушы): Құрылғы дыбыс пен бейнені қабылдайды, камера ағынын көрсетеді және бала құрылғысына қысқа дауыстық хабарламалар жіберуге арналған басып-сөйлеу мүмкіндігін ұсынады.
Басып-сөйлеу және камераны қосу/өшіру сияқты басқару функциялары DataChannel арқылы жұмыс істейді — бұл құрылғылар арасында шағын шифрланған хабарламаларды тікелей жіберетін тағы бір WebRTC арнасы.
Неліктен Flutter?
Flutter — Google-дың бірнеше платформаға арналған қолданбалар әзірлеу фреймворкі. Timmy үшін бұл логиканың көп бөлігін бір рет жазып, Android пен iOS жүйелерінде пайдалануға мүмкіндік береді. Timmy Android жүйесінде қолжетімді, ал iOS нұсқасы жақында шығады. Қайталанатын код азайған сайын, қате кетуі мүмкін орындар да азаяды.
Қорытынды
Техникалық қағида қарапайым: Timmy өзіне шынымен қажет деректермен ғана жұмыс істеуі керек. WebRTC медианы қорғайды, Firebase қосылуды баптауды үйлестіреді, TURN тек шифрланған пакеттерді көреді, ал Nearby Connections жұптастыруды жеңілдетеді.
Жақсы технология күнделікті өмірге көзге түспей сіңіп кетеді. Ол бала бөлмесін бұлттық жобаға айналдырмай-ақ жұмыс істейді.