VP9 è ora disponibile in WebRTC

Due anni fa ha abilitato Chrome per il supporto del codec VP9. Da Chrome 48 su computer e Android, VP9 sarà un codec video facoltativo per le videochiamate che utilizzano WebRTC.

Mentre VP9 utilizza lo stesso progetto di base dei codec precedenti, il team WebM ha integrato miglioramenti nella versione VP9 per ottenere una maggiore qualità da ogni byte di video. Ad esempio, l'encoder dà la priorità alle funzionalità delle immagini più nitide e il codec ora utilizza trasformazioni asimmetriche per aiutare a mantenere nitide e senza blocchi anche le scene più impegnative.

Con VP9, le connessioni Internet che sono attualmente in grado di servire 720p senza perdita di pacchetti o ritardo saranno in grado di supportare una videochiamata a 1080p con la stessa larghezza di banda. VP9 può inoltre ridurre l'utilizzo dei dati per gli utenti con connessioni deboli o piani dati costosi, richiedendo nella migliore delle ipotesi solo il 40% della velocità in bit di VP8.

Puoi vedere le differenze tra le chiamate VP8 e VP9 nello screenshot di seguito delle registrazioni effettuate con le impostazioni del codificatore WebRTC, che mostrano una riduzione della velocità in bit del 30%:

Screenshot di un video che mostra le chiamate WebRTC VP8 e VP9 affiancate

Il codec di una chiamata WebRTC, insieme ad altre impostazioni multimediali come la velocità in bit, viene negoziato tra il chiamante e il chiamante scambiando messaggi di metadati SDP (Session Description Protocol) che descrivono le funzionalità multimediali del client.

Questo processo di handshake, ossia lo scambio di funzionalità multimediali, è noto come offerta/risposta. Ad esempio, un chiamante potrebbe inviare un'offerta (un messaggio SDP) indicando una preferenza per VP9, con VP8 come riserva. Se la risposta conferma che il chiamante può gestire VP9, la videochiamata può continuare utilizzando VP9. Se il chiamante risponde con la risposta che può utilizzare solo VP8, la chiamata continuerà con VP8.

Per vedere come funziona, dai un'occhiata al codice dell'applicazione canonica di chat video WebRTC appr.tc.

In appcontroller.js, VP9 è impostato come codec preferito, a meno che non venga specificato un parametro vsc o vrc nell'URL:

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

In sdputils.js, il valore del codec personalizzato (se specificato) viene quindi utilizzato per i metadati SDP:

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

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

La funzione maybePreferCodec() utilizzata qui imposta i valori per il codec richiesto nel testo dei metadati SDP. L'SDP è dettagliato e non è progettato per essere leggibile, ma puoi visualizzare l'SDP utilizzato da appr.tc dalla console DevTools dopo aver effettuato una chiamata. La parte importante in merito ai codec è la riga m:

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

Se usi appr.tc con le impostazioni predefinite in una versione recente di Chrome, vedrai che VP9 è il primo codec elencato nella riga m SDP, seguito da VP8, utilizzabile anche da Chrome. Se imposti VP8 come codec preferito (tramite i parametri URL in appr.tc, ad esempio), VP8 sarà elencato per primo.

Scopri di più