මූලික කොටස් තුනක්, එක් අරමුණක්
ඇතුළතින් බලද්දී, Timmy නිර්මාණය කර ඇත්තේ ඉතා ප්රායෝගික ආකාරයකටයි: Flutter යෙදුම සඳහා, WebRTC තත්ය කාලීන ශබ්දය සහ වීඩියෝ සඳහා, සහ Firebase සම්බන්ධීකරණය සඳහා. සියල්ල cloud හරහා ගෙන යන විශාල වේදිකාවක් ගොඩනඟන්න මට අවශ්ය නොවුණි. සෑම කොටසක්ම හැකි තරම් අඩු දත්ත දැනගෙන, අනෙක් කොටස් සමඟ විශ්වාසදායකව ක්රියා කළ යුතුයි.
WebRTC: සෘජු සම්බන්ධතාවය, පෙරනිමියෙන්ම සංකේතාත්මකයි
WebRTC (Web Real-Time Communication) මඟින් බිළිඳාගේ උපාංගය සහ දෙමාපිය උපාංගය අතර ශබ්දය සහ වීඩියෝ යවයි. හොඳම අවස්ථාවේදී, දත්ත ගලා යන්නේ උපාංග දෙක අතර සෘජුවම, peer-to-peer ලෙසයි; අතරමැදි මාධ්ය සේවාදායකයක් නැහැ.
සෑම WebRTC සම්බන්ධතාවයක්ම පෙරනිමියෙන් DTLS-SRTP භාවිතා කරයි. කෙනෙකු ජාල පැකට් අල්ලා ගත්තත්, කියවිය හැකි ශබ්දය හෝ වීඩියෝ ලැබෙන්නේ නැහැ. මෙම සංකේතනය ප්රොටෝකෝලයේම කොටසක් වන අතර WebRTC තුළ එය සරලව අක්රිය කළ නොහැක.
මට වැදගත් වූ කාරණය ඒකයි: ළදරු කාමරයේ මාධ්ය දත්ත මගේ සේවාදායකයේ තිබිය යුතු නැහැ. එය ඔබේ උපාංග දෙක අතරම පවතී.
Firebase Firestore හරහා Signaling
WebRTC ආරම්භ වීමට පෙර, උපාංග එකිනෙක සොයාගෙන සම්බන්ධ විය හැකි ආකාරය තීරණය කළ යුතුයි. එම කොටස හැඳින්වෙන්නේ signaling ලෙසයි. Timmy ඒ සඳහා Google හි cloud දත්ත සමුදාය වන Firebase Firestore භාවිතා කරයි.
හුවමාරු වන්නේ තාක්ෂණික සම්බන්ධතා දත්ත පමණි:
- SDP offers සහ answers: උපාංගවල හැකියාවන් විස්තර කරයි (සහාය දක්වන codecs, resolutions ආදිය).
- ICE candidates: උපාංගවලට එකිනෙක ළඟා විය හැකි ජාල මාර්ග.
ශබ්දය සහ වීඩියෝ Firebase වෙත යන්නේ නැහැ. Firestore ප්රවාහනය කරන්නේ තාක්ෂණික සම්බන්ධතා දත්ත පමණි. Timmy මෙම signaling ස්ථරයද සංකේතනය කරයි. එබැවින් Firestore, SDP සහ ICE සඳහා plain text හමුවන තැනක් නොවේ.
TURN සේවාදායක: සෘජු මාර්ගය ක්රියා නොකරන විට
සමහර ජාල සෘජු සම්බන්ධතා අවහිර කරයි; උදාහරණයක් ලෙස දැඩි firewalls හෝ ඇතැම් ජංගම ජාල සපයන්නන්. එවිට WebRTC සඳහා අවශ්ය වන්නේ TURN relay එකක් (Traversal Using Relays around NAT).
Timmy මුලින්ම දේශීය TURN සේවාදායකය උත්සාහ කරන අතර, එම relay එක නොමැති නම් හෝ අධික බරක් තිබේ නම් පසුබැසීමක් ලෙස Cloudflare භාවිතා කරයි. relay එක සංකේතාත්මක පැකට් ඉදිරියට යවයි. එයට ශබ්දය හෝ වීඩියෝ සඳහා යතුරු ලැබෙන්නේ නැහැ; WebRTC සංකේතනය එලෙසම ආරක්ෂිතව පවතී.
TURN credentials Firebase Cloud Function එකකින් ලැබෙන අතර ඒවා වලංගු වන්නේ පැය 24කට පමණි. බේබි මොනිටර් යෙදුමක ස්ථිර credentials තිබීම මගේ රුචියට අනුව අධික අවදානමක්.
Nearby Connections: උපාංග එකිනෙක ස්වයංක්රීයව සොයා ගනී
බිළිඳාගේ සහ දෙමාපිය උපාංගය අතර කරදරකාරී පිහිටුවීම් පියවර මඟහැරීමට, Timmy භාවිතා කරන්නේ Nearby Connections යි. Google Bluetooth සහ WiFi හරහා මෙම සොයාගැනීමේ ස්ථරය සපයයි.
Timmy හි ස්වයංක්රීය යුගල කිරීම අතින් කේතයක් ඇතුළත් කිරීමකින් තොරව ක්රියා කරයි: උපාංග එකිනෙක සොයාගෙන යතුරු හුවමාරුව සඳහා එකම හමුවන ස්ථානය සොයා ගනී. එය අසාර්ථක වුවහොත්, ඔබට ඇතුළත් කළ හැකි අක්ෂර 4ක කේතයක් තිබේ. යුගල කිරීමේ කේතය කිසිවිටෙක උපාංගයෙන් පිටතට යන්නේ නැහැ; Firestore දකින්නේ document identifier එක ලෙස cryptographic hash (SHA-256) එකක් පමණි.
නිර්නාමික සත්යාපනය
Timmy Firebase Anonymous Authentication භාවිතා කරයි. පළමු වරට විවෘත කරන විට, සෑම උපාංගයකටම තාවකාලික, නිර්නාමික ID එකක් ලැබේ. ගිණුමක්, ඊමේල් ලිපිනයක් හෝ මුරපදයක් නැහැ. මෙම ID එක තිබෙන්නේ Firestore නීති ක්රියාත්මක කිරීමට පමණි: session දත්ත කියවීමට හෝ ලිවීමට හැක්කේ සත්යාපිත උපාංගවලට පමණි.
ව්යුහය: යවන්නේ කවුද, ලබන්නේ කවුද
Timmy හි මාදිලි දෙකක් තිබේ:
- Baby Mode (යවන්නා): උපාංගය මයික්රොෆෝනයෙන් ශබ්දය ලබාගෙන එය WebRTC හරහා දෙමාපිය උපාංගයට යවයි. අවශ්ය නම් කැමරාව සක්රිය කළ හැකි අතර, වීඩියෝවද සෘජුව යවයි.
- Parent Mode (ලබන්නා): උපාංගය ශබ්දය සහ වීඩියෝව ලබාගෙන, කැමරා දර්ශනය පෙන්වන අතර, බිළිඳාගේ උපාංගයට කෙටි හඬ පණිවිඩ යැවීමට push-to-talk ලබා දෙයි.
push-to-talk සහ කැමරාව on/off කිරීම වැනි පාලන සඳහා භාවිතා කරන්නේ DataChannel එකකි. එය උපාංග අතර කුඩා සංකේතාත්මක පණිවිඩ සෘජුව යවන තවත් WebRTC channel එකකි.
Flutter ඇයි?
Flutter යනු platform කිහිපයක් සඳහා යෙදුම් සෑදීමට ඇති Google framework එකයි. Timmy සඳහා එයින් අදහස් වන්නේ මට බොහෝ logic එක වරක් ලියා Android සහ iOS දෙකෙහිම භාවිතා කළ හැකි බවයි. Timmy Android සඳහා ලබාගත හැකි අතර iOS අනුවාදය නිකුත් වීමට ආසන්නයි. නැවත නැවත ලියන කේතය අඩු වීමෙන් දෝෂ ඇතුළු විය හැකි තැන් අඩුවේ.
සාරාංශය
තාක්ෂණික නියමය සරලයි: Timmy සැබවින්ම අවශ්ය දත්ත පමණක් භාවිතා කළ යුතුයි. WebRTC මාධ්යය ආරක්ෂා කරයි, Firebase සම්බන්ධතා පිහිටුවීම සම්බන්ධීකරණය කරයි, TURN දකින්නේ සංකේතාත්මක පැකට් පමණි, Nearby Connections යුගල කිරීමේ කරදර අඩු කරයි.
හොඳ තාක්ෂණය දෛනික ජීවිතයට ටිකක් මිශ්ර වී නොපෙනී යයි. ළදරු කාමරය cloud ව්යාපෘතියක් බවට පත් නොකර එය ක්රියා කරයි.