Google Siyah toplulukları için ırksal eşitlik ilerleyen kararlıdır. Nasıl olduğunu gör.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

eş bağlantıları başlarken

Akran bağlantıları farklı bilgisayarlarda iki uygulamalarını bağlayan ile fırsatlar bir peer-to-peer protokolü kullanarak iletişim kurmak için bu WebRTC şartnamelerin bir parçasıdır. Yaşıtları arasındaki iletişim (destekleyici müşterileri için video, ses veya keyfi ikili veri olabilir RTCDataChannel API). İki eş bağlayabilirsiniz nasıl keşfetmek için, hem istemcilerin bir ICE Server yapılandırmasını sağlamak gerekir. Bu STUN veya TURN-sunucu ya ve rolleri daha sonra uzak eşe aktarılır her müşteri için ICE adayları sağlamaktır. BUZ adaylarının transfer Bu genellikle sinyalizasyon denir.

Sinyal

WebRTC spesifikasyon, bir ICE (Internet bağlantısı oluşturulması) sunucusu ile iletişim API'leri içerir, ancak sinyal bileşeni bunun bir parçası değildir. onlar bağlamak nasıl Sinyalizasyon paylaşımına iki yaşıtları için sırayla gereklidir. Genellikle bu normal bir HTTP tabanlı web API yoluyla çözülür (yani REST hizmeti veya diğer RPC mekanizması) web uygulamaları akran bağlanmadan önce gerekli bilgileri geçirebilir başlatılır.

Takip kodu, bu kurmaca sinyalizasyon hizmeti göndermek için kullanılan ve uyumsuz mesaj almak nasıl gösterir pasajı. Bu gerekli yerlerde bu kılavuzda kalan örneklerde kullanılan olacaktır.

 // 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!');
 

Sinyal çok farklı şekillerde uygulanabilir ve WebRTC şartname herhangi bir spesifik çözümü tercih etmez.

akran bağlantılarını başlatılıyor

Her akran bağlantısı ile ele alınır RTCPeerConnection nesne. Bu sınıf için yapıcı tek alır RTCConfiguration parametresi olarak nesne. Bu nesne akran bağlantı kurulur ve kullanıma ICE sunucuları hakkında bilgi içermelidir nasıl tanımlar.

Bir kez RTCPeerConnection oluşturulur biz eş arayarak veya eş alıyorsanız bağlı SDP teklifi veya cevap oluşturmanız gerekir. SDP teklif veya cevap oluşturulduktan sonra, o başka bir kanal aracılığıyla uzak eşe gönderilmesi gerekir. SDP geçen sinyal denir uzak eş nesneleri ve WebRTC şartname kapsamında değildir.

Çağıran taraftan akran bağlantı kurulumunu başlatmak için, biz oluşturmak RTCPeerConnection nesnesi ve daha sonra çağrı createOffer() bir oluşturmak için RTCSessionDescription nesnesi. Bu oturum tanımı kullanarak yerel bilgi olarak ayarlanır setLocalDescription() ve daha sonra, alıcı taraf için sinyalleme kanalı üzerinden gönderilir. Biz de bizim sunulan oturumu açıklamasına bir cevap alıcı tarafından alındığında bizim sinyal kanalına bir dinleyici ayarlayabilirsiniz.

 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});
}
 

Bizim oluşturmadan önce alıcı tarafta, biz bir gelen teklif için beklemek RTCPeerConnection örneği. Tamamlandığında kullandığımız alınan teklif set setRemoteDescription() . Sonra, çağrı createAnswer() alınan teklife bir cevap oluşturmak için. Bu cevap kullanarak yerel açıklaması olarak ayarlanmıştır setLocalDescription() bizim sinyalizasyon sunucusu üzerinden çağıran tarafına gönderilir ve daha sonra.

 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});
    }
});
 

İki eş, yerel ve uzak oturum açıklamaları hem ayarladıktan sonra onlar uzak eş yeteneklerini biliyoruz. Bu yaşıtları arasındaki bağlantı hazır olduğu anlamına gelmez. Bu işlemin gerçekleşmesi için biz diğer eşe (sinyal kanal üzerinden) her eş ve transfer de ICE adayları toplamak gerekir.

BUZ adayları

İki eş WebRTC'yi kullanarak communitcate için önce bunları değiş bağlantı bilgilerine gerek. ağ koşulları bir dizi faktöre üzerinde dependning değişebilir olduğundan, harici hizmet genellikle eş bağlanmak için olası adaylar keşfetmek için kullanılır. Bu hizmet ICE denir ve bir STUN veya TURN sunucusunu ya kullanıyor. STUN NAT için Oturum Geçişi Utilities anlamına gelir ve genellikle en WebRTC uygulamalarında dolaylı kullanılır.

DÖNÜŞ (Geçiş Röle NAT Kullanarak) STUN protokolleri ve en ticari WebRTC tabanlı hizmetler yaşıtları arasındaki bağlantıları kurmak için bir TURN sunucusunu kullanmak birleştirir daha gelişmiş bir çözümdür. WebRTC API hem STUN destekler ve doğrudan TESLİM ve daha eksiksiz vadede İnternet Bağlantı kurulması altında toplanır. Bir WebRTC bağlantısı oluştururken, genellikle için konfigürasyonda bir veya birkaç ICE sunucusu sağlar RTCPeerConnection nesne.

Damla BUZ

Bir kez RTCPeerConnection nesne oluşturulduğunda, altta yatan çerçeve bağlantı kurulması (ICE adayları) için aday toplamak için sağlanan ICE sunucularını kullanır. Olay icegatheringstatechange üzerinde RTCPeerConnection BUZ toplama aracı olduğunu ifade ne sinyalleri ( new , gathering veya complete ).

Bir akran BUZ toplama işlemi tamamlanana kadar bekleyin mümkün olmakla birlikte, bir "damlama buz" tekniğini kullanmak ve onu keşfetti alır gibi uzak eşe her ICE adayı iletmek için genellikle çok daha verimlidir. Bu anlamlı akran bağlantı için kurulum süresini azaltmak ve görüntülü görüşme daha az gecikme ile başlamak sağlayacaktır.

BUZ adayları toplamak için, sadece bir dinleyici ekleyin icecandidate olay. RTCPeerConnectionIceEvent içerecek dinleyici üzerinde yayılan candidate uzak peer (Bkz Sinyalizasyon) gönderilmesi gerekmektedir yeni bir aday temsil özelliği.

 // 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);
        }
    }
});
 

Bağlantı kuruldu

BUZ adaylar alınıyor sonra, bizim akran bağlantısı için devlet nihayetinde bağlı duruma değişecektir beklemelidir. Bu algılamak için, bizim için bir dinleyici ekleyin RTCPeerConnection biz dinlemek connectionstatechange olaylar.

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

RTCPeerConnection API dokümanları