VP9 ahora está disponible en WebRTC

Hace dos años, Chrome habilitó la compatibilidad con el códec VP9. A partir de Chrome 48 en computadoras de escritorio y Android, VP9 será un códec de video opcional para videollamadas con WebRTC.

Si bien el VP9 usa el mismo plano básico que los códecs anteriores, el equipo de WebM implementó mejoras en el VP9 para obtener más calidad de cada byte de video. Por ejemplo, el codificador prioriza las características de imagen más nítidas, y el códec ahora usa transformaciones asimétricas para ayudar a que incluso las escenas más desafiantes se vean nítidas y sin bloques.

Con VP9, las conexiones a Internet que actualmente pueden entregar 720 p sin perder ni retrasar los paquetes podrán admitir una videollamada de 1080 p con el mismo ancho de banda. VP9 también puede reducir el uso de datos para usuarios con malas conexiones o planes de datos costosos, lo que requiere en el mejor de los casos solo el 40% de la tasa de bits de VP8.

Puedes ver una comparación de las llamadas de VP8 con las de VP9 en la siguiente captura de pantalla de las grabaciones que hicimos con la configuración del codificador WebRTC, donde se muestra un 30% de ahorro en la tasa de bits:

Captura de pantalla de video que muestra llamadas de WebRTC de VP8 y VP9 una al lado de la otra

El códec para una llamada WebRTC, junto con otras configuraciones de contenido multimedia, como la tasa de bits, se negocia entre el emisor y el destinatario mediante el intercambio de mensajes de metadatos del protocolo de descripción de sesión (SDP) que describen las capacidades multimedia del cliente.

Este proceso de enlace, es decir, el intercambio de capacidades de medios, se conoce como oferta/respuesta. Por ejemplo, un llamador puede enviar una oferta (un mensaje SDP) en el que se indique una preferencia por VP9, con VP8 como resguardo. Si la respuesta confirma que el destinatario puede manejar VP9, la videollamada puede continuar con VP9. Si el destinatario responde con una respuesta que indica que solo puede usar VP8, la llamada continuará con VP8.

Para ver esto en acción, observa el código de la aplicación canónica de videochat de WebRTC appr.tc.

En appcontroller.js, VP9 se establece como el códec preferido, a menos que se especifique un parámetro vsc o vrc en la URL:

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

En sdputils.js, se usa el valor del códec personalizado (si se especifica) para los metadatos del SDP:

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

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

La función maybePreferCodec() que se usa aquí establece valores para el códec solicitado en el texto de los metadatos del SDP. El SDP es detallado y no está diseñado para ser legible por humanos, pero puedes ver el SDP que usa appr.tc en la consola de Herramientas para desarrolladores una vez que se realizó una llamada. La parte importante con respecto a los códecs es la línea m:

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

Si usas appr.tc con la configuración predeterminada en una versión reciente de Chrome, verás que VP9 es el primer códec que aparece en la línea m del SDP, seguido de VP8, que también puede usar Chrome. Si estableces VP8 como el códec preferido (por ejemplo, a través de los parámetros de URL en appr.tc), VP8 se mostrará primero.

Más información