VP9 is nu beschikbaar in WebRTC

Twee jaar geleden schakelde Chrome ondersteuning in voor de VP9- codec. Vanaf Chrome 48 op desktop en Android is VP9 een optionele videocodec voor videogesprekken met WebRTC .

Hoewel VP9 dezelfde basisblauwdruk gebruikt als eerdere codecs, heeft het WebM-team verbeteringen in VP9 gestopt om meer kwaliteit uit elke byte video te halen. De encoder geeft bijvoorbeeld prioriteit aan de scherpste beeldkenmerken, en de codec maakt nu gebruik van asymmetrische transformaties om ervoor te zorgen dat zelfs de meest uitdagende scènes er helder en blokvrij uitzien.

Met VP9 kunnen internetverbindingen die momenteel 720p kunnen bedienen zonder pakketverlies of vertraging een 1080p-videogesprek met dezelfde bandbreedte ondersteunen. VP9 kan ook het datagebruik verminderen voor gebruikers met slechte verbindingen of dure data-abonnementen, waarbij in het beste geval slechts 40% van de bitrate van VP8 nodig is.

Je kunt zien hoe VP8-oproepen zich verhouden tot VP9 in de onderstaande schermafbeelding van opnames die we hebben gemaakt met de WebRTC-encoderinstellingen, waaruit een bitratebesparing van 30% blijkt:

Screenshot van een video waarin VP8- en VP9 WebRTC-oproepen naast elkaar worden getoond

De codec voor een WebRTC-oproep, samen met andere media-instellingen zoals bitrate, wordt onderhandeld tussen beller en gebelde door het uitwisselen van Session Description Protocol (SDP)-metagegevensberichten die de mediamogelijkheden van de client beschrijven.

Dit handshaking-proces – het uitwisselen van mediamogelijkheden – staat bekend als aanbod/antwoord. Een beller kan bijvoorbeeld een aanbieding sturen (een SDP-bericht) waarin hij de voorkeur geeft aan VP9, ​​met VP8 als uitwijkmogelijkheid. Als het antwoord bevestigt dat de gebelde VP9 aankan, kan het videogesprek doorgaan met VP9. Als de gebelde antwoordt met het antwoord dat hij alleen VP8 kan gebruiken, wordt het gesprek voortgezet met VP8.

Om dit in actie te zien, bekijk je de code voor de canonieke WebRTC-videochatapplicatie 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 vervolgens de aangepaste codecwaarde (indien opgegeven) 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 mayPreferCodec() die hier wordt gebruikt, stelt waarden in voor de gevraagde codec in de tekst van de SDP-metagegevens. SDP is uitgebreid en niet ontworpen om leesbaar te zijn voor mensen, maar u kunt de SDP die door appr.tc wordt gebruikt bekijken vanaf de DevTools-console zodra er een oproep 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 je appr.tc gebruikt met de standaardinstellingen in een recente versie van Chrome, zul je zien 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 te weten komen