Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

اتصالات الأقران

RTCPeerConnection هي الواجهة المركزية في WebRTC API. وهي تمثل الاتصال بين النظير المحلي والبعيد ، وتوفر جميع الوظائف والأحداث اللازمة لإنشاء الاتصال.

إنشاء اتصال نظير

عادةً ما تعتمد التطبيقات التي تنفذ وظائف WebRTC بشكل كبير على واجهة RTCPeerConnection . من جانب المتصلين (أي أن يقوم النظير ببدء الاتصال) ، تكون عملية تأسيس الاتصال هي التالية:

  1. قم RTCPeerConnection مثيل RTCPeerConnection جديد مع تكوين ICE المناسب.
  2. قم بإنشاء وصف SDP محلي باستخدام RTCPeerConnection.createOffer() .
  3. قم بتعيين وصف SDP المحلي باستخدام RTCPeerConnection.setLocalDescription() .
  4. انقل (باستخدام خدمة الإشارات) وصف SDP المحلي إلى النظير البعيد.
  5. تسجيل مستمع لأحداث icecandidate على RTCPeerConnection .
  6. لكل حدث icecandidate ، icecandidate (باستخدام خدمة إرسال الإشارات) إلى النظير البعيد.
  7. انتظر وصف SDP بعيد وارد من خدمة الإشارة وقم بتعيينه باستخدام RTCPeerConnection.setRemoteDescription() .
  8. انتظر وصول مرشحي ICE البعيدين من خدمة الإشارات RTCPeerConnection.addIceCandidate() باستخدام RTCPeerConnection.addIceCandidate()

على الجانب الهادئ ، تكون العملية مختلفة قليلاً.

  1. قم RTCPeerConnection مثيل RTCPeerConnection جديد مع تكوين ICE المناسب.
  2. انتظر وصف SDP بعيد وارد من خدمة الإشارة وقم بتعيينه باستخدام RTCPeerConnection.setRemoteDescription() .
  3. قم بإنشاء إجابة لوصف SDP عن طريق استدعاء RTCPeerConnection.createAnswer() .
  4. انقل (باستخدام خدمة إرسال الإشارات) الإجابة إلى النظير البعيد.
  5. تسجيل مستمع لأحداث icecandidate على RTCPeerConnection .
  6. لكل حدث icecandidate ، icecandidate (باستخدام خدمة إرسال الإشارات) إلى النظير البعيد.
  7. انتظر وصول مرشحي ICE البعيدين من خدمة الإشارات RTCPeerConnection.addIceCandidate() باستخدام RTCPeerConnection.addIceCandidate()

يكمن التحدي مع واجهة برمجة التطبيقات هذه في أن معظم هذه العمليات غير متزامنة ، مما يجعل التنفيذ الفعلي لتطبيق WebRTC أمرًا معقدًا. ترجع العديد من الوظائف Promise يجب حله قبل أن تستمر الخطوة التالية في العملية.

من المستحسن أنه عند تنفيذ تطبيق باستخدام واجهة برمجة التطبيقات هذه ، يستخدم المطور 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
    });
}