ಮೂರು ಮೂಲ ಘಟಕಗಳು, ಒಂದು ಗುರಿ
ಒಳಗಡೆ, Timmy ಅನ್ನು ಸಾಕಷ್ಟು ಪ್ರಾಯೋಗಿಕವಾಗಿ ನಿರ್ಮಿಸಲಾಗಿದೆ: Flutter ಆ್ಯಪ್ಗಾಗಿ, WebRTC ನೈಜ ಸಮಯದ ಆಡಿಯೋ ಮತ್ತು ವೀಡಿಯೊಗಾಗಿ, ಮತ್ತು Firebase ಸಮನ್ವಯಕ್ಕಾಗಿ. ಎಲ್ಲವನ್ನೂ ಕ್ಲೌಡ್ ಮೂಲಕ ಸಾಗಿಸುವ ದೊಡ್ಡ ಪ್ಲಾಟ್ಫಾರ್ಮ್ ಕಟ್ಟಲು ನನಗೆ ಇಷ್ಟವಿರಲಿಲ್ಲ. ಪ್ರತಿಯೊಂದು ಭಾಗವೂ ಸಾಧ್ಯವಾದಷ್ಟು ಕಡಿಮೆ ತಿಳಿದಿದ್ದರೂ, ಉಳಿದ ಭಾಗಗಳೊಂದಿಗೆ ವಿಶ್ವಾಸಾರ್ಹವಾಗಿ ಕೆಲಸ ಮಾಡಬೇಕು.
WebRTC: ನೇರ ಸಂಪರ್ಕ, ಡೀಫಾಲ್ಟ್ ಆಗಿಯೇ ಎನ್ಕ್ರಿಪ್ಟ್
WebRTC (Web Real-Time Communication) ಮಗು ಮತ್ತು ಪೋಷಕರ ಸಾಧನಗಳ ನಡುವೆ ಆಡಿಯೋ ಹಾಗೂ ವೀಡಿಯೊವನ್ನು ಸಾಗಿಸುತ್ತದೆ. ಅತ್ಯುತ್ತಮ ಪರಿಸ್ಥಿತಿಯಲ್ಲಿ, ಡೇಟಾ ಎರಡು ಸಾಧನಗಳ ನಡುವೆ ನೇರವಾಗಿ, ಪೀರ್-ಟು-ಪೀರ್ ಆಗಿ, ಮಧ್ಯದಲ್ಲಿ ಯಾವುದೇ ಮೀಡಿಯಾ ಸರ್ವರ್ ಇಲ್ಲದೆ ಹರಿಯುತ್ತದೆ.
ಪ್ರತಿ WebRTC ಸಂಪರ್ಕವೂ ಡೀಫಾಲ್ಟ್ ಆಗಿ DTLS-SRTP ಬಳಸುತ್ತದೆ. ಯಾರಾದರೂ ನೆಟ್ವರ್ಕ್ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಸೆರೆಹಿಡಿದರೂ, ಅವರಿಗೆ ಓದಬಹುದಾದ ಆಡಿಯೋ ಅಥವಾ ವೀಡಿಯೊ ಸಿಗುವುದಿಲ್ಲ. ಈ ಎನ್ಕ್ರಿಪ್ಶನ್ ಪ್ರೋಟೋಕಾಲ್ನ ಭಾಗವಾಗಿದ್ದು, WebRTCಯಲ್ಲಿ ಇದನ್ನು ಸುಮ್ಮನೆ ಆಫ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ.
ನನಗೆ ಇದು ಮುಖ್ಯವಾಗಿತ್ತು: ನರ್ಸರಿಯ ಮೀಡಿಯಾ ನನ್ನ ಸರ್ವರ್ನಲ್ಲಿ ಇರಬಾರದು. ಅದು ನಿಮ್ಮ ಸಾಧನಗಳ ನಡುವೆಯೇ ಇರುತ್ತದೆ.
Firebase Firestore ಮೂಲಕ ಸಿಗ್ನಲಿಂಗ್
WebRTC ಆರಂಭವಾಗುವ ಮೊದಲು, ಸಾಧನಗಳು ಒಂದನ್ನೊಂದು ಕಂಡು ಸಂಪರ್ಕಿಸಬಹುದಾದ ವಿಧಾನವನ್ನು ನಿರ್ಧರಿಸಬೇಕು. ಈ ಹಂತವನ್ನು ಸಿಗ್ನಲಿಂಗ್ಎನ್ನುತ್ತಾರೆ. ಇದಕ್ಕಾಗಿ Timmy, Googleನ ಕ್ಲೌಡ್ ಡೇಟಾಬೇಸ್ ಆದ Firebase Firestore ಅನ್ನು ಬಳಸುತ್ತದೆ.
ತಾಂತ್ರಿಕ ಸಂಪರ್ಕದ ಮಾಹಿತಿ ಮಾತ್ರ ವಿನಿಮಯವಾಗುತ್ತದೆ:
- SDP ಆಫರ್ಗಳು ಮತ್ತು ಉತ್ತರಗಳು: ಸಾಧನಗಳ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ವಿವರಿಸುತ್ತವೆ (ಬೆಂಬಲಿತ ಕೋಡೆಕ್ಗಳು, ರೆಸಲ್ಯೂಷನ್ಗಳು ಇತ್ಯಾದಿ).
- ICE ಅಭ್ಯರ್ಥಿಗಳು: ಸಾಧನಗಳು ಪರಸ್ಪರ ತಲುಪಲು ಸಾಧ್ಯವಾಗುವ ನೆಟ್ವರ್ಕ್ ಮಾರ್ಗಗಳು.
ಆಡಿಯೋ ಮತ್ತು ವೀಡಿಯೊ 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 ಸಿಗುತ್ತದೆ. ಯಾವುದೇ ಖಾತೆ, ಇಮೇಲ್ ವಿಳಾಸ ಅಥವಾ ಪಾಸ್ವರ್ಡ್ ಇಲ್ಲ. Firestore ನಿಯಮಗಳನ್ನು ಜಾರಿಗೊಳಿಸುವುದಕ್ಕಷ್ಟೇ ಈ ID ಇದೆ: ದೃಢೀಕೃತ ಸಾಧನಗಳು ಮಾತ್ರ ಸೆಷನ್ ಡೇಟಾವನ್ನು ಓದಬಹುದು ಅಥವಾ ಬರೆಯಬಹುದು.
ವಾಸ್ತುಶಿಲ್ಪ: ಯಾರು ಕಳುಹಿಸುತ್ತಾರೆ, ಯಾರು ಸ್ವೀಕರಿಸುತ್ತಾರೆ
Timmyಯಲ್ಲಿ ಎರಡು ಮೋಡ್ಗಳಿವೆ:
- ಬೇಬಿ ಮೋಡ್ (ಕಳುಹಿಸುವ ಸಾಧನ): ಸಾಧನವು ಮೈಕ್ರೋಫೋನ್ ಮೂಲಕ ಆಡಿಯೋ ಸೆರೆಹಿಡಿದು WebRTC ಮೂಲಕ ಪೋಷಕರ ಸಾಧನಕ್ಕೆ ಕಳುಹಿಸುತ್ತದೆ. ಬೇಕಾದರೆ ಕ್ಯಾಮೆರಾವನ್ನು ಆನ್ ಮಾಡಬಹುದು; ಆಗ ವೀಡಿಯೊ ಸಹ ನೇರವಾಗಿ ಕಳುಹಿಸಲಾಗುತ್ತದೆ.
- ಪೋಷಕರ ಮೋಡ್ (ಸ್ವೀಕರಿಸುವ ಸಾಧನ): ಸಾಧನವು ಆಡಿಯೋ ಮತ್ತು ವೀಡಿಯೊ ಸ್ವೀಕರಿಸುತ್ತದೆ, ಕ್ಯಾಮೆರಾ ಸ್ಟ್ರೀಮ್ ತೋರಿಸುತ್ತದೆ ಮತ್ತು ಮಗುವಿನ ಸಾಧನಕ್ಕೆ ಚಿಕ್ಕ ಧ್ವನಿ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು ಪುಶ್-ಟು-ಟಾಕ್ ಸೌಲಭ್ಯ ನೀಡುತ್ತದೆ.
ಪುಶ್-ಟು-ಟಾಕ್ ಮತ್ತು ಕ್ಯಾಮೆರಾ ಆನ್/ಆಫ್ನಂತಹ ನಿಯಂತ್ರಣಗಳು DataChannelಅನ್ನು ಬಳಸುತ್ತವೆ; ಇದು ಸಾಧನಗಳ ನಡುವೆ ಚಿಕ್ಕ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಸಂದೇಶಗಳನ್ನು ನೇರವಾಗಿ ಕಳುಹಿಸುವ ಮತ್ತೊಂದು WebRTC ಚಾನೆಲ್ ಆಗಿದೆ.
Flutter ಏಕೆ?
Flutter ಹಲವು ಪ್ಲಾಟ್ಫಾರ್ಮ್ಗಳಿಗಾಗಿ ಆ್ಯಪ್ಗಳನ್ನು ನಿರ್ಮಿಸುವ Googleನ ಫ್ರೇಮ್ವರ್ಕ್. Timmyಗೆ ಇದರಿಂದ ಬಹಳಷ್ಟು ಲಾಜಿಕ್ ಅನ್ನು ಒಮ್ಮೆ ಬರೆದು Android ಮತ್ತು iOS ಎರಡರಲ್ಲೂ ಬಳಸಬಹುದು. Timmy Androidನಲ್ಲಿ ಲಭ್ಯವಿದೆ; iOS ಆವೃತ್ತಿ ಬಿಡುಗಡೆಯ ಹಂತಕ್ಕೆ ಸಮೀಪಿಸಿದೆ. ನಕಲಿ ಕೋಡ್ ಕಡಿಮೆಯಾದರೆ, ದೋಷಗಳು ನುಸುಳಬಹುದಾದ ಸ್ಥಳಗಳೂ ಕಡಿಮೆಯಾಗುತ್ತವೆ.
ಸಾರಾಂಶ
ತಾಂತ್ರಿಕ ನಿಯಮ ಸರಳ: Timmyಗೆ ನಿಜವಾಗಿಯೂ ಬೇಕಾದ ಡೇಟಾವನ್ನು ಮಾತ್ರ ಅದು ಮುಟ್ಟಬೇಕು. WebRTC ಮೀಡಿಯಾವನ್ನು ರಕ್ಷಿಸುತ್ತದೆ, Firebase ಸಂಪರ್ಕದ ಸೆಟಪ್ ಅನ್ನು ಸಮನ್ವಯಗೊಳಿಸುತ್ತದೆ, TURN ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಮಾತ್ರ ನೋಡುತ್ತದೆ ಮತ್ತು Nearby Connections ಪೇರಿಂಗ್ನ ತೊಂದರೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
ಉತ್ತಮ ತಂತ್ರಜ್ಞಾನ ದೈನಂದಿನ ಜೀವನದಲ್ಲಿ ಸ್ವಲ್ಪ ಕಾಣದಂತಾಗುತ್ತದೆ. ನರ್ಸರಿಯನ್ನು ಕ್ಲೌಡ್ ಯೋಜನೆಯಾಗಿ ಮಾಡದೇ ಅದು ಕೆಲಸ ಮಾಡುತ್ತದೆ.