Koneksi pembanding

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:

  1. Membuat instance RTCPeerConnection baru dengan ICE yang sesuai konfigurasi Anda.
  2. Buat deskripsi SDP lokal menggunakan RTCPeerConnection.createOffer().
  3. Setel deskripsi SDP lokal menggunakan RTCPeerConnection.setLocalDescription().
  4. Transfer (menggunakan layanan sinyal) deskripsi SDP lokal ke remote rekan sejawat.
  5. Daftarkan pemroses untuk peristiwa icecandidate di RTCPeerConnection.
  6. Untuk setiap peristiwa icecandidate, transfer peristiwa tersebut (menggunakan layanan pemberian sinyal) ke rekan jarak jauh.
  7. Tunggu deskripsi SDP jarak jauh yang masuk dari layanan pensinyalan dan menyetelnya menggunakan RTCPeerConnection.setRemoteDescription().
  8. Menunggu kandidat ICE jarak jauh yang masuk dari layanan pemberi sinyal, lalu tambahkan mereka menggunakan RTCPeerConnection.addIceCandidate()

Di sisi tujuan panggilan, prosesnya sedikit berbeda.

  1. Membuat instance RTCPeerConnection baru dengan ICE yang sesuai konfigurasi Anda.
  2. Tunggu deskripsi SDP jarak jauh yang masuk dari layanan pensinyalan dan menyetelnya menggunakan RTCPeerConnection.setRemoteDescription().
  3. Buat jawaban untuk deskripsi SDP jarak jauh dengan memanggil RTCPeerConnection.createAnswer().
  4. Transfer (menggunakan layanan pemberian sinyal) jawaban ke peer jarak jauh.
  5. Daftarkan pemroses untuk peristiwa icecandidate di RTCPeerConnection.
  6. Untuk setiap peristiwa icecandidate, transfer peristiwa tersebut (menggunakan layanan pemberian sinyal) ke rekan jarak jauh.
  7. 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
    });
}