Vor zwei Jahren wurde in Chrome die Unterstützung für den VP9-Codec eingeführt. Ab Chrome 48 für Desktop und Android ist VP9 ein optionaler Video-Codec für Videoanrufe mit WebRTC.
VP9 basiert zwar auf demselben grundlegenden Konzept wie frühere Codecs, das WebM-Team hat aber Verbesserungen in VP9 integriert, um die Qualität jedes Videobytes zu optimieren. Der Encoder priorisiert beispielsweise die schärfsten Bildmerkmale und der Codec verwendet jetzt asymmetrische Transformationen, damit auch die anspruchsvollsten Szenen scharf und ohne Blöcke dargestellt werden.
Mit VP9 können Internetverbindungen, die derzeit 720p ohne Paketverlust oder Verzögerung unterstützen, bei gleicher Bandbreite einen 1080p-Videoanruf unterstützen. VP9 kann auch die Datennutzung für Nutzer mit schlechten Verbindungen oder teuren Datentarifen reduzieren. Im besten Fall ist nur 40% der Bitrate von VP8 erforderlich.
Im Screenshot unten sehen Sie, wie VP8-Anrufe im Vergleich zu VP9 abschneiden. Die Aufnahmen wurden mit den WebRTC-Encodereinstellungen erstellt und zeigen eine Bitratenreduzierung von 30 %.

Der Codec für einen WebRTC-Anruf wird zusammen mit anderen Media-Einstellungen wie der Bitrate zwischen Anrufer und Angerufenem ausgehandelt. Dazu werden SDP-Metadatennachrichten (Session Description Protocol) ausgetauscht, die die Media-Funktionen des Clients beschreiben.
Dieser Handshake-Prozess, bei dem Media-Funktionen ausgetauscht werden, wird als Angebot/Antwort bezeichnet. Ein Anrufer kann beispielsweise ein Angebot (eine SDP-Nachricht) senden, in dem er VP9 als bevorzugten Codec und VP8 als Fallback-Codec angibt. Wenn die Antwort bestätigt, dass der Angerufene VP9 verarbeiten kann, kann der Videoanruf mit VP9 fortgesetzt werden. Wenn der Angerufene mit einer Antwort reagiert, in der er nur VP8 verwenden kann, wird der Anruf mit VP8 fortgesetzt.
Ein Beispiel dafür finden Sie im Code der kanonischen WebRTC-Videochat-Anwendung appr.tc.
In appcontroller.js wird VP9 als bevorzugter Codec festgelegt, sofern in der URL kein vsc- oder vrc-Parameter angegeben ist:
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 wird der benutzerdefinierte Codec-Wert (falls angegeben) dann für die SDP-Metadaten verwendet:
function maybePreferVideoSendCodec(sdp, params) {
return maybePreferCodec(sdp, 'video', 'send', params.videoSendCodec);
}
function maybePreferVideoReceiveCodec(sdp, params) {
return maybePreferCodec(sdp, 'video', 'receive', params.videoRecvCodec);
}
Die hier verwendete Funktion maybePreferCodec() legt Werte für den angeforderten Codec im Text der SDP-Metadaten fest. SDP ist sehr ausführlich und nicht für Menschen lesbar. Sie können sich das von appr.tc verwendete SDP jedoch in der DevTools-Konsole ansehen, sobald ein Anruf erfolgt ist. Der wichtige Teil in Bezug auf Codecs ist die m-Zeile:
{
"sdp": "v=0\r\no=- 9188830394109743399 2 IN IP4 127.0.0.1\r\ns … m=video ...",
"type": "offer"
}
Wenn Sie appr.tc mit den Standardeinstellungen in einer aktuellen Version von Chrome verwenden, sehen Sie, dass VP9 der erste Codec ist, der in der m-Zeile des SDP aufgeführt ist, gefolgt von VP8, das Chrome ebenfalls verwenden kann. Wenn Sie VP8 als bevorzugten Codec festlegen (z. B. über URL-Parameter in appr.tc), wird VP8 stattdessen zuerst aufgeführt.
Weitere Informationen
- The WebM Project: VP9-Ressourcen
- webrtc.org: Website des WebRTC-Projekts
- g.co/webrtc: Links zu anderen WebRTC-Ressourcen
- webrtc.github.io/samples: WebRTC-Beispiele live
- test.webrtc.org: Open-Source-Tools zum Testen von Geräten und Netzwerken sowie Framework für Fehlerberichte