ارتباطات همتا

RTCPeerConnection رابط مرکزی در WebRTC API است. این نشان دهنده ارتباط بین همتای محلی و راه دور است و همه عملکردها و رویدادهای لازم برای برقراری ارتباط را ارائه می دهد.

ایجاد ارتباط همتا

برنامه‌هایی که عملکرد WebRTC را پیاده‌سازی می‌کنند معمولاً به شدت به رابط RTCPeerConnection متکی هستند. از طرف تماس گیرندگان (یعنی همتا که اتصال را آغاز می کند)، فرآیند برقراری ارتباط معمولاً به شرح زیر است:

  1. یک نمونه RTCPeerConnection جدید با پیکربندی ICE مناسب ایجاد کنید.
  2. با استفاده از RTCPeerConnection.createOffer() یک توضیحات SDP محلی ایجاد کنید.
  3. شرح SDP محلی را با استفاده از RTCPeerConnection.setLocalDescription() تنظیم کنید.
  4. توضیحات SDP محلی را (با استفاده از یک سرویس سیگنالینگ) به همتای راه دور منتقل کنید.
  5. یک شنونده برای رویدادهای icecandidate در RTCPeerConnection ثبت کنید.
  6. برای هر رویداد icecandidate ، آن را (با استفاده از یک سرویس سیگنالینگ) به همتای راه دور منتقل کنید.
  7. منتظر یک توضیحات SDP راه دور ورودی از سرویس سیگنالینگ باشید و آن را با استفاده از RTCPeerConnection.setRemoteDescription() تنظیم کنید.
  8. منتظر نامزدهای ورودی راه دور ICE از سرویس سیگنالینگ باشید و آنها را با استفاده از RTCPeerConnection.addIceCandidate() اضافه کنید.

در سمت تماس گیرنده، روند کمی متفاوت است.

  1. یک نمونه RTCPeerConnection جدید با پیکربندی ICE مناسب ایجاد کنید.
  2. منتظر یک توضیحات SDP راه دور ورودی از سرویس سیگنالینگ باشید و آن را با استفاده از RTCPeerConnection.setRemoteDescription() تنظیم کنید.
  3. با فراخوانی RTCPeerConnection.createAnswer() پاسخی برای توضیحات SDP راه دور ایجاد کنید.
  4. انتقال پاسخ (با استفاده از یک سرویس سیگنالینگ) به همتای راه دور.
  5. یک شنونده برای رویدادهای icecandidate در RTCPeerConnection ثبت کنید.
  6. برای هر رویداد icecandidate ، آن را (با استفاده از یک سرویس سیگنالینگ) به همتای راه دور منتقل کنید.
  7. منتظر نامزدهای ورودی راه دور ICE از سرویس سیگنالینگ باشید و آنها را با استفاده از RTCPeerConnection.addIceCandidate() اضافه کنید.

چالش این API این است که بیشتر این عملیات ها ناهمزمان هستند، که اغلب اجرای واقعی یک برنامه WebRTC را پیچیده می کند. بسیاری از توابع یک Promise را برمی‌گردانند که قبل از ادامه مرحله بعدی فرآیند باید حل شود.

توصیه می شود که هنگام پیاده سازی یک برنامه با استفاده از این API، توسعه دهنده از async استفاده کند و به جای ثبت شنوندگان await (با استفاده از Promise.then() )، زیرا این کار باعث می شود کد شما را آسان تر دنبال کنید. به مثال زیر توجه کنید:

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

RTCPeerConnection رابط مرکزی در WebRTC API است. این نشان دهنده ارتباط بین همتای محلی و راه دور است و همه عملکردها و رویدادهای لازم برای برقراری ارتباط را ارائه می دهد.

ایجاد ارتباط همتا

برنامه‌هایی که عملکرد WebRTC را پیاده‌سازی می‌کنند معمولاً به شدت به رابط RTCPeerConnection متکی هستند. از طرف تماس گیرندگان (یعنی همتا که اتصال را آغاز می کند)، فرآیند برقراری ارتباط معمولاً به شرح زیر است:

  1. یک نمونه RTCPeerConnection جدید با پیکربندی ICE مناسب ایجاد کنید.
  2. با استفاده از RTCPeerConnection.createOffer() یک توضیحات SDP محلی ایجاد کنید.
  3. شرح SDP محلی را با استفاده از RTCPeerConnection.setLocalDescription() تنظیم کنید.
  4. توضیحات SDP محلی را (با استفاده از یک سرویس سیگنالینگ) به همتای راه دور منتقل کنید.
  5. یک شنونده برای رویدادهای icecandidate در RTCPeerConnection ثبت کنید.
  6. برای هر رویداد icecandidate ، آن را (با استفاده از یک سرویس سیگنالینگ) به همتای راه دور منتقل کنید.
  7. منتظر یک توضیحات SDP راه دور ورودی از سرویس سیگنالینگ باشید و آن را با استفاده از RTCPeerConnection.setRemoteDescription() تنظیم کنید.
  8. منتظر نامزدهای ورودی راه دور ICE از سرویس سیگنالینگ باشید و آنها را با استفاده از RTCPeerConnection.addIceCandidate() اضافه کنید.

در سمت تماس گیرنده، روند کمی متفاوت است.

  1. یک نمونه RTCPeerConnection جدید با پیکربندی ICE مناسب ایجاد کنید.
  2. منتظر یک توضیحات SDP راه دور ورودی از سرویس سیگنالینگ باشید و آن را با استفاده از RTCPeerConnection.setRemoteDescription() تنظیم کنید.
  3. با فراخوانی RTCPeerConnection.createAnswer() پاسخی برای توضیحات SDP راه دور ایجاد کنید.
  4. انتقال پاسخ (با استفاده از یک سرویس سیگنالینگ) به همتای راه دور.
  5. یک شنونده برای رویدادهای icecandidate در RTCPeerConnection ثبت کنید.
  6. برای هر رویداد icecandidate ، آن را (با استفاده از یک سرویس سیگنالینگ) به همتای راه دور منتقل کنید.
  7. منتظر نامزدهای ورودی راه دور ICE از سرویس سیگنالینگ باشید و آنها را با استفاده از RTCPeerConnection.addIceCandidate() اضافه کنید.

چالش این API این است که بیشتر این عملیات ها ناهمزمان هستند، که اغلب اجرای واقعی یک برنامه WebRTC را پیچیده می کند. بسیاری از توابع یک Promise را برمی‌گردانند که قبل از ادامه مرحله بعدی فرآیند باید حل شود.

توصیه می شود که هنگام پیاده سازی یک برنامه با استفاده از این API، توسعه دهنده از async استفاده کند و به جای ثبت شنوندگان await (با استفاده از Promise.then() )، زیرا این کار باعث می شود کد شما را آسان تر دنبال کنید. به مثال زیر توجه کنید:

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