RTCPeerConnection
هي الواجهة المركزية في واجهة برمجة تطبيقات WebRTC. وهو يمثّل العلاقة بين النظراء المحليّين والبعيدين، ويوفّر جميع الوظائف والأحداث اللازمة لإنشاء الاتصال.
إنشاء اتصال بين الزملاء
تعتمد التطبيقات التي تنفّذ وظائف 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
});
}