ତିନୋଟି ମୁଖ୍ୟ ଅଂଶ, ଗୋଟିଏ ଲକ୍ଷ୍ୟ
ଭିତରେ ଭିତରେ, 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 ଘଣ୍ଟା ପର୍ଯ୍ୟନ୍ତ ବୈଧ ଥାଏ। ବେବି ମନିଟର ଆପ୍ରେ ସ୍ଥାୟୀ କ୍ରେଡେନ୍ସିଆଲ୍ ରଖିବା ମୋ ମତରେ ଅତ୍ୟଧିକ ଝୁମ୍ପପୂର୍ଣ୍ଣ।
ନିକଟସ୍ଥ ସଂଯୋଗ: ଡିଭାଇସ୍ଗୁଡ଼ିକ ସ୍ୱୟଂଚାଳିତ ଭାବେ ପରସ୍ପରକୁ ଖୋଜେ
ଶିଶୁ ଡିଭାଇସ୍ ଏବଂ ଅଭିଭାବକ ଡିଭାଇସ୍ ମଧ୍ୟରେ ଜଟିଳ ସେଟଅପ୍ ପଦକ୍ଷେପ ଏଡ଼ାଇବା ପାଇଁ, Timmy ବ୍ୟବହାର କରେ Nearby Connections। Google Bluetooth ଏବଂ WiFi ମାଧ୍ୟମରେ ଏହି ଡିସକଭରି ସ୍ତର ଦିଏ।
Timmyରେ ସ୍ୱୟଂଚାଳିତ ପେୟାରିଂ ହାତେ କୋଡ୍ ଦେବା ବିନା କାମ କରେ: ଡିଭାଇସ୍ଗୁଡ଼ିକ ପରସ୍ପରକୁ ଖୋଜନ୍ତି ଏବଂ କି ଆଦାନପ୍ରଦାନ ପାଇଁ ସମାନ ମିଟିଂ ପଏଣ୍ଟ ପାଆନ୍ତି। ତାହା ବିଫଳ ହେଲେ, ଆପଣ ଟାଇପ୍ କରିପାରିବା 4-ଅକ୍ଷରର କୋଡ୍ ଅଛି। ପେୟାରିଂ କୋଡ୍ କେବେ ଡିଭାଇସ୍ ଛାଡ଼ି ବାହାରକୁ ଯାଏ ନାହିଁ; Firestore କେବଳ ଡକ୍ୟୁମେଣ୍ଟ ଆଇଡେଣ୍ଟିଫାୟର୍ ଭାବେ ଏକ କ୍ରିପ୍ଟୋଗ୍ରାଫିକ୍ ହ୍ୟାଶ୍ (SHA-256) ଦେଖେ।
ନାମବିହୀନ ପ୍ରମାଣୀକରଣ
Timmy Firebase Anonymous Authentication ବ୍ୟବହାର କରେ। ପ୍ରଥମଥର ଆପ୍ ଖୋଲିଲେ, ପ୍ରତ୍ୟେକ ଡିଭାଇସ୍ ଏକ ଅସ୍ଥାୟୀ, ନାମବିହୀନ ID ପାଏ। କୌଣସି ଆକାଉଣ୍ଟ, ଇମେଲ୍ ଠିକଣା କିମ୍ବା ପାସୱାର୍ଡ ନାହିଁ। ID କେବଳ Firestore ନିୟମ ଲାଗୁ କରିବା ପାଇଁ ଅଛି: କେବଳ ପ୍ରମାଣିତ ଡିଭାଇସ୍ଗୁଡ଼ିକ ସେସନ୍ ଡାଟା ପଢ଼ିବା କିମ୍ବା ଲେଖିବାକୁ ପାରିବେ।
ଆର୍କିଟେକ୍ଚର୍: କିଏ ପଠାଏ, କିଏ ପାଏ
Timmyର ଦୁଇଟି ମୋଡ୍ ଅଛି:
- ବେବି ମୋଡ୍ (ପଠାଇବାଳା): ଡିଭାଇସ୍ ମାଇକ୍ରୋଫୋନ୍ ମାଧ୍ୟମରେ ଅଡିଓ ଧରେ ଏବଂ WebRTC ଦ୍ୱାରା ଅଭିଭାବକ ଡିଭାଇସ୍କୁ ପଠାଏ। ଇଚ୍ଛାକୃତ ଭାବେ କ୍ୟାମେରା ଚାଲୁ କରାଯାଇପାରେ; ତାହା ପରେ ଭିଡିଓ ମଧ୍ୟ ସିଧାସଳଖ ପଠାଯାଏ।
- ଅଭିଭାବକ ମୋଡ୍ (ଗ୍ରହଣକାରୀ): ଡିଭାଇସ୍ ଅଡିଓ ଏବଂ ଭିଡିଓ ପାଏ, କ୍ୟାମେରା ଷ୍ଟ୍ରିମ୍ ଦେଖାଏ, ଏବଂ ଶିଶୁ ଡିଭାଇସ୍କୁ ଛୋଟ ଭଏସ୍ ମେସେଜ୍ ପଠାଇବା ପାଇଁ ପୁସ୍-ଟୁ-ଟକ୍ ସୁବିଧା ଦିଏ।
ପୁସ୍-ଟୁ-ଟକ୍ ଏବଂ କ୍ୟାମେରା ଚାଲୁ/ବନ୍ଦ ପରି କଣ୍ଟ୍ରୋଲ୍ଗୁଡ଼ିକ ଏକ DataChannel ବ୍ୟବହାର କରେ—ଏହା ଆଉ ଏକ WebRTC ଚ୍ୟାନେଲ୍, ଯାହା ଡିଭାଇସ୍ଗୁଡ଼ିକ ମଧ୍ୟରେ ସିଧାସଳଖ ଛୋଟ ଏନ୍କ୍ରିପ୍ଟେଡ୍ ମେସେଜ୍ ପଠାଏ।
Flutter କାହିଁକି?
Flutter ହେଉଛି ଏକାଧିକ ପ୍ଲାଟଫର୍ମ ପାଇଁ ଆପ୍ ତିଆରି କରିବାର Googleର ଫ୍ରେମୱାର୍କ। Timmy ପାଇଁ ଏହାର ଅର୍ଥ, ମୁଁ ଅନେକ ଲଜିକ୍ ଥରେ ଲେଖି Android ଏବଂ iOSରେ ବ୍ୟବହାର କରିପାରେ। Timmy Androidରେ ଉପଲବ୍ଧ, ଏବଂ iOS ସଂସ୍କରଣ ଶୀଘ୍ର ରିଲିଜ୍ ହେବ। କମ୍ ଡୁପ୍ଲିକେଟ୍ କୋଡ୍ ଅର୍ଥ ବଗ୍ ଆସିବା ପାଇଁ କମ୍ ସ୍ଥାନ।
ସାରାଂଶ
ଟେକ୍ନିକାଲ୍ ନିୟମଟି ସରଳ: Timmy କେବଳ ସେହି ଡାଟାକୁ ହାତ ଦେବା ଉଚିତ୍ ଯାହା ତାହାକୁ ସତରେ ଦରକାର। WebRTC ମିଡିଆକୁ ସୁରକ୍ଷା ଦିଏ, Firebase ସଂଯୋଗ ସେଟଅପ୍ର ସମନ୍ୱୟ କରେ, TURN କେବଳ ଏନ୍କ୍ରିପ୍ଟେଡ୍ ପ୍ୟାକେଟ୍ ଦେଖେ, ଏବଂ Nearby Connections ପେୟାରିଂକୁ ସହଜ କରେ।
ଭଲ ଟେକ୍ନୋଲୋଜି ଦୈନନ୍ଦିନ ଜୀବନରେ ଅଳ୍ପକିଛି ଅଦୃଶ୍ୟ ହୋଇଯାଏ। ନର୍ସରୀକୁ କ୍ଲାଉଡ୍ ପ୍ରୋଜେକ୍ଟ କରିନଦେଇ ଏହା କାମ କରେ।