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 via WebRTC.

Alors que le format VP9 utilise le même plan de base que les codecs précédents, l'équipe WebM a intégré des améliorations au format VP9 afin d'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, tandis que le codec utilise désormais des transformations asymétriques pour que les scènes les plus difficiles restent nettes et sans blocs.

Avec le format VP9, les connexions Internet actuellement capables de diffuser des annonces en 720p sans perte ni délai de paquets pourront prendre en charge un appel vidéo 1080p avec la même bande passante. Le format VP9 peut également réduire la consommation de données pour les utilisateurs disposant d'une connexion médiocre ou ayant souscrit un forfait Internet coûteux. Dans le meilleur des cas, il ne nécessite que 40% du débit du protocole VP8.

Vous pouvez comparer les appels VP8 et VP9 dans la capture d'écran ci-dessous des enregistrements réalisés avec les paramètres de l'encodeur WebRTC, montrant des économies de débit de 30 % :

Capture d'écran d'une vidéo montrant les 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 l'appelant en échangeant des messages de métadonnées SDP (Session Description Protocol) décrivant les fonctionnalités multimédias du client.

Ce processus de handshake, c'est-à-dire l'échange de fonctionnalités multimédias, s'appelle offre/réponse. Par exemple, un appelant peut envoyer une offre (un message SDP) indiquant une préférence pour VP9, avec VP8 en remplacement. Si la réponse confirme que l'appelé peut gérer le codec VP9, l'appel vidéo peut continuer avec ce code. Si l'appelé indique qu'il ne peut utiliser que le code VP8, l'appel se poursuit avec le code VP8.

Pour observer son fonctionnement, examinez le code de l'application canonique de chat vidéo WebRTC 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 pour le codec demandé dans le texte des métadonnées SDP. Le SDP est détaillé et n'est pas conçu pour être lisible. Toutefois, vous pouvez consulter le SDP utilisé par appr.tc dans la console DevTools une fois l'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 les paramètres par défaut dans une version récente de Chrome, vous verrez que VP9 est le premier codec listé sur 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 affiché en premier.

En savoir plus