Google is committed to advancing racial equity for Black communities. See how.
This page was translated by the Cloud Translation API.
Switch to English

পিয়ার সংযোগ দিয়ে শুরু করা

পিয়ার সংযোগগুলি ওয়েবআরটিটিসি স্পেসিফিকেশনের অংশ যা পিয়ার-টু-পিয়ার প্রোটোকল ব্যবহার করে যোগাযোগ করার জন্য বিভিন্ন কম্পিউটারে দুটি অ্যাপ্লিকেশন সংযোগের জন্য ডিল করে। সমবয়সীদের মধ্যে যোগাযোগ ভিডিও, অডিও বা স্বেচ্ছাসেবী বাইনারি ডেটা ( RTCDataChannel এপিআই সমর্থনকারী ক্লায়েন্টদের জন্য) হতে পারে। কীভাবে দুজন সহকর্মী সংযোগ করতে পারে তা আবিষ্কার করতে উভয় ক্লায়েন্টকে আইসিই সার্ভার কনফিগারেশন সরবরাহ করা প্রয়োজন। এটি হয় স্টান বা টার্ন-সার্ভার এবং তাদের ভূমিকা হ'ল আইসিই পরীক্ষার্থীদের প্রতিটি ক্লায়েন্টকে সরবরাহ করা যা পরে দূরবর্তী পিয়ারে স্থানান্তরিত হয়। আইসিই পরীক্ষার্থীদের এই স্থানান্তরকে সাধারণত সংকেত বলা হয়।

সিগনালিং

ওয়েবআরটিটিসি স্পেসিফিকেশনে আইসিই (ইন্টারনেট সংযোগ স্থাপন) সার্ভারের সাথে যোগাযোগের জন্য এপিআই অন্তর্ভুক্ত রয়েছে তবে সংকেত উপাদানটি এর অংশ নয়। দুই সহকর্মীর কীভাবে তাদের সংযোগ করা উচিত তা জানানোর জন্য সংকেত প্রয়োজন সাধারণত এটি একটি নিয়মিত HTTP- ভিত্তিক ওয়েব API (যেমন, একটি REST পরিষেবা বা অন্যান্য RPC প্রক্রিয়া) এর মাধ্যমে সমাধান করা হয় যেখানে পিয়ার সংযোগ শুরুর আগে ওয়েব অ্যাপ্লিকেশনগুলি প্রয়োজনীয় তথ্যটি রিলে করতে পারে।

অনুসরণ কোড স্নিপেট দেখায় যে কীভাবে এই মূর্ত সিগন্যালিং পরিষেবাটি সংশ্লেষে বার্তা প্রেরণ এবং গ্রহণ করতে ব্যবহার করা যেতে পারে। এটি প্রয়োজনীয় যেখানে এই গাইডের বাকী উদাহরণগুলিতে ব্যবহৃত হবে।

 // Set up an asynchronous communication channel that will be
// used during the peer connection setup
const signalingChannel = new SignalingChannel(remoteClientId);
signalingChannel.addEventListener('message', message => {
    // New message from remote client received
});

// Send an asynchronous message to the remote client
signalingChannel.send('Hello!');
 

সিগন্যালিং বিভিন্নভাবে প্রয়োগ করা যেতে পারে, এবং ওয়েবআরটিসি স্পেসিফিকেশন কোনও নির্দিষ্ট সমাধান পছন্দ করে না।

পিয়ার সংযোগ শুরু করা হচ্ছে

প্রতিটি পিয়ার সংযোগ একটি RTCPeerConnection সংযোগ বস্তু দ্বারা পরিচালিত হয়। এই শ্রেণীর জন্য RTCConfiguration তার প্যারামিটার হিসাবে একটি একক RTCConfiguration অবজেক্ট নেয়। এই অবজেক্টটি পিয়ার সংযোগ কীভাবে সেট আপ করা হয়েছে তা নির্ধারণ করে এবং ব্যবহারের জন্য আইসিই সার্ভারগুলি সম্পর্কে তথ্য থাকা উচিত।

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

কলিং দিক থেকে পিয়ার সংযোগ সেটআপ শুরু করার জন্য, আমরা একটি তৈরি RTCPeerConnection বস্তু এবং তারপর কল createOffer() একটি তৈরি করতে RTCSessionDescription অবজেক্ট। এই সেশনের বিবরণটি setLocalDescription() ব্যবহার করে স্থানীয় বিবরণ হিসাবে সেট করা হয়েছে এবং তারপরে আমাদের সংকেত চ্যানেলের উপর দিয়ে প্রাপ্তির দিকে প্রেরণ করা হয়। যখন আমাদের প্রস্তাবিত সেশনের বিবরণের কোনও উত্তর যখন গ্রহণকারী পক্ষ থেকে আসে তখন আমরা আমাদের সংকেত চ্যানেলে একটি শ্রোতাও সেট আপ করি।

 async function makeCall() {
    const configuration = {'iceServers': [{'urls': 'stun:stun.l.google.com:19302'}]}
    const peerConnection = new RTCPeerConnection(configuration);
    signalingChannel.addEventListener('message', async message => {
        if (message.answer) {
            const remoteDesc = new RTCSessionDescription(message.answer);
            await peerConnection.setRemoteDescription(remoteDesc);
        }
    });
    const offer = await peerConnection.createOffer();
    await peerConnection.setLocalDescription(offer);
    signalingChannel.send({'offer': offer});
}
 

গ্রহণের পক্ষে, আমরা আমাদের RTCPeerConnection উদাহরণ তৈরি করার আগে আমরা আগত অফারের জন্য অপেক্ষা করি। এটি হয়ে গেলে আমরা setRemoteDescription() ব্যবহার করে প্রাপ্ত অফারটি সেট করি। এর পরে, আমরা প্রাপ্ত অফারের একটি উত্তর তৈরি করতে createAnswer() কল createAnswer() । এই উত্তরটি setLocalDescription() ব্যবহার করে স্থানীয় বিবরণ হিসাবে সেট করা আছে এবং তারপরে আমাদের সংকেত সার্ভারের মাধ্যমে কলিং সাইডে প্রেরণ করা হয়।

 const peerConnection = new RTCPeerConnection(configuration);
signalingChannel.addEventListener('message', async message => {
    if (message.offer) {
        peerConnection.setRemoteDescription(new RTCSessionDescription(message.offer));
        const answer = await peerConnection.createAnswer();
        await peerConnection.setLocalDescription(answer);
        signalingChannel.send({'answer': answer});
    }
});
 

একবার দু'টি সমবয়সী স্থানীয় এবং দূরবর্তী উভয় সেশনের বিবরণ সেট করে নিলে তারা দূরবর্তী পিয়ারের দক্ষতাগুলি জানতে পারে। এর অর্থ এই নয় যে পিয়ারদের মধ্যে সংযোগ প্রস্তুত। এটি কাজ করার জন্য আমাদের প্রতিটি পিয়ারের আইসিই প্রার্থীদের সংগ্রহ করতে হবে এবং অন্য পিয়ারে (সিগন্যালিং চ্যানেলের উপরে) স্থানান্তর করতে হবে।

আইসিইর প্রার্থীরা

দু'জন সমবয়সী ওয়েবআরটিটিসি ব্যবহার করে যোগাযোগ করতে পারার আগে তাদের সংযোগ সম্পর্কিত তথ্য বিনিময় করতে হবে। যেহেতু নেটওয়ার্কের পরিস্থিতি বিভিন্ন কারণের উপর নির্ভর করে পরিবর্তিত হতে পারে, তাই বাহ্যিক পরিষেবাটি সাধারণত পিয়ারের সাথে সংযোগের জন্য সম্ভাব্য প্রার্থীদের আবিষ্কার করার জন্য ব্যবহৃত হয়। এই পরিষেবাটিকে আইসিই বলা হয় এবং এটি স্টান বা টার্ন সার্ভারটি ব্যবহার করে। STUN বলতে NAT এর জন্য সেশন ট্র্যাভারসাল ইউটিলিটিস বোঝায় এবং বেশিরভাগ ওয়েবআরটিসি অ্যাপ্লিকেশনগুলিতে সাধারণত পরোক্ষভাবে ব্যবহৃত হয়।

টার্ন (ট্র্যাভারসাল ইউজিং রিলে এনএটি) হ'ল আরও উন্নত সমাধান যা স্টান প্রোটোকলকে অন্তর্ভুক্ত করে এবং বেশিরভাগ বাণিজ্যিক ওয়েবআরটিসি ভিত্তিক পরিষেবা সমবয়সীদের মধ্যে সংযোগ স্থাপনের জন্য একটি টার্ন সার্ভার ব্যবহার করে। ওয়েবআরটিসি এপিআই সরাসরি স্টান এবং টার্ন উভয়কেই সমর্থন করে এবং এটি আরও সম্পূর্ণ মেয়াদে ইন্টারনেট সংযোগ স্থাপনের অধীনে জড়ো হয়। RTCPeerConnection সংযোগ তৈরি করার সময়, আমরা সাধারণত RTCPeerConnection অবজেক্টের জন্য কনফিগারেশনে এক বা একাধিক আইসিই সার্ভার সরবরাহ RTCPeerConnection

ট্রিকল আইসিই

একবার একটি RTCPeerConnection বস্তু তৈরি হয়ে গেলে, অন্তর্নিহিত কাঠামোটি সংযুক্তি প্রতিষ্ঠার (আইসিই প্রার্থী) প্রার্থীদের সংগ্রহ করার জন্য প্রদত্ত আইসিই সার্ভার ব্যবহার করে। icegatheringstatechange ইভেন্ট icegatheringstatechange আইসিই সমাবেশটি কী অবস্থায় রয়েছে তা ( new , gathering বা complete ) RTCPeerConnection

আইসিই সমবেত হওয়া শেষ না হওয়া অবধি সমকক্ষের পক্ষে অপেক্ষা করা সম্ভব হলেও সাধারণত "ট্রিকল আইস" কৌশলটি ব্যবহার করা এবং প্রতিটি আইসিই প্রার্থীকে এটি সন্ধানের সাথে সাথে রিমোট পিয়ারে প্রেরণ করা অনেক বেশি দক্ষ। এটি পিয়ার সংযোগের জন্য সেটআপের সময়টিকে উল্লেখযোগ্যভাবে হ্রাস করবে এবং কম বিলম্বের সাথে একটি ভিডিও কল শুরু করার অনুমতি দেবে।

আইসিই পরীক্ষার্থীদের জড়ো করার জন্য, কেবল icecandidate ইভেন্টের জন্য শ্রোতা যুক্ত করুন। সেই RTCPeerConnectionIceEvent নির্গত RTCPeerConnectionIceEvent এমন candidate সম্পত্তি থাকবে যা একটি নতুন প্রার্থীকে প্রতিনিধিত্ব করবে যা RTCPeerConnectionIceEvent প্রেরণ করা উচিত (সিগন্যালিং দেখুন)।

 // Listen for local ICE candidates on the local RTCPeerConnection
peerConnection.addEventListener('icecandidate', event => {
    if (event.candidate) {
        signalingChannel.send({'new-ice-candidate': event.candidate});
    }
});

// Listen for remote ICE candidates and add them to the local RTCPeerConnection
signalingChannel.addEventListener('message', async message => {
    if (message.iceCandidate) {
        try {
            await peerConnection.addIceCandidate(message.iceCandidate);
        } catch (e) {
            console.error('Error adding received ice candidate', e);
        }
    }
});
 

সংযোগ স্থাপন করা হয়েছে

আইসিসি পরীক্ষার্থীরা একবার প্রাপ্ত হওয়ার পরে, আমাদের আশা করা উচিত যে আমাদের পিয়ার সংযোগের জন্য রাজ্যটি শেষ পর্যন্ত একটি সংযুক্ত অবস্থায় পরিবর্তিত হবে। এটি সনাক্ত করতে, আমরা আমাদের RTCPeerConnection একটি শ্রোতা যুক্ত RTCPeerConnection যেখানে আমরা connectionstatechange ইভেন্টগুলি শুনি।

 // Listen for connectionstatechange on the local RTCPeerConnection
peerConnection.addEventListener('connectionstatechange', event => {
    if (peerConnection.connectionState === 'connected') {
        // Peers connected!
    }
});
 

আরটিসিপিআরসিঙ্কেশন এপিআই ডকুমেন্টেশন