VP9 è ora disponibile in WebRTC

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

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

Con VP9, le connessioni a internet che attualmente sono in grado di trasmettere contenuti a 720p senza perdita di pacchetti o ritardi potranno supportare una videochiamata a 1080p con la stessa larghezza di banda. VP9 può anche ridurre l'utilizzo di dati per gli utenti con connessioni scadenti o piani dati costosi, richiedendo nei casi migliori solo il 40% della velocità in bit di VP8.

Puoi vedere il confronto tra le chiamate VP8 e VP9 nello screenshot di seguito delle registrazioni effettuate con le impostazioni dell'encoder WebRTC, che mostra un risparmio del 30% in termini di velocità in bit:

Screenshot di un video che mostra le chiamate WebRTC VP8 e VP9 una accanto all'altra

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

Questo processo di accoppiamento, ovvero lo scambio di funzionalità multimediali, è noto come offerta/risposta. Ad esempio, un chiamante potrebbe inviare un'offerta (un messaggio SDP) che indica una preferenza per VP9, con VP8 come opzione di riserva. Se la risposta conferma che il destinatario può gestire VP9, la videochiamata può procedere utilizzando questo codec. Se il chiamante risponde che può utilizzare solo VP8, la chiamata procederà con VP8.

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

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

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 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 da un utente, ma puoi visualizzare l'SDP utilizzato da appr.tc dalla console di DevTools dopo aver effettuato una chiamata. La parte importante per quanto riguarda i codec è la riga m:

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

Se utilizzi 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, che può essere utilizzato anche da Chrome. Se imposti VP8 come codec preferito (ad esempio tramite i parametri URL in appr.tc), verrà elencato per primo.

Scopri di più