VP9 est désormais disponible dans WebRTC

Il y a deux ans, Chrome a activé la compatibilité avec le codec VP9. À partir de Chrome 48 sur ordinateur et Android, VP9 sera un codec vidéo facultatif pour les appels vidéo utilisant WebRTC.

Bien que VP9 utilise le même plan de base que les codecs précédents, l'équipe WebM a intégré des améliorations à VP9 pour améliorer la qualité de chaque octet de vidéo. Par exemple, l'encodeur donne la priorité aux caractéristiques d'image les plus nettes, et le codec utilise désormais des transformations asymétriques pour que même les scènes les plus difficiles restent nettes et sans blocs.

Avec VP9, les connexions Internet qui peuvent actuellement diffuser du contenu en 720p sans perte de paquets ni retard pourront prendre en charge un appel vidéo en 1080p à la même bande passante. VP9 peut également réduire la consommation de données des utilisateurs disposant de mauvaises connexions ou de forfaits de données coûteux, n'exigeant dans le meilleur des cas que 40% du débit de VP8.

Vous pouvez comparer les appels VP8 aux appels VP9 dans la capture d'écran ci-dessous, qui montre des économies de débit de 30% pour les enregistrements effectués avec les paramètres de l'encodeur WebRTC:

Capture d'écran d'une vidéo montrant des appels WebRTC VP8 et VP9 côte à côte

Le codec d'un appel WebRTC, ainsi que d'autres paramètres multimédias tels que le débit, sont négociés entre l'appelant et le destinataire en échangeant des messages de métadonnées SDP (Session Description Protocol) qui décrivent les fonctionnalités multimédias du client.

Ce processus d'établissement de la connexion (échange de fonctionnalités multimédias) est appelé "offre/réponse". Par exemple, un appelant peut envoyer une offre (un message SDP) indiquant une préférence pour VP9, avec VP8 comme solution de secours. Si la réponse confirme que l'interlocuteur peut gérer VP9, l'appel vidéo peut se poursuivre avec VP9. Si l'appelant répond qu'il ne peut utiliser que VP8, l'appel se poursuit avec VP8.

Pour voir comment cela fonctionne, consultez le code de l'application de chat vidéo WebRTC canonique appr.tc.

Dans appcontroller.js, VP9 est défini comme codec préféré, sauf si un paramètre vsc ou vrc est spécifié dans l'URL:

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

Dans sdputils.js, la valeur du codec personnalisé (si spécifiée) est ensuite utilisée pour les métadonnées SDP:

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

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

La fonction maybePreferCodec() utilisée ici définit les valeurs du codec demandé dans le texte des métadonnées SDP. Le SDP est long et n'est pas conçu pour être lisible par l'homme. Toutefois, vous pouvez afficher le SDP utilisé par appr.tc à partir de la console DevTools une fois un appel effectué. La partie importante concernant les codecs est la ligne m:

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

Si vous utilisez appr.tc avec ses paramètres par défaut dans une version récente de Chrome, vous constaterez que VP9 est le premier codec listé dans la ligne m du SDP, suivi de VP8, que Chrome peut également utiliser. Si vous définissez VP8 comme codec préféré (via les paramètres d'URL dans appr.tc, par exemple), VP8 sera listé en premier.

En savoir plus