RTCPeerConnection
, WebRTC API'nin merkezi arayüzüdür. Yerel ve uzak eş arasındaki bağlantıyı temsil eder ve bağlantıyı kurmak için gereken tüm işlevleri ve etkinlikleri sağlar.
Eşler arası bağlantı oluşturma
WebRTC işlevselliğini uygulayan uygulamalar, genellikle RTCPeerConnection
arayüzünü kullanır. Arayanlar tarafında (yani bağlantı başlatan eş), genellikle bağlantı kurma işlemi aşağıdaki şekilde olur:
- Uygun ICE yapılandırmasıyla yeni bir
RTCPeerConnection
örneği oluşturun. RTCPeerConnection.createOffer()
kullanarak yerel bir SDP açıklaması oluşturun.- Yerel SDP açıklamasını
RTCPeerConnection.setLocalDescription()
kullanarak ayarlayın. - Yerel SDP açıklamasını uzaktan eşe aktar (sinyal hizmeti kullanarak).
RTCPeerConnection
üzerindeicecandidate
etkinlikleri için bir işleyici kaydedin.- Her
icecandidate
etkinliği için (bir sinyal hizmeti kullanarak) uzak eşlemeye aktarın. - Sinyal hizmetinden gelen bir uzak SDP açıklaması bekleyin ve
RTCPeerConnection.setRemoteDescription()
kullanarak ayarlayın. - Sinyal hizmetinden gelen uzak ICE adaylarını bekleyin ve bunları
RTCPeerConnection.addIceCandidate()
kullanarak ekleyin
Misafir tarafında ise süreç biraz farklıdır.
- Uygun ICE yapılandırmasıyla yeni bir
RTCPeerConnection
örneği oluşturun. - Sinyal hizmetinden gelen bir uzak SDP açıklaması bekleyin ve
RTCPeerConnection.setRemoteDescription()
kullanarak ayarlayın. RTCPeerConnection.createAnswer()
numaralı telefonu arayarak uzak SDP açıklaması için yanıt oluşturun.- Sinyal hizmetini kullanarak yanıtı uzaktaki eşe aktarın.
RTCPeerConnection
üzerindeicecandidate
etkinlikleri için bir işleyici kaydedin.- Her
icecandidate
etkinliği için (bir sinyal hizmeti kullanarak) uzak eşlemeye aktarın. - Sinyal hizmetinden gelen uzak ICE adaylarını bekleyin ve bunları
RTCPeerConnection.addIceCandidate()
kullanarak ekleyin
Bu API'nin zorluğu, bu işlemlerin çoğunun eşzamansız olmasıdır. Bu da genellikle bir WebRTC uygulamasının gerçek uygulanmasını karmaşık bir hale getirir.
İşlevlerin çoğu, işlemde bir sonraki adımın devam edebilmesi için çözülmesi gereken bir Promise
döndürür.
Bu API'yi kullanarak bir uygulama uygularken geliştiricinin, kodlayıcının takibini kolaylaştıracağından, dinleyicileri kaydetmek yerine (Promise.then()
kullanarak) async
ve await
'ı kullanması önerilir. Aşağıdaki örneği inceleyelim:
function createAndSendOffer(peerConnection, signallingService) {
peerConnection.createOffer()
.then(offer => {
signallingService.send({
type: 'offer',
data: offer
});
});
}
async
ve await
kodlarını kullanarak yukarıdaki kodu yazarken aşağıdakileri alırız:
async function createAndSendOffer(peerConnection, signallingService) {
const offer = await peerConnection.createOffer();
signallingService.send({
type: 'offer',
data: offer
});
}