Koneksi pembanding

RTCPeerConnection adalah antarmuka pusat di WebRTC API. Objek 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 sangat bergantung pada antarmuka RTCPeerConnection. Dari sisi pemanggil (yaitu, peer 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. Setel deskripsi SDP lokal menggunakan RTCPeerConnection.setLocalDescription().
  4. Mentransfer (menggunakan layanan pensinyalan) deskripsi SDP lokal ke peer jarak jauh.
  5. Mendaftarkan pemroses untuk peristiwa icecandidate di RTCPeerConnection.
  6. Untuk setiap peristiwa icecandidate, transfer peristiwa tersebut (menggunakan layanan pensinyalan) ke peer jarak jauh.
  7. Tunggu deskripsi SDP jarak jauh yang masuk dari layanan pensinyalan dan tetapkan menggunakan RTCPeerConnection.setRemoteDescription().
  8. Tunggu kandidat ICE jarak jauh yang masuk dari layanan pensinyalan dan tambahkan menggunakan RTCPeerConnection.addIceCandidate()

Di sisi penerima panggilan, prosesnya sedikit berbeda.

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

Tantangan dengan API ini adalah sebagian besar operasi ini bersifat asinkron, yang sering kali membuat penerapan aplikasi WebRTC yang sebenarnya menjadi rumit. Banyak fungsi yang menampilkan Promise yang harus diselesaikan sebelum langkah berikutnya dalam proses dapat dilanjutkan.

Saat menerapkan aplikasi menggunakan API ini, sebaiknya 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 akan mendapatkan hasil berikut:

async function createAndSendOffer(peerConnection, signallingService) {
    const offer = await peerConnection.createOffer();
    signallingService.send({
        type: 'offer',
        data: offer
    });
}