Twee jaar geleden heeft Chrome ondersteuning voor de VP9- codec ingeschakeld. Vanaf Chrome 48 op desktop en Android is VP9 een optionele videocodec voor videogesprekken via WebRTC .
Hoewel VP9 dezelfde basisblauwdruk gebruikt als eerdere codecs, heeft het WebM-team verbeteringen in VP9 verwerkt om meer kwaliteit uit elke byte video te halen. Zo geeft de encoder prioriteit aan de scherpste beeldkenmerken en gebruikt de codec nu asymmetrische transformaties om zelfs de meest uitdagende scènes er scherp en blokloos uit te laten zien.
Met VP9 kunnen internetverbindingen die momenteel 720p aankunnen zonder pakketverlies of vertraging, een 1080p-videogesprek met dezelfde bandbreedte ondersteunen. VP9 kan ook het dataverbruik verminderen voor gebruikers met slechte verbindingen of dure data-abonnementen, waardoor in het beste geval slechts 40% van de bitsnelheid van VP8 nodig is.
U kunt zien hoe VP8-gesprekken zich verhouden tot VP9 in de onderstaande schermafbeelding van opnamen die we maakten met de WebRTC-encoderinstellingen. Er is een besparing van 30% op de bitsnelheid te zien:

De codec voor een WebRTC-aanroep wordt, samen met andere media-instellingen zoals de bitsnelheid, tussen de aanroeper en de aangeroepene onderhandeld door het uitwisselen van SDP-metagegevens (Session Description Protocol)-berichten die de mediamogelijkheden van de client beschrijven.
Dit handshakingproces – het uitwisselen van mediamogelijkheden – staat bekend als aanbod/antwoord. Een beller kan bijvoorbeeld een aanbod (een SDP-bericht) sturen waarin hij/zij aangeeft dat hij/zij de voorkeur geeft aan VP9, met VP8 als reserve. Als het antwoord bevestigt dat de gebelde VP9 aankan, kan het videogesprek worden voortgezet met VP9. Als de gebelde antwoordt dat hij/zij alleen VP8 kan gebruiken, wordt het gesprek voortgezet met VP8.
Om dit in actie te zien, bekijk de code voor de standaard WebRTC-videochattoepassing appr.tc.
In appcontroller.js is VP9 ingesteld als de voorkeurscodec, tenzij een vsc- of vrc -parameter is opgegeven in de 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 wordt de aangepaste codecwaarde (indien opgegeven) vervolgens gebruikt voor de SDP-metagegevens:
function maybePreferVideoSendCodec(sdp, params) {
return maybePreferCodec(sdp, 'video', 'send', params.videoSendCodec);
}
function maybePreferVideoReceiveCodec(sdp, params) {
return maybePreferCodec(sdp, 'video', 'receive', params.videoRecvCodec);
}
De functie maybePreferCodec() die hier wordt gebruikt, stelt waarden in voor de gevraagde codec in de tekst van de SDP-metadata. SDP is uitgebreid en niet ontworpen om leesbaar te zijn voor mensen, maar u kunt de SDP die door appr.tc wordt gebruikt bekijken vanuit de DevTools-console nadat een aanroep is gedaan. Het belangrijkste onderdeel met betrekking tot codecs is de m-regel :
{
"sdp": "v=0\r\no=- 9188830394109743399 2 IN IP4 127.0.0.1\r\ns … m=video ...",
"type": "offer"
}
Als u appr.tc met de standaardinstellingen gebruikt in een recente versie van Chrome, ziet u dat VP9 de eerste codec is die wordt vermeld in de SDP m-regel , gevolgd door VP8, die Chrome ook kan gebruiken. Als u VP8 instelt als de voorkeurscodec (bijvoorbeeld via URL-parameters in appr.tc ), wordt VP8 als eerste vermeld.
Meer informatie
- Het WebM-project : VP9-bronnen
- webrtc.org : thuisbasis van het WebRTC-project
- g.co/webrtc : links naar andere WebRTC-bronnen
- webrtc.github.io/samples : WebRTC-voorbeelden live
- test.webrtc.org : open source-apparaten- en netwerktesttools en een raamwerk voor het melden van bugs