Dwa lata temu w Chrome włączono obsługę kodeka VP9. Od wersji 48 Chrome na komputerach i urządzeniach z Androidem VP9 będzie opcjonalnym kodekiem wideo do połączeń wideo z użyciem WebRTC.
Chociaż VP9 korzysta z tego samego podstawowego schematu co poprzednie kodeki, zespół WebM wprowadził w nim ulepszenia, aby zwiększyć jakość każdego bajta wideo. Na przykład koder nadaje priorytet najostrzejszym elementom obrazu, a kodek używa teraz transformacji asymetrycznych, aby nawet najbardziej wymagające sceny były ostre i pozbawione bloków.
Dzięki VP9 połączenia internetowe, które obecnie obsługują transmisję w jakości 720p bez utraty pakietów lub opóźnień, będą mogły obsługiwać połączenia wideo w jakości 1080p przy tej samej przepustowości. VP9 może też zmniejszyć użycie danych przez użytkowników z niestabilnym połączeniem lub drogimi abonamentami danych, ponieważ w najlepszym przypadku wymaga tylko 40% szybkości transmisji bitów VP8.
Na poniższym zrzucie ekranu z nagraniami wykonanymi przy użyciu ustawień kodera WebRTC widać, że wywołania VP8 są lepsze od wywołań VP9. Widać na nim też 30% oszczędności w bitracie:
Kodek połączenia WebRTC wraz z innymi ustawieniami multimediów, takimi jak bitrate, jest negocjowany między osobą dzwoniącą a osobą odbieraną przez wymianę komunikatów z metadanymi protokołu SDP (Session Description Protocol), które opisują możliwości multimedialne klienta.
Ten proces ustalania połączenia, czyli wymiany możliwości mediów, nazywa się ofertą/odpowiedzią. Na przykład rozmówca może wysłać ofertę (wiadomość SDP) z preferencją dla VP9, a VP8 jako opcją zapasową. Jeśli odpowiedź potwierdzi, że odbiorca może obsługiwać VP9, rozmowa wideo może być prowadzona przy użyciu VP9. Jeśli osoba, do której kierowane jest połączenie, odpowie, że może używać tylko VP8, połączenie będzie kontynuowane z użyciem VP8.
Aby zobaczyć to w akcji, zapoznaj się z kodem kanonicznych aplikacji do wideoczatu WebRTC appr.tc.
W pliku appcontroller.js kodek VP9 jest ustawiony jako preferowany, chyba że w adresie URL podano parametr vsc lub vrc:
AppController.prototype.loadUrlParams_ = function() {
// ...
var DEFAULT_VIDEO_CODEC = 'VP9';
// …
this.loadingParams_.videoSendCodec = urlParams['vsc'];
// ...
this.loadingParams_.videoRecvCodec = urlParams['vrc'] || DEFAULT_VIDEO_CODEC;
}
W pliku sdputils.js wartość niestandardowego kodeka (jeśli została podana) jest używana do metadanych SDP:
function maybePreferVideoSendCodec(sdp, params) {
return maybePreferCodec(sdp, 'video', 'send', params.videoSendCodec);
}
function maybePreferVideoReceiveCodec(sdp, params) {
return maybePreferCodec(sdp, 'video', 'receive', params.videoRecvCodec);
}
Funkcja maybePreferCodec() użyta tutaj ustawia wartości dla żądanego kodeka w tekście metadanych SDP. SDP jest obszerny i nie jest przeznaczony do odczytu przez człowieka, ale po wywołaniu możesz wyświetlić SDP używany przez appr.tc w konsoli DevTools. Ważnym elementem w przypadku kodeków jest linia m:
{
"sdp": "v=0\r\no=- 9188830394109743399 2 IN IP4 127.0.0.1\r\ns … m=video ...",
"type": "offer"
}
Jeśli używasz appr.tc z domyślnymi ustawieniami w najnowszej wersji Chrome, zobaczysz, że VP9 jest pierwszym kodekiem wymienionym w wierszu SDP, a za nim następuje VP8, którego Chrome może też używać. Jeśli ustawisz VP8 jako preferowany kodek (za pomocą parametrów adresu URL w appr.tc), będzie on wymieniony jako pierwszy.
Więcej informacji
- Projekt WebM: zasoby VP9
- webrtc.org: strona domowa projektu WebRTC
- g.co/webrtc: linki do innych zasobów WebRTC
- webrtc.github.io/samples: przykłady WebRTC na żywo
- test.webrtc.org: narzędzia do testowania urządzeń i sieci oraz ramy do zgłaszania błędów o źródle otwartym