گوگل به پیشبرد تساوی نژادی برای جوامع سیاه متعهد است. ببینید چگونه.
این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

آغاز به کار با قابلیت اتصال به همکار

اتصالات همتا بخشی از مشخصات WebRTC به اطلاعاتی که با اتصال دو برنامه های کاربردی بر روی کامپیوترهای مختلف برای برقراری ارتباط با استفاده از یک پروتکل peer-to نظیر است. ارتباط بین همسالان می تواند ویدئو، داده های باینری صوتی و یا دلخواه (برای مشتریان حمایت از RTCDataChannel API). به منظور کشف چگونگی دو همسالان می توانید اتصال، هر دو به مشتریان نیاز به ارائه یک پیکربندی ICE سرور. این هم یک بی حس کردن و یا به نوبه خود سرور است، و نقش آنها است که به ارائه نامزد ICE به هر مشتری است که پس از آن به همکار از راه دور منتقل شده است. این انتقال از نامزدها ICE است که معمولا به نام سیگنالینگ.

سیگنالینگ

مشخصات WebRTC به شامل API برای ارتباط با یک (اینترنت ایجاد اتصال) سرور ICE، اما جزء سیگنالینگ است بخشی از آن نیست. سیگنالینگ برای دو همسالان به سهم در مورد نیاز است که چگونه باید ارتباط برقرار کنند. معمولا این است که از طریق مبتنی بر HTTP API وب به طور منظم حل (به عنوان مثال، یک سرویس 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 و یا با استفاده از بی حس کردن و یا یک سرور تبدیل شود. بی حس کردن مخفف جلسه پیمایش افزار برای NAT، و معمولا به طور غیر مستقیم در اکثر برنامه های کاربردی از WebRTC استفاده می شود.

به نوبه خود (پیمایش با استفاده از رله NAT) راه حل های پیشرفته تر که شامل پروتکل های بی حس کردن و بسیاری از خدمات مبتنی بر WebRTC تجاری استفاده از یک سرور به نوبه خود برای برقراری ارتباط بین همسالان است. به WebRTC API هر دو بی حس کردن پشتیبانی می کند و به نوبه خود به طور مستقیم، و آن را تحت اصطلاح کامل تر اینترنت ایجاد اتصال به جمع شده بودند. هنگام ایجاد یک اتصال از 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