VP9 kini tersedia di WebRTC

Dua tahun lalu, Chrome mengaktifkan dukungan untuk codec VP9. Mulai Chrome 48 di desktop dan Android, VP9 akan menjadi codec video opsional untuk panggilan video menggunakan WebRTC.

Meskipun VP9 menggunakan blueprint dasar yang sama dengan codec sebelumnya, tim WebM telah memasukkan peningkatan ke dalam VP9 untuk mendapatkan kualitas yang lebih baik dari setiap byte video. Misalnya, encoder memprioritaskan fitur gambar yang paling tajam, dan codec kini menggunakan transformasi asimetris untuk membantu menjaga agar adegan yang paling menantang tetap terlihat jernih dan bebas blok.

Dengan VP9, koneksi internet yang saat ini dapat menayangkan 720p tanpa kehilangan paket atau penundaan akan dapat mendukung panggilan video 1080p pada bandwidth yang sama. VP9 juga dapat mengurangi penggunaan data untuk pengguna dengan koneksi yang buruk atau paket data yang mahal, yang dalam kasus terbaik hanya memerlukan 40% dari kecepatan bit VP8.

Anda dapat melihat perbandingan panggilan VP8 dengan VP9 pada screenshot di bawah dari rekaman yang kami buat dengan setelan encoder WebRTC, yang menunjukkan penghematan kecepatan bit sebesar 30%:

Screenshot video yang menampilkan panggilan WebRTC VP8 dan VP9 secara berdampingan

Codec untuk panggilan WebRTC, bersama dengan setelan media lainnya seperti kecepatan bit, dinegosiasikan antara pemanggil dan penerima dengan bertukar pesan metadata Session Description Protocol (SDP) yang menjelaskan kemampuan media klien.

Proses handshake ini — bertukar kemampuan media — dikenal sebagai penawaran/jawaban. Misalnya, pemanggil mungkin mengirim penawaran (pesan SDP) yang menyatakan preferensi untuk VP9, dengan VP8 sebagai penggantian. Jika jawaban mengonfirmasi bahwa pemanggil dapat menangani VP9, panggilan video dapat dilanjutkan menggunakan VP9. Jika pemanggil merespons dengan jawaban bahwa ia hanya dapat menggunakan VP8, panggilan akan dilanjutkan dengan VP8.

Untuk melihat cara kerjanya, lihat kode untuk aplikasi chat video WebRTC kanonis appr.tc.

Di appcontroller.js, VP9 ditetapkan sebagai codec pilihan kecuali jika parameter vsc atau vrc ditentukan di URL:

AppController.prototype.loadUrlParams_ = function() {
    // ...
    var DEFAULT_VIDEO_CODEC = 'VP9';
    // …
    this.loadingParams_.videoSendCodec = urlParams['vsc'];
    // ...
    this.loadingParams_.videoRecvCodec = urlParams['vrc'] || DEFAULT_VIDEO_CODEC;
}

Di sdputils.js, nilai codec kustom (jika ditentukan) kemudian digunakan untuk metadata SDP:

function maybePreferVideoSendCodec(sdp, params) {
    return maybePreferCodec(sdp, 'video', 'send', params.videoSendCodec);
}

function maybePreferVideoReceiveCodec(sdp, params) {
    return maybePreferCodec(sdp, 'video', 'receive', params.videoRecvCodec);
}

Fungsi maybePreferCodec() yang digunakan di sini menetapkan nilai untuk codec yang diminta dalam teks metadata SDP. SDP panjang dan tidak dirancang agar dapat dibaca manusia, tetapi Anda dapat melihat SDP yang digunakan oleh appr.tc dari konsol DevTools setelah panggilan dilakukan. Bagian penting terkait codec adalah baris m:

{
    "sdp": "v=0\r\no=- 9188830394109743399 2 IN IP4 127.0.0.1\r\ns … m=video ...",
    "type": "offer"
}

Dengan menggunakan appr.tc dan setelan defaultnya di Chrome versi terbaru, Anda akan melihat bahwa VP9 adalah codec pertama yang tercantum di baris m SDP — diikuti dengan VP8, yang juga dapat digunakan Chrome. Jika Anda menetapkan VP8 sebagai codec pilihan (misalnya, melalui parameter URL di appr.tc), VP8 akan dicantumkan terlebih dahulu.

Cari tahu selengkapnya