Koneksi pembanding

RTCPeerConnection adalah antarmuka pusat di WebRTC API. Ini mewakili koneksi antara pembanding lokal dan jarak jauh, dan menyarankan semua fungsi dan peristiwa yang diperlukan untuk membuat koneksi.

Membuat koneksi pembanding

Aplikasi yang mengimplementasikan fungsi WebRTC biasanya akan sangat bergantung pada antarmuka RTCPeerConnection. Dari sisi pemanggil (yakni, pembanding yang memulai koneksi), proses untuk membuat koneksi biasanya sebagai berikut:

  1. Buat instance RTCPeerConnection baru dengan konfigurasi ICE yang sesuai.
  2. Buat deskripsi SDP lokal menggunakan RTCPeerConnection.createOffer().
  3. Tetapkan deskripsi SDP lokal menggunakan RTCPeerConnection.setLocalDescription().
  4. Mentransfer (menggunakan layanan pemberian sinyal) deskripsi SDP lokal ke pembanding jarak jauh.
  5. Mendaftarkan pemroses untuk peristiwa icecandidate pada RTCPeerConnection.
  6. Untuk setiap peristiwa icecandidate, transfer (menggunakan layanan sinyal) ke pembanding jarak jauh.
  7. Tunggu deskripsi SDP jarak jauh yang masuk dari layanan pemberian sinyal dan tetapkan menggunakan RTCPeerConnection.setRemoteDescription().
  8. Tunggu kandidat ICE jarak jauh yang masuk dari layanan pemberian sinyal dan tambahkan mereka menggunakan RTCPeerConnection.addIceCandidate()

Di sisi panggilan, prosesnya sedikit berbeda.

  1. Buat instance RTCPeerConnection baru dengan konfigurasi ICE yang sesuai.
  2. Tunggu deskripsi SDP jarak jauh yang masuk dari layanan pemberian sinyal dan tetapkan menggunakan RTCPeerConnection.setRemoteDescription().
  3. Buat jawaban untuk deskripsi SDP jarak jauh dengan memanggil RTCPeerConnection.createAnswer().
  4. Transfer (menggunakan layanan pemberi sinyal) jawaban ke pembanding jarak jauh.
  5. Mendaftarkan pemroses untuk peristiwa icecandidate pada RTCPeerConnection.
  6. Untuk setiap peristiwa icecandidate, transfer (menggunakan layanan sinyal) ke pembanding jarak jauh.
  7. Tunggu kandidat ICE jarak jauh yang masuk dari layanan pemberian sinyal dan tambahkan mereka menggunakan RTCPeerConnection.addIceCandidate()

Tantangan dari API ini adalah sebagian besar operasi ini asinkron, yang sering kali membuat implementasi aplikasi WebRTC yang sebenarnya menjadi rumit. Banyak fungsi menampilkan Promise yang harus diselesaikan sebelum langkah berikutnya dalam proses ini 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
    });
}