গুগল ব্ল্যাক সম্প্রদায়ের জন্য জাতিগত ইকুইটি আগুয়ান করতে প্রতিশ্রুতিবদ্ধ হয়। দেখ কিভাবে.
This page was translated by the Cloud Translation API.
Switch to English

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

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

সিগনালিং

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

ফলো কোড দেখায় কিভাবে এই fictious সংকেত সেবা পাঠাতে ব্যবহার করা যেতে পারে এবং অ্যাসিঙ্ক্রোনাস বার্তা গ্রহণ snippet। এই গাইডে অবশিষ্ট উদাহরণ যেখানে প্রয়োজন মধ্যে ব্যবহার করা হবে।

 // 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!');
 

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

পিয়ার সংযোগ চালু

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

একবার RTCPeerConnection তৈরি করা হয় আমরা যদি আমরা পিয়ার আহ্বান করা হয় বা পিয়ার গ্রহণ উপর নির্ভর করে, একটি আভ্যন্তরীন উৎপাদন প্রস্তাব বা উত্তর তৈরি করতে হবে। একবার আভ্যন্তরীন উৎপাদন প্রস্তাব বা উত্তর তৈরি করা হয়, এটি একটি ভিন্ন চ্যানেলের মাধ্যমে দূরবর্তী পিয়ার পাঠানো করা আবশ্যক। পাসিং আভ্যন্তরীন উৎপাদন দূরবর্তী সহকর্মীরা সংকেত বলা হয় বস্তু এবং WebRTC এর স্পেসিফিকেশন দ্বারা আচ্ছাদিত করা হয় না।

কলিং দিক থেকে পিয়ার সংযোগ সেটআপ শুরু করার জন্য, আমরা একটি তৈরি 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() গৃহীত প্রস্তাবের জবাব তৈরি করুন। এই উত্তরটি ব্যবহার স্থানীয় বিবরণ হিসাবে সেট করা হয় 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});
    }
});
 

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

বরফ প্রার্থীদের

আগে দুই সহকর্মীরা করা WebRTC ব্যবহার communitcate পারে, তারা বিনিময় সংযোগ তথ্য প্রয়োজন। যেহেতু নেটওয়ার্ক অবস্থার কারণের সংখ্যার উপর dependning বিভিন্ন রকমের হতে পারে, একটি বাইরের পরিষেবাতে সাধারণত একটি পিয়ার এ সংযোগ করার জন্য সম্ভাব্য প্রার্থী আবিষ্কার জন্য ব্যবহৃত হয়। এই পরিষেবাটি বরফ বলা হয় এবং হয় একটি STUN বা একটি মোড় সার্ভার ব্যবহার করছে। প্রচেষ্টা চালায় STUN ন্যাট জন্য সেশন ট্র্যাভেরসাল উপযোগিতা ঘোরা, এবং সাধারণত সবচেয়ে WebRTC এর অ্যাপ্লিকেশন পরোক্ষভাবে ব্যবহার করা হয়।

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

ট্রিকল বরফ

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

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

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

 // 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 যেখানে আমরা শোনার connectionstatechange ইভেন্ট নেই।

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

RTCPeerConnection এপিআই ডকুমেন্টেশন