وتلتزم جوجل لدفع الأسهم العنصري للمجتمعات الأسود. أنظر كيف.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

بدء العمل مع وصلات الأقران

اتصالات الأقران هي جزء من مواصفات يتطلب WebRTC التي تتعامل مع ربط اثنين من التطبيقات على أجهزة كمبيوتر مختلفة للاتصال باستخدام بروتوكول الند للند. التواصل بين الأقران يمكن أن يكون الفيديو والبيانات ثنائي الصوت أو التعسفي (لعملاء دعم RTCDataChannel API). من أجل اكتشاف كيف أن اثنين من أقرانه يمكن الاتصال، يحتاج العملاء على حد سواء لتوفير التكوين ICE خادم. هذا هو إما STUN أو خادم TURN، ودورها هو تقديم المرشحين ICE لكل عميل التي يتم بعد ذلك نقلها إلى النظير البعيد. هذا نقل من المرشحين ICE يسمى عادة إشارات.

إرسال الإشارات

وتشمل مواصفات يتطلب WebRTC واجهات برمجة التطبيقات للتواصل مع ICE (مؤسسة توصيل الانترنت) Server ولكن العنصر إشارات ليست جزءا منه. وهناك حاجة في اشارة الى النظام لمدة أقرانهم سهم كيفية الاتصال بها. عادة هذا يتم حلها من خلال API ويب يستند إلى HTTP العادي (أي خدمة REST أو غيرها من آليات RPC) يبدأ حيث يمكن لتطبيقات الويب تتابع المعلومات اللازمة قبل اتصال نظير.

رمز متابعة المقتطف ويبين كيف يمكن استخدام هذه الخدمة إشارات fictious لإرسال واستقبال الرسائل بشكل غير متزامن. وسوف يكون هذا المستخدمة في الأمثلة المتبقية في هذا الدليل عند الضرورة.

 // Set up an asynchronous communication channel that will be
// used during the peer connection setup
const signalingChannel = new SignalingChannel(remoteClientId);
signalingChannel.addEventListener('message', message => {
    // New message from remote client received
});

// Send an asynchronous message to the remote client
signalingChannel.send('Hello!');
 

يشير يمكن تنفيذها في العديد من الطرق المختلفة، ومواصفات يتطلب WebRTC لا تفضل أي حل محددة.

بدء اتصالات النظير

يتم التعامل مع كل اتصال نظير من قبل RTCPeerConnection الكائن. المنشئ لهذه الفئة يأخذ واحد RTCConfiguration الكائن كمعلمة به. ويعرف هذا الكائن كيف يتم تعيين اتصال نظير، وينبغي أن تحتوي على معلومات عن خوادم ICE الاستخدام.

وبمجرد أن RTCPeerConnection يتم إنشاء نحن بحاجة إلى إنشاء عرضا SDP أو الجواب، وهذا يتوقف على ما إذا كنا على دعوة الأقران أو تلقي الأقران. بمجرد إنشاء عرض SDP أو الإجابة، يجب أن يتم إرسالها إلى النظير البعيد من خلال قناة مختلفة. يمر SDP تعترض على ما يسمى يشير أقرانهم النائية وغير مشمول مواصفات يتطلب WebRTC.

لبدء الإعداد اتصال نظير من الجانب الدعوة، ونحن إنشاء RTCPeerConnection الكائن ومن ثم استدعاء createOffer() لإنشاء RTCSessionDescription الكائن. يقع هذا وصف الدورة بصفة وصف المحلي باستخدام setLocalDescription() ومن ثم يتم إرسالها عبر قناة إشارة للجانب المتلقي. نحن ايضا انشاء مستمعا إلى قناة إشارات لدينا عند تلقي جوابا لدينا وصف جلسة عرضت من جانب المتلقي.

 async function makeCall() {
    const configuration = {'iceServers': [{'urls': 'stun:stun.l.google.com:19302'}]}
    const peerConnection = new RTCPeerConnection(configuration);
    signalingChannel.addEventListener('message', async message => {
        if (message.answer) {
            const remoteDesc = new RTCSessionDescription(message.answer);
            await peerConnection.setRemoteDescription(remoteDesc);
        }
    });
    const offer = await peerConnection.createOffer();
    await peerConnection.setLocalDescription(offer);
    signalingChannel.send({'offer': offer});
}
 

على الجانب تلقي، ونحن ننتظر للحصول على عرض واردة قبل نخلق لدينا RTCPeerConnection المثال. ومتى تم ذلك وضعنا هذا العرض تلقيها باستخدام setRemoteDescription() . المقبل، ونحن ندعو createAnswer() لإنشاء جوابا على العرض حصل. يقع هذا الجواب كما وصف المحلي باستخدام setLocalDescription() ومن ثم إرسالها إلى الجانب الدعوة على الخادم إشارات لدينا.

 const peerConnection = new RTCPeerConnection(configuration);
signalingChannel.addEventListener('message', async message => {
    if (message.offer) {
        peerConnection.setRemoteDescription(new RTCSessionDescription(message.offer));
        const answer = await peerConnection.createAnswer();
        await peerConnection.setLocalDescription(answer);
        signalingChannel.send({'answer': answer});
    }
});
 

بمجرد تعيين أقرانهم اثنين من كل من أوصاف جلسة المحلية والبعيدة أنهم يعرفون قدرات النظير البعيد. هذا لا يعني أن الاتصال بين أقرانه جاهز. لهذا العمل نحن بحاجة لجمع المرشحين ICE في كل الزملاء ونقل (عبر قناة الإشارات) إلى النظير الآخر.

المرشحين ICE

قبل اثنين من أقرانه يمكن communitcate باستخدام بتقنية WebRTC، فإنها تحتاج إلى معلومات الاتصال الصرف. منذ شروط الشبكة يمكن أن تختلف dependning على عدد من العوامل، وعادة ما يستخدم خدمة خارجية لاكتشاف المرشحين المحتملين للاتصال أحد الزملاء. وتسمى هذه الخدمة ICE وباستخدام إما STUN أو ملقم TURN. STUN لتقف على الدورة الانتقالي المرافق لNAT، وعادة ما تستخدم بشكل غير مباشر في معظم التطبيقات بتقنية WebRTC.

TURN (عبور عن طريق ترحيل NAT) هو الحل الأكثر تقدما التي تتضمن البروتوكولات STUN ومعظم الخدمات القائمة يتطلب WebRTC التجارية تستخدم خادم TURN لإقامة اتصالات بين أقرانه. وAPI يتطلب WebRTC يدعم كلا من الصاعقة ونتوجه مباشرة، وجمعها تحت مصطلح أكثر اكتمالا مؤسسة توصيل الانترنت. عند إنشاء اتصال بتقنية WebRTC، ونحن عادة ما توفر واحد أو عدة خوادم ICE في تكوين ل RTCPeerConnection الكائن.

الوشل ICE

مرة واحدة في RTCPeerConnection يتم إنشاء الكائن، يستخدم الإطار الأساسي للخوادم ICE المقدمة للجمع المرشحين لإنشاء الاتصال (المرشحين ICE). الحدث icegatheringstatechange على RTCPeerConnection الإشارات في ما تنص جمع ICE هو ( new ، gathering أو complete ).

في حين أنه من الممكن لأحد الزملاء إلى الانتظار حتى تجمع ICE كاملة، فإنه عادة ما يكون أكثر كفاءة في استخدام "الوشل الجليد" تقنية ونقل كل مرشح ICE إلى النظير البعيد كما يحصل اكتشافه. وهذا سوف يقلل بشكل كبير من وقت الإعداد للاتصال الأقران والسماح مكالمة فيديو للبدء مع أقل تأخير.

لجمع المرشحين ICE، ببساطة إضافة مستمع ل icecandidate الحدث. و RTCPeerConnectionIceEvent المنبعثة على أن المستمع سوف تحتوي على candidate الممتلكات التي تمثل المرشح الجديد الذي يجب ان ترسل الى النظير البعيد (انظر الإشارة).

 // Listen for local ICE candidates on the local RTCPeerConnection
peerConnection.addEventListener('icecandidate', event => {
    if (event.candidate) {
        signalingChannel.send({'new-ice-candidate': event.candidate});
    }
});

// Listen for remote ICE candidates and add them to the local RTCPeerConnection
signalingChannel.addEventListener('message', async message => {
    if (message.iceCandidate) {
        try {
            await peerConnection.addIceCandidate(message.iceCandidate);
        } catch (e) {
            console.error('Error adding received ice candidate', e);
        }
    }
});
 

تأسيس اتصال

وبمجرد تلقي المرشحين ICE، ينبغي لنا أن نتوقع من الدولة للاتصال نظير لدينا تغيير في نهاية المطاف إلى حالة متصلة. للكشف عن هذا، ونضيف إلى مستمع لدينا RTCPeerConnection حيث نستمع ل connectionstatechange الأحداث.

 // Listen for connectionstatechange on the local RTCPeerConnection
peerConnection.addEventListener('connectionstatechange', event => {
    if (peerConnection.connectionState === 'connected') {
        // Peers connected!
    }
});
 

وثائق API RTCPeerConnection