Rise Of RTC Applications

Sakib Sami
LiveKlass
Published in
4 min readNov 18, 2017

আমরা কম বেশি সবাইই ফেসবুক মেসেঞ্জার, হোয়াটস এপ অথবা ভাইবার ব্যবহার করেছি । এরকম আরো অনেক এপ্লিকেশন আছে । কখনও কি জানতে ইচ্ছা হয়েছে আপনার পাঠানো মেসেজ মুহূর্তেই কিভাবে অপর প্রান্তের মানুষটার কাছে যাচ্ছে ?

আজকের লেখা সেরকম কিছু জিনিস নিয়েই ।

Messaging : প্রথমে আসি মেসেজ পাঠানো নিয়ে । মেসেজ পাঠানোর জন্য খুবই জনপ্রিয় মাধ্যম বা প্রোটোকল হচ্ছে XMPP ( Extensive Messaging & Presence Protocol ) । XMPP একটা ওপেন প্রোটোকল। একজন ইউজার থেকে অন্য একজন ইউজার এর কাছে কিভাবে মেসেজ পাঠাবেন বা একজন ইউজার এর কোন কোন বন্ধু এখন অনলাইনে আছে তা কিভাবে দেখবে তার সব কিছুই অন্তর্ভুক্ত আছে XMPP এর মধ্যে।

XMPP Flow Diagram

XMPP মোটামুটি উপরের ডায়াগ্রাম এর মত কাজ করে ।

ধরুন, একজন ইউজার A এবং তার বন্ধু B । তারা দুইজন একে অপরের সাথে মেসেজ আদান প্রদান করতে চায় ।

সবার প্রথমে যেটা হবে A এবং B কে Registration করতে হবে সিস্টেমে/XMPP Server এ। এবার সিস্টেম জানলো যে তার দুইজন ইউজার আছে । এবার A এবং B কে সিস্টেমে কানেক্ট হতে হবে । ধরি ইউজার A সিস্টেমকে তার ইউজারনেম ও পাসওয়ার্ড পাঠিয়ে বলল আমি তোমার সাথে কানেক্ট হতে চাই । এবার সিস্টেম যাচাই করে দেখবে ইউজার এর ইউজারনেম এবং পাসওয়ার্ড ঠিক আছে কিনা । যদি ঠিক থাকে তবে সিস্টেম ইউজার এর সাথে ডাটা আদান প্রদান করার জন্য একটা সেশন ওপেন করবে । XMPP প্রোটোকল মূলত TCP based প্রোটোকল । তাই একবার ভেরিফিকেশন হয়ে গেলে সিস্টেম ইউজারের সাথে একটা TCP কানেকশন ধরে রাখবে । যদি কোন কারণে কানেকশন অফ হয়ে যায় তাহলে পুরো প্রক্রিয়া আবার করতে হবে ।
ধরি ইউজার A এর সাথে সিস্টেমের কানেকশন ওপেন হল । এরপর সিস্টেম যেটা করবে সে A ইউজার এর যত বন্ধু আছে তাদের জানিয়ে দিবে যে ইউজার A এখন অনলাইন আছে, এটাকে বলে Presence। A এর কানেকশন অফ হয়ে গেলেও সিস্টেম তার বন্ধুদের জানিয়ে দিবে যে A অফলাইন হয়ে গেছে । এবার ভাবতে পারেন A এর বন্ধুদের সিস্টেম চিনল কিভাবে ! নাহ কোন অলৌকিক ভাবে জানে নাই, আমরা যেভাবে ফেসবুকে ফ্রেন্ড এড করি সেভাবেই সিস্টেমকে বলে দিতে হয় A এর বন্ধু B বা C । XMPP তে একে বলে Roster । আচ্ছা বলুন তো A কিভাবে জানবে তার কোন কোন বন্ধু অনলাইন ? কানেক্ট হওয়ার সময় সিস্টেম তাকে বলে দেয় এই জিনিসটা । সিস্টেমে ইউজারের একটা ইউনিক আইডি থাকে যার মাধ্যমে সিস্টেম তাকে চিনে, একে বলে JID । ধরি A এর JID a@mydomain.com এবং B এর b@mydomain.com । এখন B যদি সিস্টেমকে বলে আমি একটা মেসেজ পাঠাতে চাই a@mydomain.com কে । তাহলে সিস্টেম প্রথমে দেখবে a@mydomain.com তার সাথে কানেক্টেড কিনা মানে অনলাইন কিনা । অনলাইন থাকলে তাকে মেসেজ পাঠাবে যে b@mydomain.com তোমাকে মেসেজ পাঠিয়েছে । আর যদি অনলাইন না থাকে তবে মেসেজ টা সেভ করে রাখবে ডাটাবেস এ এবং যখনই A অনলাইন আসবে সিস্টেম তাকে মেসেজ টা দিবে এবং b@mydomain.com কে জানিয়ে দিবে যে মেসেজটি পাঠানো হয়েছে । এছাড়াও XMPP Protocol এর আরও অনেক সুবিধা আছে ।

এখন আপনি যদি XMPP ইউজ করে একটা মেসেজিং এপ্লিকেশন বানাতে চান তবে হয় আপনাকে XMPP Specification অনুযায়ী Server ডেভলপ করতে হবে বা আপনি চাইলে ওপেনসোর্স Server ইউজ করতে পারেন যেমনঃ Openfire, Ejabberd, MongooseIM । চাইলে অন্য প্রোটোকল এর উপর ভিত্তি করেও মেসেজিং করতে পারেন তবে তাতে অনেক কিছুই আপনার নিজেকে ডেভেলপ করতে হবে । যেমন ফেসবুক মেসেঞ্জার MQTT প্রোটোকলের উপরে কাজ করে ।

Audio / Video : এবার আসি একজনের থেকে অন্য জনের কাছে Audio / Video যায় কিভাবে ! এই কাজের জন্য আলাদা প্রোটোকল আছে যেমনঃ SIP, WebRTC, RTSP ইত্যাদি। এখানে দেখব WebRTC ( Web Real Time Communication ) কিভাবে কাজ করে ।

WebRTC Flow Diagram

ধরি ইউজার A ইউজার B এর সাথে Audio / Video শেয়ার করতে চায় । এখানে A হচ্ছে Caller আর B হচ্ছে Callee । প্রথমে A একটা সেশন জেনারেট করবে যার মধ্যে থাকবে A এর Media Information( Audio Codec, Video Codec etc), Network Information ( IP Address, Supported Protocol etc), Security র জন্য আরও কিছু ডাটা । এবার A এই ডাটা B এর কাছে পাঠাবে । B এই ডাটা পাওয়ার পর A এর ডাটার সাথে মিল রেখে সেশন জেনারেট করবে A এর মত এবং তা A কে পাঠাবে । এখন A এবং B এর কাছে কানেক্ট হওয়ার জন দরকারি Media & Network Information আছে । এই যে ডাটা আদান প্রদান একে বলে Signaling আর যে ডাটা আদান প্রদান করা হল তাকে বলে SDP ( Session Description Protocol ) ।

ডাটা তো পেয়ে গেলাম এবার Audio / Video যাবে কিভাবে ? WebRTC প্রথমে দেখবে Peer 2 Peer কানেকশন করা যায় কিনা । যদি সম্ভব হয় তাহলে Network Information ব্যবহার করে A এবং B একে অপরের সাথে Peer 2 Peer কানেকশন করবে এবং ডাটা আদান প্রদান করবে । এই কানেকশনটা UDP ও হতে পারে আবার TCP ও হতে পারে ।

এবার ধরুন Peer 2 Peer কানেকশন সম্ভব হচ্ছে না তাহলে কি হবে ? তখন কানেকশন করার জন্য TURN ( Traversal Using Relays around NAT ) Server ব্যবহার করা হয়। যেখানে A এবং B উভয়ে TURN Server এ কানেক্টেড এবং TURN এর মাধমে একে অপরের কাছে ডাটা আদান প্রদান করা হয় । WebRTC Sample App , WebRTC Java Client

তো এবার নিশ্চয়ই বানিয়ে ফেলতে পারবেন নিজের একটা RTC Application । হতে পারে শুধু আপনার আর গার্লফ্রেন্ডের ;) অথবা পুরো ফ্রেন্ড সার্কেলের জন্য। (y)

--

--

Sakib Sami
LiveKlass

Senior Software Engineer @ Twilio | Entrepreneur | Tech Ninja