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 yang menggunakan WebRTC.

Meskipun VP9 menggunakan blueprint dasar yang sama dengan codec sebelumnya, tim WebM telah mengemas 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 adegan yang paling menantang tetap terlihat jelas dan tanpa halangan.

Dengan VP9, koneksi internet yang saat ini dapat melayani 720p tanpa kehilangan atau penundaan paket 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 membutuhkan 40% dari kecepatan bit VP8.

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

Screenshot video yang menampilkan panggilan WebRTC VP8 dan VP9 secara berdampingan

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

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

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

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

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

Dalam 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 bisa dibaca manusia, tetapi Anda dapat melihat SDP yang digunakan oleh appr.tc dari konsol DevTools setelah panggilan dilakukan. Bagian penting sehubungan dengan codec adalah m line:

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

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

Cari tahu selengkapnya