RTCPeerConnection
adalah antarmuka pusat di WebRTC API. Ini
mewakili koneksi antara peer lokal dan jarak jauh, serta menyediakan semua
fungsi dan peristiwa yang diperlukan untuk membuat koneksi.
Membuat koneksi peer
Aplikasi yang menerapkan fungsi WebRTC biasanya akan sangat bergantung pada
antarmuka RTCPeerConnection
. Dari sisi pemanggil (yaitu, peer
yang memulai koneksi), proses untuk membuat koneksi biasanya
berikut:
- Buat instance
RTCPeerConnection
baru dengan konfigurasi ICE yang sesuai. - Buat deskripsi SDP lokal menggunakan
RTCPeerConnection.createOffer()
. - Tetapkan deskripsi SDP lokal menggunakan
RTCPeerConnection.setLocalDescription()
. - Mentransfer (menggunakan layanan sinyal) deskripsi SDP lokal ke peer jarak jauh.
- Daftarkan pemroses untuk peristiwa
icecandidate
diRTCPeerConnection
. - Untuk setiap peristiwa
icecandidate
, transfer (menggunakan layanan sinyal) ke peer jarak jauh. - Tunggu deskripsi SDP jarak jauh yang masuk dari layanan sinyal dan
tetapkan menggunakan
RTCPeerConnection.setRemoteDescription()
. - Tunggu kandidat ICE jarak jauh yang masuk dari layanan sinyal dan tambahkan
kandidat tersebut menggunakan
RTCPeerConnection.addIceCandidate()
Di sisi pemanggil, prosesnya sedikit berbeda.
- Buat instance
RTCPeerConnection
baru dengan konfigurasi ICE yang sesuai. - Tunggu deskripsi SDP jarak jauh yang masuk dari layanan sinyal dan
tetapkan menggunakan
RTCPeerConnection.setRemoteDescription()
. - Buat jawaban untuk deskripsi SDP jarak jauh dengan memanggil
RTCPeerConnection.createAnswer()
. - Transfer (menggunakan layanan sinyal) jawaban ke peer jarak jauh.
- Daftarkan pemroses untuk peristiwa
icecandidate
diRTCPeerConnection
. - Untuk setiap peristiwa
icecandidate
, transfer (menggunakan layanan sinyal) ke peer jarak jauh. - Tunggu kandidat ICE jarak jauh yang masuk dari layanan sinyal dan tambahkan
kandidat tersebut menggunakan
RTCPeerConnection.addIceCandidate()
Tantangan dengan API ini adalah sebagian besar operasi ini bersifat asinkron,
yang sering kali membuat implementasi sebenarnya dari aplikasi WebRTC menjadi rumit.
Banyak fungsi yang menampilkan Promise
yang harus diselesaikan sebelum
langkah berikutnya dalam proses dapat dilanjutkan.
Sebaiknya saat menerapkan aplikasi menggunakan API ini,
developer menggunakan async
dan await
, bukan mendaftarkan pemroses
(menggunakan Promise.then()
), karena hal ini membuat kode Anda lebih mudah diikuti. Perhatikan
contoh berikut:
function createAndSendOffer(peerConnection, signallingService) {
peerConnection.createOffer()
.then(offer => {
signallingService.send({
type: 'offer',
data: offer
});
});
}
Saat menulis kode di atas menggunakan async
dan await
, kita mendapatkan hal berikut:
async function createAndSendOffer(peerConnection, signallingService) {
const offer = await peerConnection.createOffer();
signallingService.send({
type: 'offer',
data: offer
});
}