Google is committed to advancing racial equity for Black communities. See how.
इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

सहकर्मी कनेक्शन के साथ शुरुआत करना

पीयर कनेक्शन वेबआरटीसी विनिर्देशों का एक हिस्सा है जो पीयर-टू-पीयर प्रोटोकॉल का उपयोग करके संवाद करने के लिए विभिन्न कंप्यूटरों पर दो अनुप्रयोगों को जोड़ने का काम करता है। साथियों के बीच संचार वीडियो, ऑडियो या मनमाना द्विआधारी डेटा ( RTCDataChannel एपीआई का समर्थन करने वाले ग्राहकों के लिए) हो सकता है। यह पता लगाने के लिए कि दो सहकर्मी कैसे जुड़ सकते हैं, दोनों ग्राहकों को एक आईसीई सर्वर कॉन्फ़िगरेशन प्रदान करने की आवश्यकता है। यह या तो STUN या TURN- सर्वर है, और उनकी भूमिका प्रत्येक ग्राहक को ICE उम्मीदवार प्रदान करना है, जिसे बाद में दूरस्थ सहकर्मी को हस्तांतरित किया जाता है। आईसीई उम्मीदवारों के इस स्थानांतरण को आमतौर पर सिग्नलिंग कहा जाता है।

सिग्नलिंग

WebRTC विनिर्देश में ICE (इंटरनेट कनेक्टिविटी इस्टैब्लिशमेंट) सर्वर के साथ संचार करने के लिए API शामिल है, लेकिन सिग्नलिंग घटक इसका हिस्सा नहीं है। दो साथियों को साझा करने के लिए सिग्नलिंग की आवश्यकता है कि उन्हें कैसे कनेक्ट करना चाहिए। आमतौर पर यह एक नियमित HTTP-आधारित वेब एपीआई (यानी, एक 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 ऑब्जेक्ट को इसके पैरामीटर के रूप में लेता है। यह ऑब्जेक्ट परिभाषित करता है कि सहकर्मी कनेक्शन कैसे सेट किया गया है और इसमें उपयोग करने के लिए ICE सर्वर के बारे में जानकारी होनी चाहिए।

एक बार RTCPeerConnection जाने के बाद हमें SDP ऑफ़र या उत्तर बनाने की आवश्यकता होती है, जो इस बात पर निर्भर करता है कि हम कॉलिंग पीयर हैं या पियर प्राप्त कर रहे हैं। एक बार एसडीपी प्रस्ताव या उत्तर तैयार हो जाने के बाद, इसे एक अलग चैनल के माध्यम से दूरस्थ सहकर्मी को भेजा जाना चाहिए। दूरस्थ साथियों के लिए एसडीपी वस्तुओं को पास करना सिग्नलिंग कहा जाता है और वेबआरटीसी विनिर्देश द्वारा कवर नहीं किया जाता है।

कॉलिंग पक्ष से सहकर्मी कनेक्शन सेटअप आरंभ करने के लिए, हम RTCPeerConnection ऑब्जेक्ट बनाते हैं और फिर एक RTCSessionDescription ऑब्जेक्ट बनाने के लिए createOffer() कॉल createOffer() । यह सत्र विवरण 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});
    }
});
 

एक बार जब दो साथियों ने स्थानीय और दूरस्थ सत्र विवरण दोनों को सेट किया है तो वे दूरस्थ सहकर्मी की क्षमताओं को जानते हैं। इसका मतलब यह नहीं है कि साथियों के बीच संबंध तैयार है। इस काम के लिए हमें प्रत्येक सहकर्मी पर ICE उम्मीदवारों को इकट्ठा करने और दूसरे साथी को हस्तांतरण (सिग्नलिंग चैनल पर) करने की आवश्यकता है।

आईसीई उम्मीदवारों

इससे पहले कि दो सहकर्मी WebRTC का उपयोग करके कम्युनिटेकट कर सकते हैं, उन्हें कनेक्टिविटी जानकारी का आदान-प्रदान करने की आवश्यकता है। चूंकि नेटवर्क की स्थिति कई कारकों पर निर्भर हो सकती है, इसलिए बाहरी सेवा का उपयोग आमतौर पर सहकर्मी से जुड़ने के लिए संभावित उम्मीदवारों की खोज के लिए किया जाता है। इस सेवा को ICE कहा जाता है और यह किसी STUN या TURN सर्वर का उपयोग कर रहा है। STUN NAT के लिए सत्र त्रैमासिक उपयोगिताओं के लिए खड़ा है, और आमतौर पर ज्यादातर WebRTC अनुप्रयोगों में अप्रत्यक्ष रूप से उपयोग किया जाता है।

TURN (रिले नेट का उपयोग करते हुए ट्रैवर्सल) अधिक उन्नत समाधान है जो STUN प्रोटोकॉल को शामिल करता है और अधिकांश वाणिज्यिक WebRTC आधारित सेवाएं साथियों के बीच संबंध स्थापित करने के लिए TURN सर्वर का उपयोग करती हैं। WebRTC API सीधे STUN और TURN दोनों का समर्थन करता है, और यह अधिक पूर्ण अवधि के इंटरनेट कनेक्टिविटी प्रतिष्ठान के तहत इकट्ठा होता है। WebRTC कनेक्शन बनाते समय, हम आमतौर पर RTCPeerConnection ऑब्जेक्ट के लिए कॉन्फ़िगरेशन में एक या कई ICE सर्वर प्रदान करते हैं।

ट्रिकल ICE

एक बार RTCPeerConnection ऑब्जेक्ट RTCPeerConnection बाद, अंतर्निहित रूपरेखा कनेक्टिविटी स्थापना (ICC उम्मीदवारों) के लिए उम्मीदवारों को इकट्ठा करने के लिए प्रदान किए गए ICE सर्वर का उपयोग करती है। RTCPeerConnection सभा किस स्थिति में ( new , gathering या complete ) RTCPeerConnection संकेतों पर इवेंट icegatheringstatechange

हालांकि एक सहकर्मी के लिए आईसीई सभा के पूरा होने तक इंतजार करना संभव है, यह आमतौर पर "ट्रिकल आइस" तकनीक का उपयोग करने के लिए बहुत अधिक कुशल है और प्रत्येक आईसीई उम्मीदवार को दूरस्थ सहकर्मी तक पहुंचाता है, क्योंकि यह खोजा जाता है। यह सहकर्मी कनेक्टिविटी के लिए सेटअप समय को काफी कम कर देगा और वीडियो कॉल को कम देरी के साथ शुरू करने की अनुमति देगा।

ICE उम्मीदवारों को इकट्ठा करने के लिए, बस 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 API प्रलेखन