मिलते-जुलते ऐप्लिकेशन

RTCPeerConnection, WebRTC API में मुख्य इंटरफ़ेस होता है. यह लोकल और रिमोट पीयर के बीच कनेक्शन को दिखाता है. साथ ही, कनेक्शन बनाने के लिए ज़रूरी सभी फ़ंक्शन और इवेंट उपलब्ध कराता है.

पीयर कनेक्शन सेट अप करना

WebRTC की सुविधा लागू करने वाले ऐप्लिकेशन, आम तौर पर RTCPeerConnection इंटरफ़ेस पर काफ़ी हद तक निर्भर होते हैं. कॉल करने वाले व्यक्ति (यानी कि कनेक्शन शुरू करने वाला पीयर) के लिए, कनेक्शन बनाने की प्रोसेस आम तौर पर यह होती है:

  1. सही ICE कॉन्फ़िगरेशन के साथ, नया RTCPeerConnection इंस्टेंस बनाएं.
  2. RTCPeerConnection.createOffer() का इस्तेमाल करके, एसडीपी की स्थानीय जानकारी बनाएं.
  3. RTCPeerConnection.setLocalDescription() का इस्तेमाल करके, लोकल एसडीपी ब्यौरा सेट करें.
  4. सिग्नलिंग सेवा का इस्तेमाल करके, लोकल एसडीपी की जानकारी को रिमोट पीयर को ट्रांसफ़र करें.
  5. RTCPeerConnection पर icecandidate इवेंट के लिए लिसनर रजिस्टर करें.
  6. हर icecandidate इवेंट के लिए, इसे (सिग्नलिंग सेवा का इस्तेमाल करके) रिमोट पीयर को ट्रांसफ़र करें.
  7. सिग्नलिंग सेवा से आने वाले रिमोट एसडीपी ब्यौरे का इंतज़ार करें और RTCPeerConnection.setRemoteDescription() का इस्तेमाल करके इसे सेट करें.
  8. सिग्नलिंग सेवा से आने वाले रिमोट आईसीई कैंडिडेट का इंतज़ार करें और उन्हें RTCPeerConnection.addIceCandidate() का इस्तेमाल करके जोड़ें

कॉल पाने वाले व्यक्ति के लिए, यह प्रोसेस थोड़ी अलग होती है.

  1. सही ICE कॉन्फ़िगरेशन के साथ, नया RTCPeerConnection इंस्टेंस बनाएं.
  2. सिग्नलिंग सेवा से आने वाले रिमोट एसडीपी ब्यौरे का इंतज़ार करें और RTCPeerConnection.setRemoteDescription() का इस्तेमाल करके इसे सेट करें.
  3. RTCPeerConnection.createAnswer() को कॉल करके, रिमोट एसडीपी के ब्यौरे के लिए जवाब बनाएं.
  4. जवाब को रिमोट पीयर पर ट्रांसफ़र करें (सिग्नलिंग सेवा का इस्तेमाल करके).
  5. RTCPeerConnection पर icecandidate इवेंट के लिए लिसनर रजिस्टर करें.
  6. हर icecandidate इवेंट के लिए, इसे (सिग्नलिंग सेवा का इस्तेमाल करके) रिमोट पीयर को ट्रांसफ़र करें.
  7. सिग्नलिंग सेवा से आने वाले रिमोट आईसीई कैंडिडेट का इंतज़ार करें और उन्हें RTCPeerConnection.addIceCandidate() का इस्तेमाल करके जोड़ें

इस एपीआई के साथ समस्या यह है कि इनमें से ज़्यादातर ऑपरेशन एसिंक्रोनस होते हैं. इससे WebRTC ऐप्लिकेशन को लागू करना मुश्किल हो जाता है. कई फ़ंक्शन, Promise दिखाते हैं. इस समस्या को ठीक करने के बाद ही, प्रोसेस का अगला चरण पूरा किया जा सकता है.

हमारा सुझाव है कि इस एपीआई का इस्तेमाल करके ऐप्लिकेशन लागू करते समय, डेवलपर को लिसनर रजिस्टर करने (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
    });
}