পিয়ার সংযোগ

RTCPeerConnection হল WebRTC API-এর কেন্দ্রীয় ইন্টারফেস। এটি স্থানীয় এবং দূরবর্তী পিয়ারের মধ্যে সংযোগের প্রতিনিধিত্ব করে এবং সংযোগ স্থাপনের জন্য প্রয়োজনীয় সমস্ত ফাংশন এবং ইভেন্ট সরবরাহ করে।

একটি পিয়ার সংযোগ স্থাপন

WebRTC কার্যকারিতা বাস্তবায়নকারী অ্যাপ্লিকেশনগুলি সাধারণত RTCPeerConnection ইন্টারফেসের উপর নির্ভর করে। কলকারীর দিক থেকে (অর্থাৎ, একটি সংযোগের সূচনাকারী) একটি সংযোগ স্থাপনের প্রক্রিয়াটি সাধারণত নিম্নলিখিত হয়:

  1. উপযুক্ত ICE কনফিগারেশন সহ একটি নতুন RTCPeerConnection উদাহরণ তৈরি করুন।
  2. RTCPeerConnection.createOffer() ব্যবহার করে একটি স্থানীয় SDP বিবরণ তৈরি করুন।
  3. RTCPeerConnection.setLocalDescription() ব্যবহার করে স্থানীয় SDP বিবরণ সেট করুন।
  4. স্থানান্তর (একটি সিগন্যালিং পরিষেবা ব্যবহার করে) দূরবর্তী পিয়ারের কাছে স্থানীয় SDP বিবরণ।
  5. RTCPeerConnectionicecandidate ইভেন্টের জন্য একজন শ্রোতা নিবন্ধন করুন।
  6. প্রতিটি icecandidate ইভেন্টের জন্য, এটিকে (একটি সিগন্যালিং পরিষেবা ব্যবহার করে) দূরবর্তী পিয়ারে স্থানান্তর করুন।
  7. সিগন্যালিং পরিষেবা থেকে একটি ইনকামিং রিমোট এসডিপি বিবরণের জন্য অপেক্ষা করুন এবং এটি RTCPeerConnection.setRemoteDescription() ব্যবহার করে সেট করুন।
  8. সিগন্যালিং পরিষেবা থেকে আগত দূরবর্তী ICE প্রার্থীদের জন্য অপেক্ষা করুন এবং RTCPeerConnection.addIceCandidate() ব্যবহার করে তাদের যোগ করুন

কলির দিকে, প্রক্রিয়াটি কিছুটা আলাদা।

  1. উপযুক্ত ICE কনফিগারেশন সহ একটি নতুন RTCPeerConnection উদাহরণ তৈরি করুন।
  2. সিগন্যালিং পরিষেবা থেকে একটি ইনকামিং রিমোট এসডিপি বিবরণের জন্য অপেক্ষা করুন এবং এটি RTCPeerConnection.setRemoteDescription() ব্যবহার করে সেট করুন।
  3. RTCPeerConnection.createAnswer() কল করে দূরবর্তী SDP বর্ণনার জন্য একটি উত্তর তৈরি করুন।
  4. স্থানান্তর (একটি সংকেত পরিষেবা ব্যবহার করে) দূরবর্তী পিয়ার উত্তর.
  5. RTCPeerConnectionicecandidate ইভেন্টের জন্য একজন শ্রোতা নিবন্ধন করুন।
  6. প্রতিটি icecandidate ইভেন্টের জন্য, এটিকে (একটি সিগন্যালিং পরিষেবা ব্যবহার করে) দূরবর্তী পিয়ারে স্থানান্তর করুন।
  7. সিগন্যালিং পরিষেবা থেকে আগত দূরবর্তী ICE প্রার্থীদের জন্য অপেক্ষা করুন এবং RTCPeerConnection.addIceCandidate() ব্যবহার করে তাদের যোগ করুন

এই API এর সাথে চ্যালেঞ্জ হল যে এই অপারেশনগুলির বেশিরভাগই অ্যাসিঙ্ক্রোনাস, যা প্রায়শই একটি WebRTC অ্যাপ্লিকেশনের বাস্তব বাস্তবায়নকে জটিল করে তোলে। অনেক ফাংশন একটি Promise প্রদান করে যা প্রক্রিয়ার পরবর্তী ধাপটি চালিয়ে যাওয়ার আগে সমাধান করতে হবে।

এটি সুপারিশ করা হয় যে এই API ব্যবহার করে একটি অ্যাপ্লিকেশন প্রয়োগ করার সময়, বিকাশকারী শ্রোতাদের নিবন্ধন করার পরিবর্তে ( Promise.then() ব্যবহার করে) async ব্যবহার করুন এবং await করুন, কারণ এটি আপনার কোড অনুসরণ করা আরও সহজ করে তোলে। নিম্নলিখিত উদাহরণ বিবেচনা করুন:

function createAndSendOffer(peerConnection, signallingService) {
    peerConnection.createOffer()
                  .then(offer => {
                      signallingService.send({
                          type: 'offer',
                          data: offer
                      });
                  });
}

async এবং await ব্যবহার করে উপরের কোডটি লেখার সময়, আমরা নিম্নলিখিতগুলি পাই:

async function createAndSendOffer(peerConnection, signallingService) {
    const offer = await peerConnection.createOffer();
    signallingService.send({
        type: 'offer',
        data: offer
    });
}