Wersja VP9 jest teraz dostępna w WebRTC

Dwa lata temu Chrome włączył obsługę kodeka VP9. Od Chrome 48 na komputerach i urządzeniach z Androidem VP9 będzie opcjonalnym kodekiem wideo do rozmów wideo przy użyciu WebRTC.

Choć VP9 korzysta z tych samych podstawowych kodeków co poprzednie kodeki, zespół WebM wprowadził do niego ulepszenia, które pozwalają uzyskać lepszą jakość każdego bajtu filmu. Na przykład kodek nadaje priorytet najostrzejszym funkcjom związanym z obrazem, a kodek korzysta teraz z asymetrycznych przekształceń, aby nawet najbardziej wymagające sceny wyglądały ostrożnie i bez bloków.

Dzięki standardowi VP9 połączenia z internetem, które obecnie mogą obsługiwać jakość 720p bez utraty pakietów i opóźnienia, będą mogły z taką samą przepustowością obsługiwać rozmowę wideo w rozdzielczości 1080p. VP9 może również zmniejszyć użycie danych w przypadku użytkowników ze słabymi połączeniami lub drogimi abonamentami. W większości przypadków wymaga tylko 40% szybkości transmisji bitów w VP8.

Porównanie połączeń VP8 z VP9 można zobaczyć na zrzucie ekranu poniżej, który pokazuje nagrania wygenerowane z użyciem ustawień kodera WebRTC i pokazują 30% oszczędności szybkości transmisji bitów:

Zrzut ekranu pokazujący obok siebie wywołania WebRTC dzięki VP8 i VP9

Kodek wywołania WebRTC wraz z innymi ustawieniami multimediów, takimi jak szybkość transmisji bitów, jest negocjowany między obiektem wywołującym a wywołaną osobą przez wymianę komunikatów z metadanymi protokołu SIP (Session description Protocol), które opisują możliwości klienta.

Ten proces wymiany rąk jest nazywany ofertą/odpowiedzią. Rozmówca może na przykład wysłać ofertę (wiadomość SDP) z informacją o preferowaniu dla VP9, a VP8 jako kreacji zastępczej. Jeśli odpowiedź potwierdza, że rozmówca obsługuje VP9, rozmowa wideo może być kontynuowana przy użyciu tego VP9. Jeśli rozmówca odpowie, że może używać tylko VP8, rozmowa będzie kontynuowana przy użyciu VP8.

Aby zobaczyć, jak to działa, zapoznaj się z kodem kanonicznej aplikacji czatu wideo WebRTC: appr.tc.

W pliku appcontroller.js preferowany kodek jest VP9, chyba że w adresie URL określono 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 metadanych SDP jest używana wartość niestandardowego kodeka (jeśli została podana):

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

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

Użyta w tym miejscu funkcja maybePreferCodec() ustawia wartości żądanego kodeka w tekście metadanych SDP. Protokół SDP jest szczegółowy i nie jest w pełni zrozumiały dla człowieka, ale po wywołaniu danych SDP używany przez appr.tc można wyświetlić w konsoli Narzędzi deweloperskich. Istotnym elementem w przypadku kodeków jest wiersz m:

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

Przy użyciu pliku appr.tc z ustawieniami domyślnymi w najnowszej wersji Chrome zobaczysz, że VP9 jest pierwszym kodekiem wymienionym w wierszu m SDP, a następnie VP8, którego może też używać Chrome. Jeśli ustawisz VP8 jako preferowany kodek (np. za pomocą parametrów adresu URL w appr.tc), VP8 będzie wyświetlany jako pierwszy.

Więcej informacji