RTCPeerConnection
هي الواجهة المركزية في WebRTC API. أُنشأها جون هنتر، الذي كان متخصصًا
الاتصال بين الزملاء المحليين والبعيدين، ويوفر جميع
والدالة والأحداث الضرورية لإنشاء الاتصال.
إنشاء اتصال أقران
عادةً ما تعتمد التطبيقات التي تنفّذ وظيفة WebRTC بشكل كبير على
واجهة RTCPeerConnection
. من جانب المتصل (أي النظير
بدء اتصال)، وعادة ما تكون عملية إنشاء اتصال
التالي:
- إنشاء مثيل
RTCPeerConnection
جديد باستخدام ICE المناسب التكوين. - يمكنك إنشاء وصف محلي عبر بروتوكول SDP باستخدام
RTCPeerConnection.createOffer()
. - ضبط وصف SDP المحلي باستخدام
RTCPeerConnection.setLocalDescription()
- نقل (باستخدام خدمة إرسال) وصف SDP المحلي إلى جهاز التحكّم عن بُعد زميل.
- تسجيل أداة معالجة أحداث
icecandidate
علىRTCPeerConnection
- بالنسبة إلى كل حدث
icecandidate
، انقله (باستخدام خدمة إرسال إشارة) إلى النظير البعيد. - انتظار وصف وارد من بروتوكول SDP عن بُعد من خدمة الإشارة
اضبطها باستخدام
RTCPeerConnection.setRemoteDescription()
. - يُرجى انتظار وصول العناصر المحفّزة لعرض الإعلان عن بُعد في ICE من خدمة الإشارة وإضافتها
باستخدام "
RTCPeerConnection.addIceCandidate()
"
وبالنسبة إلى جهة الاتصال، تختلف العملية قليلاً.
- إنشاء مثيل
RTCPeerConnection
جديد باستخدام ICE المناسب التكوين. - انتظار وصف وارد من بروتوكول SDP عن بُعد من خدمة الإشارة
اضبطها باستخدام
RTCPeerConnection.setRemoteDescription()
. - يمكنك إنشاء إجابة لوصف بروتوكول SDP عن بُعد من خلال الاتصال
RTCPeerConnection.createAnswer()
- انقل الإجابة (باستخدام خدمة الإشارة) إلى الأقران البعيدين.
- تسجيل أداة معالجة أحداث
icecandidate
علىRTCPeerConnection
- بالنسبة إلى كل حدث
icecandidate
، انقله (باستخدام خدمة إرسال إشارة) إلى النظير البعيد. - يُرجى انتظار وصول العناصر المحفّزة لعرض الإعلان عن بُعد في ICE من خدمة الإشارة وإضافتها
باستخدام "
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
});
}