RTCPeerConnection
adalah antarmuka pusat di WebRTC API. Ini
merepresentasikan koneksi antara peer lokal dan jarak jauh, dan menyediakan semua
fungsi dan peristiwa yang diperlukan
untuk menyambung koneksi.
Membuat koneksi peer
Aplikasi yang menerapkan fungsi WebRTC biasanya akan sangat bergantung pada
Antarmuka RTCPeerConnection
. Dari sisi pemanggil (yaitu, peer
memulai koneksi), proses untuk
menyambung koneksi biasanya merupakan
berikut ini:
- Membuat instance
RTCPeerConnection
baru dengan ICE yang sesuai konfigurasi Anda. - Buat deskripsi SDP lokal menggunakan
RTCPeerConnection.createOffer()
. - Setel deskripsi SDP lokal menggunakan
RTCPeerConnection.setLocalDescription()
. - Transfer (menggunakan layanan sinyal) deskripsi SDP lokal ke remote rekan sejawat.
- Daftarkan pemroses untuk peristiwa
icecandidate
diRTCPeerConnection
. - Untuk setiap peristiwa
icecandidate
, transfer peristiwa tersebut (menggunakan layanan pemberian sinyal) ke rekan jarak jauh. - Tunggu deskripsi SDP jarak jauh yang masuk dari layanan pensinyalan dan
menyetelnya menggunakan
RTCPeerConnection.setRemoteDescription()
. - Menunggu kandidat ICE jarak jauh yang masuk dari layanan pemberi sinyal, lalu tambahkan
mereka menggunakan
RTCPeerConnection.addIceCandidate()
Di sisi tujuan panggilan, prosesnya sedikit berbeda.
- Membuat instance
RTCPeerConnection
baru dengan ICE yang sesuai konfigurasi Anda. - Tunggu deskripsi SDP jarak jauh yang masuk dari layanan pensinyalan dan
menyetelnya menggunakan
RTCPeerConnection.setRemoteDescription()
. - Buat jawaban untuk deskripsi SDP jarak jauh dengan memanggil
RTCPeerConnection.createAnswer()
. - Transfer (menggunakan layanan pemberian sinyal) jawaban ke peer jarak jauh.
- Daftarkan pemroses untuk peristiwa
icecandidate
diRTCPeerConnection
. - Untuk setiap peristiwa
icecandidate
, transfer peristiwa tersebut (menggunakan layanan pemberian sinyal) ke rekan jarak jauh. - Menunggu kandidat ICE jarak jauh yang masuk dari layanan pemberi sinyal, lalu tambahkan
mereka menggunakan
RTCPeerConnection.addIceCandidate()
Tantangan dalam API ini adalah sebagian besar operasinya asinkron,
yang sering kali mempersulit implementasi
aplikasi WebRTC.
Banyak fungsi menampilkan Promise
yang harus di-resolve sebelum
langkah selanjutnya dalam proses ini.
Disarankan bahwa ketika mengimplementasikan aplikasi menggunakan API ini,
developer menggunakan async
dan await
, bukan mendaftarkan pemroses
(menggunakan Promise.then()
), karena ini membuat kode Anda lebih mudah diikuti. Pertimbangkan
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
});
}