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

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
    });
}