SDP — এটি কী, সেশন বর্ণনা ফরম্যাট এবং WebRTC-তে ভূমিকা

লেখক: IT Sectr প্রকাশিত: 2026-06-03 পড়ার সময়: 12 মিনিট

SDP (Session Description Protocol) হল মাল্টিমিডিয়া সেশন বর্ণনার জন্য একটি টেক্সট ফরম্যাট, যা অংশগ্রহণকারীদের মধ্যে সংযোগ প্যারামিটার সম্মত করার জন্য ডিজাইন করা হয়েছে। IETF RFC 8866 (2021) অনুসারে, SDP মিডিয়া স্ট্রিম, কোডেক, ট্রান্সপোর্ট ঠিকানা এবং অন্যান্য প্যারামিটারের বর্ণনার কাঠামো সংজ্ঞায়িত করে, মিডিয়া ডেটা নিজে প্রেরণ না করেই। প্রোটোকলটি WebRTC-এর একটি মূল উপাদান হয়ে উঠেছে, যা পিয়ার-টু-পিয়ার সংযোগ স্থাপনের আগে ব্রাউজার এবং মোবাইল অ্যাপ্লিকেশনের মধ্যে তথ্য বিনিময় সক্ষম করে।

মূল পয়েন্ট

  • SDP মাল্টিমিডিয়া সেশন বর্ণনার জন্য একটি টেক্সট প্রোটোকল, যা মিডিয়া ডেটা নয় বরং শুধুমাত্র তাদের প্যারামিটার প্রেরণ করে।
  • ফরম্যাট type=value ধরণের লাইনের উপর ভিত্তি করে তৈরি, যেখানে প্রতিটি লাইন একটি সেশন প্যারামিটার বর্ণনা করে।
  • WebRTC সংযোগ স্থাপনের আগে অংশগ্রহণকারীদের মধ্যে Offer এবং Answer বিনিময়ের জন্য SDP ব্যবহার করে।
  • সেশন ফিল্ডে মিডিয়া টাইপ, কোডেক, পোর্ট, ট্রান্সপোর্ট প্রোটোকল এবং নিরাপত্তা প্যারামিটার অন্তর্ভুক্ত।
  • SDP কোনো নির্দিষ্ট ট্রান্সপোর্ট প্রোটোকলের সাথে আবদ্ধ নয় এবং HTTP, WebSocket বা SIP-এর মাধ্যমে প্রেরণ করা যেতে পারে।

SDP (Session Description Protocol) কী?

SDP হল একটি অ্যাপ্লিকেশন লেয়ার প্রোটোকল যা টেক্সট ফরম্যাটে মাল্টিমিডিয়া সেশন প্যারামিটার বর্ণনা করার জন্য ডিজাইন করা হয়েছে। এটি IETF-এর MMUSIC (Multiparty Multimedia Session Control) ওয়ার্কিং গ্রুপের অধীনে তৈরি করা হয়েছিল এবং প্রথমবার 1998 সালে RFC 2327-তে মান্যকরণ করা হয়েছিল। 2021 সালে, বর্তমান স্পেসিফিকেশন RFC 8866 প্রকাশিত হয়েছিল, যা পূর্ববর্তী সংস্করণ RFC 4566-কে প্রতিস্থাপন করেছে।

SDP-এর প্রধান কাজ হল সেশন অংশগ্রহণকারীদের সংযোগ স্থাপনের জন্য প্রয়োজনীয় সমস্ত তথ্য সরবরাহ করা: কোন মিডিয়া স্ট্রিম প্রেরণ করা হবে, কোন কোডেক সমর্থিত এবং কোন নেটওয়ার্ক ঠিকানা এবং পোর্টে প্রেরণ হবে। SDP নিজে মিডিয়া ডেটা প্রেরণ করে না, বরং শুধুমাত্র বর্ণনা করে যে কীভাবে সংযোগ সংগঠিত করা উচিত।

IETF RFC 8866 অনুসারে, SDP ফরম্যাটে লাইনের একটি সেট থাকে, যার প্রতিটি একটি একক-অক্ষর টাইপ দিয়ে শুরু হয়, তার পরে একটি সমান চিহ্ন এবং মান থাকে। উদাহরণস্বরূপ, লাইন m=audio 5004 RTP/AVP 0 মানে হল সেশনে পোর্ট 5004-এ RTP/AVP ট্রান্সপোর্ট প্রোটোকল এবং PCMU কোডেক (টাইপ 0) সহ একটি অডিও স্ট্রিম অন্তর্ভুক্ত রয়েছে।

SDP-এর ইতিহাস এবং মান্যকরণ

SDP-এর প্রথম সংস্করণ এপ্রিল 1998 সালে RFC 2327-এ MMUSIC গ্রুপের কাজের ফলস্বরূপ প্রকাশিত হয়েছিল। প্রোটোকলটি মূলত Mbone (Multicast Backbone)-এর অধীনে মাল্টিকাস্ট সেশন ঘোষণার জন্য তৈরি করা হয়েছিল। VoIP এবং ভিডিও কনফারেন্সিং-এর বিকাশের সাথে, SDP-এর প্রয়োগের ক্ষেত্র প্রসারিত হয় এবং 2006 সালে আপডেটেড স্পেসিফিকেশন RFC 4566 প্রকাশিত হয়।

SDP ব্যবহারে একটি সত্যিকারের অগ্রগতি 2011 সালে WebRTC-এর আবির্ভাবের সাথে ঘটে। Google তার ব্রাউজার-ভিত্তিক রিয়েল-টাইম যোগাযোগ ফ্রেমওয়ার্কে মিডিয়া সেশন বর্ণনার জন্য SDP-কে প্রধান প্রক্রিয়া হিসেবে একীভূত করে। তারপর থেকে, SDP যেকোনো WebRTC বাস্তবায়নের একটি বাধ্যতামূলক উপাদান হয়ে উঠেছে — ব্রাউজার থেকে শুরু করে iOS এবং Android-এর মোবাইল অ্যাপ্লিকেশন পর্যন্ত।

2021 সালে, IETF ওয়ার্কিং গ্রুপ RFC 8866 প্রকাশ করে — SDP-এর বর্তমান স্পেসিফিকেশন, যা RFC 4566-কে প্রতিস্থাপন করেছে। আপডেটেড সংস্করণ ICE (Interactive Connectivity Establishment) প্রক্রিয়াকরণ, DTLS (Datagram Transport Layer Security) সমর্থন স্পষ্ট করেছে এবং গ্রুপ সেশন বর্ণনার ক্ষমতা প্রসারিত করেছে।

SDP এবং ট্রান্সপোর্ট প্রোটোকলের মধ্যে পার্থক্য

SDP ট্রান্সপোর্ট প্রোটোকল থেকে মৌলিকভাবে ভিন্ন কারণ এটি ডেটা প্রেরণে অংশগ্রহণ করে না। এটি সম্পূর্ণরূপে বর্ণনামূলক কাজ করে — মাল্টিমিডিয়া ফাইল মেটাডেটার মতো। যখন RTP (Real-time Transport Protocol) অডিও এবং ভিডিও প্যাকেট প্রেরণ করে, এবং RTCP প্রেরণের গুণমান নিয়ন্ত্রণ করে, SDP শুধুমাত্র নির্দিষ্ট করে কোন কোডেক এবং পোর্ট ব্যবহার করতে হবে।

ওয়েব ডেভেলপমেন্ট থেকে একটি উপমা: SDP হল HTML মার্কআপের মতো যা পৃষ্ঠার গঠন বর্ণনা করে, আর RTP হল প্রকৃত ছবি এবং টেক্সট। SDP ছাড়া, সেশন অংশগ্রহণকারীরা জানে না কীভাবে একে অপরের সাথে সংযোগ করতে হয়, এমনকি যদি নেটওয়ার্ক সংযোগ ইতিমধ্যে স্থাপিত থাকে। NAT ট্রাভার্সাল প্রক্রিয়া (ICE) নেটওয়ার্ক প্রার্থীদের সম্পর্কে তথ্য প্রেরণের জন্য SDP-এর উপর নির্ভর করে।

SDP-এর গঠন কেমন

SDP গঠন টেক্সট লাইনের একটি ক্রম হিসাবে সংগঠিত হয়, যার প্রতিটি type=value ফরম্যাট অনুসরণ করে। একক-অক্ষর টাইপ লাইনের উদ্দেশ্য নির্ধারণ করে এবং মানটিতে সংশ্লিষ্ট মান থাকে। সমস্ত লাইন CRLF অক্ষর দ্বারা পৃথক করা হয়।

RFC 8866 মান বেশ কয়েকটি বাধ্যতামূলক এবং ঐচ্ছিক ফিল্ড নির্ধারণ করে। বাধ্যতামূলক ফিল্ডের মধ্যে প্রোটোকল সংস্করণ (v=), সেশনের নাম (s=) এবং সেশন শুরু ও শেষের সময় (t=) অন্তর্ভুক্ত। বাকি ফিল্ডগুলি ঐচ্ছিক, কিন্তু WebRTC সেশনের জন্য, মিডিয়া বর্ণনা (m=), বৈশিষ্ট্য (a=) এবং নেটওয়ার্ক তথ্য (c=)-ও প্রয়োজনীয়।

text
v=0
o=- 46116397 2 IN IP4 192.168.1.100
s=-
t=0 0
a=group:BUNDLE audio video
m=audio 5004 RTP/SAVPF 111 103 104
c=IN IP4 192.168.1.100
a=rtpmap:111 opus/48000/2
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
m=video 5006 RTP/SAVPF 96 97
a=rtpmap:96 VP8/90000
a=rtpmap:97 H264/90000

উপরের উদাহরণটি একটি WebRTC সেশনের জন্য একটি সাধারণ SDP সেগমেন্ট দেখায়। v=0 লাইন প্রোটোকল সংস্করণ নির্দেশ করে। o= ফিল্ডে সেশন মালিকের শনাক্তকারী এবং সংস্করণ থাকে। s=- লাইন সেশনের নাম নির্দিষ্ট করে (হাইফেন মানে খালি নাম)। t=0 0 ফিল্ড নির্দেশ করে যে সেশনটি সময়সীমাবদ্ধ নয়।

a=group:BUNDLE audio video ফিল্ডটি একটি বৈশিষ্ট্য যা একাধিক মিডিয়া স্ট্রিমকে একটি ট্রান্সপোর্ট চ্যানেলে গ্রুপ করে। BUNDLE প্রক্রিয়া একটি একক সংযোগের মাধ্যমে অডিও এবং ভিডিও প্রেরণ করে নেটওয়ার্ক সম্পদ বাঁচানোর অনুমতি দেয়। এটি সীমিত ব্যান্ডউইথযুক্ত মোবাইল ডিভাইসের জন্য বিশেষভাবে গুরুত্বপূর্ণ।

SDP-এর বাধ্যতামূলক ফিল্ড

RFC 8866 স্পেসিফিকেশন বাধ্যতামূলক এবং ঐচ্ছিক ফিল্ডের একটি সেট নির্ধারণ করে। বাধ্যতামূলক ফিল্ডের মধ্যে v= (সংস্করণ), s= (সেশনের নাম) এবং t= (সময়) অন্তর্ভুক্ত। o= (মালিক) ফিল্ড, যদিও RFC অনুসারে কঠোরভাবে বাধ্যতামূলক নয়, বাস্তব বাস্তবায়নে প্রায় সবসময় উপস্থিত থাকে।

ফিল্ডউদ্দেশ্যউদাহরণ
v=SDP প্রোটোকল সংস্করণv=0
o=সেশন মালিক এবং শনাক্তকারীo=- 46116397 2 IN IP4 192.168.1.100
s=সেশনের নামs=Video Conference
t=সেশন শুরু এবং শেষের সময়t=0 0
m=মিডিয়া স্ট্রিম বর্ণনাm=audio 5004 RTP/SAVPF 111
c=নেটওয়ার্ক তথ্যc=IN IP4 192.168.1.100
a=সেশন বা মিডিয়া বৈশিষ্ট্যa=rtpmap:111 opus/48000/2

m= (media) ফিল্ড সবচেয়ে গুরুত্বপূর্ণগুলির মধ্যে একটি। এটি একটি নির্দিষ্ট মিডিয়া স্ট্রিম বর্ণনা করে এবং এতে মিডিয়া টাইপ (audio, video, text, application), পোর্ট, ট্রান্সপোর্ট প্রোটোকল এবং সমর্থিত কোডেকের তালিকা থাকে। WebRTC-তে, সবচেয়ে বেশি ব্যবহৃত টাইপ হল audio এবং video যার ট্রান্সপোর্ট প্রোটোকল RTP/SAVPF (Secure Audio/Video Profile with Feedback) বা UDP/TLS/RTP/SAVPF।

a= (attribute) ফিল্ড সবচেয়ে নমনীয় এবং প্রসারণযোগ্য। এটি rtpmap (কোডেক নম্বর থেকে নাম ম্যাপিং), fmtp (কোডেক প্যারামিটার), fingerprint (DTLS কী-এর ফিঙ্গারপ্রিন্ট), ice-ufrag এবং ice-pwd (ICE ক্রেডেনশিয়াল) এবং আরও অনেক বৈশিষ্ট্য ধারণ করতে পারে। বৈশিষ্ট্যগুলির মাধ্যমেই SDP আধুনিক নিরাপত্তা প্রক্রিয়া এবং NAT ট্রাভার্সাল সমর্থন করে।

WebRTC-তে SDP কীভাবে কাজ করে

WebRTC আর্কিটেকচারে, SDP দুটি অংশগ্রহণকারীর মধ্যে মিডিয়া সেশন প্যারামিটার বর্ণনা এবং আলোচনার জন্য একটি সিগন্যালিং প্রোটোকল হিসাবে কাজ করে। SDP নিজে এই বর্ণনাগুলি প্রেরণের প্রক্রিয়া নির্ধারণ করে না — এই কাজটি সিগন্যালিং চ্যানেল দ্বারা পরিচালিত হয়, যা ডেভেলপার স্বাধীনভাবে WebSocket, HTTP বা অন্য প্রোটোকলের মাধ্যমে বাস্তবায়ন করে।

প্রক্রিয়াটি শুরু হয় যখন সূচনাকারী (caller) একটি SDP Offer তৈরি করে। এটি করতে, ব্রাউজার RTCPeerConnection অবজেক্টে createOffer() মেথড কল করে। উৎপন্ন SDP বর্ণনায় সূচনাকারীর পক্ষ থেকে সমস্ত সেশন প্যারামিটার থাকে: সমর্থিত কোডেক, নেটওয়ার্ক ঠিকানা, ICE প্রার্থী এবং নিরাপত্তা প্রয়োজনীয়তা।

js
const configuration = { iceServers: [{ urls: 'stun:stun.l.google.com:19302' }] };
const pc = new RTCPeerConnection(configuration);

// createOffer-এর আগে মিডিয়া ট্র্যাক যোগ করুন
const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
stream.getTracks().forEach(track => pc.addTrack(track, stream));

// SDP Offer তৈরি করুন
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);

// সিগন্যালিং চ্যানেলের মাধ্যমে দূরবর্তী পিয়ারে SDP পাঠান
sendViaSignaling({ type: 'offer', sdp: offer.sdp });

Offer তৈরি এবং setLocalDescription()-এর মাধ্যমে লোকাল বর্ণনা সেট করার পর, সূচনাকারী সিগন্যালিং চ্যানেলের মাধ্যমে দূরবর্তী অংশগ্রহণকারীর কাছে SDP স্ট্রিং পাঠায়। দূরবর্তী অংশগ্রহণকারী, SDP Offer পেয়ে, একটি SDP Answer তৈরি করে এবং তা ফেরত পাঠায়। এই বিনিময়কে সিগন্যালিং এক্সচেঞ্জ বলা হয় এবং এটি পিয়ার-টু-পিয়ার সংযোগ স্থাপনের আগে একটি বাধ্যতামূলক পদক্ষেপ।

W3C WebRTC স্পেসিফিকেশন অনুসারে, SDP বিনিময় ICE প্রার্থী শুরু হওয়ার আগে হওয়া উচিত। বাস্তবে, অনেক বাস্তবায়ন ICE trickle প্রক্রিয়া ব্যবহার করে SDP-এর সাথে সমান্তরালভাবে ICE প্রার্থী পাঠায়। এটি সংযোগ স্থাপনের সময় কমায়, বিশেষ করে উচ্চ লেটেন্সি সহ মোবাইল নেটওয়ার্কের জন্য।

SDP-তে ICE-এর ভূমিকা

ICE (Interactive Connectivity Establishment) হল একটি প্রক্রিয়া যা নেটওয়ার্ক প্রার্থীদের সম্পর্কে তথ্য প্রেরণের জন্য SDP বৈশিষ্ট্য ব্যবহার করে। ICE প্রার্থী সম্ভাব্য সংযোগ পথ বর্ণনা করে: host (স্থানীয় ঠিকানা), srflx (NAT-এর পরের ঠিকানা, STUN-এর মাধ্যমে প্রাপ্ত) এবং relay (TURN সার্ভারের ঠিকানা)।

SDP-তে, ICE প্রার্থী a=candidate: বৈশিষ্ট্যের মাধ্যমে, সেইসাথে ICE ট্রাফিক প্রমাণীকরণের জন্য ice-ufrag এবং ice-pwd ফিল্ডের মাধ্যমে প্রেরণ করা হয়। প্রতিটি প্রার্থী ট্রান্সপোর্ট প্রোটোকল (UDP, TCP), IP ঠিকানা, পোর্ট এবং অগ্রাধিকার অন্তর্ভুক্ত করে। একটি সফল সংযোগ প্রথম প্রার্থীর মাধ্যমে স্থাপিত হয় যা সংযোগযোগ্যতা পরীক্ষা পাস করে। ICE restart প্রক্রিয়া নেটওয়ার্ক পরিবর্তনের সময় সংযোগ আপডেট করার অনুমতি দেয়।

মোবাইল অ্যাপ্লিকেশনের জন্য, ICE প্রার্থী বিশেষভাবে গুরুত্বপূর্ণ কারণ ডিভাইসগুলি প্রায়শই NAT বা কর্পোরেট ফায়ারওয়ালের পিছনে থাকে। ICE প্রক্রিয়া জটিল নেটওয়ার্ক অবস্থাতেও একটি কার্যকরী পথ খুঁজে পেতে অনুমতি দেয়, এবং SDP এই তথ্যের জন্য ট্রান্সপোর্ট কন্টেইনার হিসাবে কাজ করে।

WebRTC-তে SDP নিরাপত্তা

WebRTC-তে SDP-তে প্রয়োজনীয়ভাবে নিরাপত্তা বৈশিষ্ট্য অন্তর্ভুক্ত থাকে, বিশেষ করে DTLS ফিঙ্গারপ্রিন্ট এবং SRTP প্যারামিটার। a=fingerprint:sha-256 ফিল্ডে DTLS সার্টিফিকেটের ফিঙ্গারপ্রিন্ট থাকে, যা মিডিয়া স্ট্রিমের প্রমাণীকরণ এবং এনক্রিপশনের জন্য ব্যবহৃত হয়। এই বৈশিষ্ট্য ছাড়া, WebRTC সংযোগ স্থাপিত হবে না।

অতিরিক্ত নিরাপত্তা প্রক্রিয়ার মধ্যে a=setup: বৈশিষ্ট্য অন্তর্ভুক্ত, যা DTLS হ্যান্ডশেক ভূমিকা (active, passive, actpass) নির্ধারণ করে, এবং a=ice-lite: সার্ভার পক্ষে সরলীকৃত ICE বাস্তবায়নের জন্য। এই সমস্ত প্যারামিটার SDP-এর ভিতরে প্রেরণ করা হয় এবং মিডিয়া ডেটা প্রেরণ শুরু হওয়ার আগে উভয় পক্ষ দ্বারা যাচাই করা হয়।

SDP প্রকার: Offer এবং Answer

WebRTC মডেলে, দুই ধরনের SDP বার্তা রয়েছে: Offer (প্রস্তাব) এবং Answer (উত্তর)। Offer সংযোগ সূচনাকারী দ্বারা তৈরি করা হয় এবং এতে কাঙ্ক্ষিত মিডিয়া সেশনের সম্পূর্ণ বর্ণনা থাকে। Answer দূরবর্তী অংশগ্রহণকারী দ্বারা Offer-এর জবাবে তৈরি করা হয় এবং প্রস্তাব দ্বারা আরোপিত সীমাবদ্ধতা বিবেচনায় নিয়ে তার ক্ষমতা ধারণ করে।

Offer এবং Answer-এর মধ্যে প্রধান পার্থক্য বৈশিষ্ট্যের অর্থের মধ্যে নিহিত। Offer সমস্ত সমর্থিত কোডেক, ট্রান্সপোর্ট প্রোটোকল এবং নেটওয়ার্ক ঠিকানা তালিকাভুক্ত করে যা সূচনাকারী প্রস্তাব করতে পারে। Answer এই ক্ষমতাগুলির একটি উপসেট বেছে নেয় যা দূরবর্তী পক্ষ সমর্থন করে। উদাহরণস্বরূপ, যদি Offer opus, ISAC এবং PCMU প্রস্তাব করে, Answer সবচেয়ে পছন্দের কোডেক হিসাবে শুধুমাত্র opus বেছে নিতে পারে।

বিনিময় প্রক্রিয়া W3C WebRTC স্পেসিফিকেশন দ্বারা নিয়ন্ত্রিত হয় এবং এতে RTCPeerConnection-এর বেশ কয়েকটি অবস্থা অন্তর্ভুক্ত থাকে। createOffer()-এর মাধ্যমে Offer তৈরি এবং এটি লোকাল বর্ণনা হিসাবে সেট করার পর, সংযোগ have-local-offer অবস্থায় প্রবেশ করে। Answer গ্রহণ এবং setRemoteDescription()-এর মাধ্যমে এটি রিমোট বর্ণনা হিসাবে সেট করার পর, সংযোগ stable অবস্থায় প্রবেশ করে — মিডিয়া প্রেরণের জন্য প্রস্তুত চূড়ান্ত অবস্থা।

মোবাইল SDK-তে SDP ব্যবহার

WebRTC-র জন্য মোবাইল SDK — Android-এর জন্য Google WebRTC এবং iOS-এর জন্য WebRTC.framework — Offer এবং Answer-এর মাধ্যমে SDP বিনিময় সম্পূর্ণরূপে সমর্থন করে। Android-এ, Offer তৈরি করতে createOffer() মেথড সহ PeerConnection ক্লাস ব্যবহার করা হয়, যা ব্রাউজার API-এর মতো। ফলস্বরূপ SDP বর্ণনা সিগন্যালিং চ্যানেলের মাধ্যমে একটি স্ট্রিং হিসাবে প্রেরণ করা হয়।

iOS-এ, SDP-এর সাথে কাজ WebRTC ফ্রেমওয়ার্কের RTCSessionDescription ক্লাসের মাধ্যমে করা হয়। আরম্ভ করার সময়, টাইপ (RTCSdpTypeOffer বা RTCSdpTypeAnswer) এবং SDP স্ট্রিং নির্দিষ্ট করা হয়। প্ল্যাটফর্ম স্বয়ংক্রিয়ভাবে SDP পার্স করে এবং প্রেরিত প্যারামিটার অনুযায়ী সংযোগ কনফিগার করে।

kotlin
val configuration = PeerConnection.RTCConfiguration(List())
val peerConnection = factory.createPeerConnection(configuration, object : PeerConnection.Observer {
    override fun onIceCandidate(candidate: IceCandidate) { }
})

// Android-এ SDP Offer তৈরি করুন
peerConnection.createOffer(object : SdpObserver {
    override fun onCreateSuccess(sdp: SessionDescription) {
        peerConnection.setLocalDescription(this, sdp)
        // দূরবর্তী পিয়ারে SDP স্ট্রিং পাঠান
        sendSdpToRemotePeer(sdp.description)
    }
}, new MediaConstraints())

SDP স্ট্রিং-এর সাথে সরাসরি কাজ করার ক্ষমতা ডেভেলপারদের নমনীয়তা দেয়: তারা পাঠানোর আগে SDP পরিবর্তন করতে পারে, নির্দিষ্ট কোডেক যোগ বা সরাতে পারে, ICE প্যারামিটার কনফিগার করতে পারে বা কাস্টম বৈশিষ্ট্য যোগ করতে পারে। Android অ্যাপ্লিকেশনের জন্য, নেটওয়ার্ক ব্যান্ডউইথ কম হলে SDP-তে ভিডিও নিষ্ক্রিয় করা প্রায়শই প্রয়োজন হয় — এটি SDP বর্ণনা থেকে সংশ্লিষ্ট m= লাইন সরিয়ে করা হয়।

মোবাইল ডেভেলপমেন্টে SDP

মোবাইল ডেভেলপমেন্টে, SDP প্রধানত WebRTC-এর প্রসঙ্গে ব্যবহৃত হয় — ভিডিও কল, ভয়েস চ্যাট এবং স্ট্রিমিং সহ অ্যাপ্লিকেশন তৈরি করার জন্য। Android এবং iOS-এর মোবাইল অ্যাপ্লিকেশন SDP বার্তার সূচনাকারী এবং প্রাপক উভয় হিসাবে কাজ করতে পারে, যা প্রতিসম পিয়ার-টু-পিয়ার সংযোগ সক্ষম করে।

মোবাইল অ্যাপ্লিকেশনের একটি বৈশিষ্ট্য হল পরিবর্তনশীল নেটওয়ার্ক গুণমান অবস্থার অধীনে SDP-এর সাথে কাজ করার প্রয়োজনীয়তা। Wi-Fi এবং মোবাইল ইন্টারনেটের মধ্যে স্যুইচ করার সময়, সেইসাথে ব্যান্ডউইথ পরিবর্তনের সময়, একটি নতুন SDP বর্ণনা তৈরি করার প্রয়োজন হতে পারে। এটি পুনরালোচনা প্রক্রিয়া ব্যবহার করে করা হয় — createOffer() এবং setLocalDescription()-এর মাধ্যমে বারবার SDP বিনিময়।

Google WebRTC টিম (2023) অনুসারে, মোবাইল ডিভাইসের জন্য SDP বিনিময় অপ্টিমাইজ করার মধ্যে নেটওয়ার্ক পরিবর্তনের সময় ICE restart ব্যবহার, কম বিটরেট কোডেক (অডিওর জন্য opus, ভিডিওর জন্য VP8) অগ্রাধিকার দেওয়া এবং অপ্রয়োজনীয় মিডিয়া স্ট্রিম বাদ দিয়ে SDP স্ট্রিং আকার কমানো অন্তর্ভুক্ত। মূল সুবিধা হল মোবাইল নেটওয়ার্ক অবস্থায় সংযোগ স্থাপনের সময় লেটেন্সি কমানো।

মোবাইল নেটওয়ার্কের জন্য SDP অপ্টিমাইজেশন

মোবাইল ডিভাইসে SDP-এর সাথে কাজ করার সময় মূল কাজগুলির মধ্যে একটি হল SDP বর্ণনার আকার কমানো। অডিও এবং ভিডিও সহ একটি সাধারণ WebRTC সেশনের জন্য সম্পূর্ণ SDP 2–5 KB হতে পারে, যা ধীর নেটওয়ার্কের জন্য গুরুত্বপূর্ণ। অপ্টিমাইজেশনের মধ্যে BUNDLE (স্ট্রিম মাল্টিপ্লেক্সিং) ব্যবহার, অসমর্থিত কোডেক সরানো এবং ICE প্রার্থী সংকুচিত করা অন্তর্ভুক্ত।

মোবাইল ডিভাইসের জন্য একটি অতিরিক্ত সমস্যা হল সীমিত SDP জীবনকাল। অস্থির সংযোগ অবস্থায়, SDP দূরবর্তী অংশগ্রহণকারী এটি প্রক্রিয়া করার আগেই পুরানো হয়ে যেতে পারে। সমাধান হল Answer পাওয়ার জন্য ছোট টাইমআউট ব্যবহার করা এবং প্রয়োজন হলে SDP পুনরায় পাঠানো। ICE restart প্রক্রিয়া RTCPeerConnection সম্পূর্ণরূপে পুনরায় তৈরি না করেই সংযোগ আপডেট করার অনুমতি দেয়। a=ice-lite বৈশিষ্ট্য সার্ভার পক্ষে ICE বাস্তবায়ন সহজ করে।

SDP-এর সাথে কাজ করার জন্য জনপ্রিয় লাইব্রেরি

মোবাইল অ্যাপ্লিকেশন ডেভেলপারদের SDP-এর সাথে কাজ সহজ করে এমন রেডি-মেড লাইব্রেরিতে অ্যাক্সেস রয়েছে। libjingle_peerconnection (Google WebRTC) Android-এর জন্য প্রধান লাইব্রেরি, যা SDP পরিচালনার জন্য সম্পূর্ণ API সরবরাহ করে। iOS-এর জন্য, অনুরূপ কার্যকারিতা সহ WebRTC.framework ব্যবহার করা হয়। উভয় লাইব্রেরি স্বয়ংক্রিয়ভাবে SDP তৈরি এবং পার্স করে, কিন্তু প্রয়োজন হলে কাঁচা SDP স্ট্রিং-এ অ্যাক্সেস সরবরাহ করে।

SDP-এর উপর আরও সূক্ষ্ম নিয়ন্ত্রণের জন্য, তৃতীয়-পক্ষের সমাধান বিদ্যমান: SDP পার্স এবং পরিবর্তন করার জন্য sdp-transform (JavaScript বা Node.js), ICE প্রার্থীদের সাথে কাজ করার জন্য NICENICE (Java), এবং WebRTC পরিকাঠামো প্রদানকারীদের কাছ থেকে রেডি-মেড SDK যা SDP সহ সমস্ত সিগন্যালিং বিনিময় পরিচালনা করে।

সচরাচর জিজ্ঞাসিত প্রশ্ন

সরল ভাষায় SDP কী?

SDP হল একটি টেক্সট ফরম্যাট যাতে সেশন অংশগ্রহণকারীরা বর্ণনা করে তারা কোন কোডেক, পোর্ট এবং প্রোটোকল সমর্থন করে। এটি ভিডিও বা অডিও প্রেরণ করে না, বরং শুধুমাত্র সংযোগ প্যারামিটার নিয়ে আলোচনা করে। উপমা: SDP হল মেনু, RTP হল প্রকৃত খাবার।

SDP, SIP থেকে কীভাবে আলাদা?

SIP হল একটি সেশন নিয়ন্ত্রণ প্রোটোকল যা কল স্থাপন, পরিবর্তন এবং শেষ করে। SDP হল একটি বর্ণনা ফরম্যাট যা মিডিয়া প্যারামিটার প্রেরণের জন্য SIP বার্তার বডিতে এম্বেড করা হয়। SIP প্রশ্নের উত্তর দেয় “কে কল করছে এবং কাকে”, আর SDP উত্তর দেয় “কোন কোডেক এবং পোর্ট ব্যবহার করতে হবে”।

কি SDP ম্যানুয়ালি পরিবর্তন করা যেতে পারে?

হ্যাঁ, সংযোগ স্থাপনের আগে SDP স্ট্রিং পরিবর্তন করা যেতে পারে। ডেভেলপাররা প্রায়শই একটি নির্দিষ্ট কোডেক নির্বাচন বাধ্য করার জন্য, কাস্টম বৈশিষ্ট্য যোগ করার জন্য বা অসমর্থিত মিডিয়া স্ট্রিম সরানোর জন্য SDP সম্পাদনা করে। তবে, পরিবর্তনগুলি উভয় পক্ষের দ্বারা সম্মত হতে হবে, অন্যথায় সংযোগ স্থাপিত হবে না।

অংশগ্রহণকারীদের মধ্যে SDP কীভাবে প্রেরণ করা হয়?

SDP একটি পৃথক সিগন্যালিং চ্যানেলের মাধ্যমে প্রেরণ করা হয় যা ডেভেলপার স্বাধীনভাবে বাস্তবায়ন করে। সাধারণ বিকল্পগুলির মধ্যে ওয়েব অ্যাপ্লিকেশনের জন্য WebSocket, HTTP POST অনুরোধ (REST API) বা মোবাইল অ্যাপ্লিকেশনের জন্য নেটিভ প্রোটোকল অন্তর্ভুক্ত। WebRTC SDP প্রেরণের পদ্ধতি নির্ধারণ করে না, শুধুমাত্র এর ফরম্যাট নির্ধারণ করে।

SDP-তে BUNDLE কী?

BUNDLE হল একটি SDP প্রক্রিয়া যা একাধিক মিডিয়া স্ট্রিম (অডিও, ভিডিও, ডেটা) একটি ট্রান্সপোর্ট চ্যানেলে একত্রিত করে। প্রতিটি স্ট্রিমের জন্য পৃথক পোর্টের পরিবর্তে, একটি পোর্ট এবং একটি ICE সংযোগ ব্যবহার করা হয়। এটি মোবাইল ডিভাইসের উপর লোড কমায় এবং লেটেন্সি হ্রাস করে।

সারসংক্ষেপ

  • SDP মাল্টিমিডিয়া সেশন বর্ণনার জন্য একটি টেক্সট প্রোটোকল, যা RFC 8866-তে মান্যকরণ করা হয়েছে এবং WebRTC, VoIP এবং ভিডিও কনফারেন্সিং-এ ব্যবহৃত হয়।
  • type=value ফরম্যাট হল SDP-এর ভিত্তি, যেখানে প্রতিটি লাইন একটি প্যারামিটার বর্ণনা করে: সংস্করণ, সেশনের নাম, মিডিয়া স্ট্রিম, কোডেক, পোর্ট এবং বৈশিষ্ট্য।
  • WebRTC পিয়ার-টু-পিয়ার সংযোগ স্থাপনের আগে অংশগ্রহণকারীদের মধ্যে Offer এবং Answer সিগন্যালিং বিনিময়ের জন্য SDP ব্যবহার করে।
  • ICE প্রার্থী SDP বৈশিষ্ট্য হিসাবে প্রেরণ করা হয় এবং ফায়ারওয়ালের পিছনে ডিভাইসের জন্য NAT ট্রাভার্সাল সরবরাহ করে।
  • SDP-এর নিরাপত্তা DTLS ফিঙ্গারপ্রিন্ট এবং SRTP-এর মাধ্যমে নিশ্চিত করা হয়, যা মিডিয়া স্ট্রিম এনক্রিপশন নিশ্চিত করে।
  • মোবাইল SDK — Android-এর জন্য Google WebRTC এবং iOS-এর জন্য WebRTC.framework — SDP বিনিময়ের জন্য সম্পূর্ণ API সরবরাহ করে।
  • SDP অপ্টিমাইজেশন মোবাইল ডিভাইসের জন্য BUNDLE, অসমর্থিত কোডেক সরানো এবং নেটওয়ার্ক পরিবর্তনের সময় ICE restart অন্তর্ভুক্ত।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন