RTCPeerConnection
, WebRTC API'deki merkezi arayüzdür. Yerel ve uzak eşler arasındaki bağlantıyı temsil eder ve bağlantı kurmak için gereken tüm işlevleri ve etkinlikleri sağlar.
Eş bağlantısı oluşturma
WebRTC işlevini uygulayan uygulamalar genellikle RTCPeerConnection
arayüzüne büyük ölçüde dayanır. Arayan tarafında (yani bağlantı başlatan eş), bağlantı kurma işlemi genellikle aşağıdaki gibidir:
- Uygun ICE yapılandırmasıyla yeni bir
RTCPeerConnection
örneği oluşturun. RTCPeerConnection.createOffer()
kullanarak yerel bir SDP açıklaması oluşturun.RTCPeerConnection.setLocalDescription()
kullanarak yerel SDP açıklamasını ayarlayın.- Yerel SDP açıklamasını uzak eşe aktarın (bir sinyalleşme hizmeti kullanarak).
RTCPeerConnection
'daicecandidate
etkinlikleri için bir dinleyici kaydedin.- Her
icecandidate
etkinliğini (bir sinyal hizmeti kullanarak) uzak eşe aktarın. - İşaretleme hizmetinden gelen uzak SDP açıklamasını bekleyin ve
RTCPeerConnection.setRemoteDescription()
kullanarak ayarlayın. - İşaretleme hizmetinden gelen uzak ICE adaylarını bekleyin ve
RTCPeerConnection.addIceCandidate()
Çağırılan taraf için süreç biraz farklıdır.
- Uygun ICE yapılandırmasıyla yeni bir
RTCPeerConnection
örneği oluşturun. - İşaretleme hizmetinden gelen uzak SDP açıklamasını bekleyin ve
RTCPeerConnection.setRemoteDescription()
kullanarak ayarlayın. RTCPeerConnection.createAnswer()
'ü arayarak uzak SDP açıklaması için bir yanıt oluşturun.- Yanıtı uzak eşe aktarın (bir sinyal hizmeti kullanarak).
RTCPeerConnection
'daicecandidate
etkinlikleri için bir dinleyici kaydedin.- Her
icecandidate
etkinliğini (bir sinyalleme hizmeti kullanarak) uzak eşe aktarın. - İşaretleme hizmetinden gelen uzak ICE adaylarını bekleyin ve
RTCPeerConnection.addIceCandidate()
Bu API'nin zorluğu, bu işlemlerin çoğunun asenkron olmasıdır. Bu da genellikle bir WebRTC uygulamasının gerçek uygulamasını karmaşık hale getirir.
İşlevlerin çoğu, işlemdeki sonraki adıma devam edilebilmesi için çözülmesi gereken bir Promise
döndürür.
Bu API'yi kullanan bir uygulamayı uygularken geliştiricinin dinleyicileri kaydetmek (Promise.then()
kullanarak) yerine async
ve await
kullanması önerilir. Bu, kodunuzun daha kolay anlaşılmasını sağlar. Aşağıdaki örneği inceleyin:
function createAndSendOffer(peerConnection, signallingService) {
peerConnection.createOffer()
.then(offer => {
signallingService.send({
type: 'offer',
data: offer
});
});
}
Yukarıdaki kodu async
ve await
kullanarak yazarsak aşağıdaki sonucu elde ederiz:
async function createAndSendOffer(peerConnection, signallingService) {
const offer = await peerConnection.createOffer();
signallingService.send({
type: 'offer',
data: offer
});
}