Два года назад Chrome включил поддержку кодека VP9 . Начиная с Chrome 48 на десктопах и Android, VP9 станет дополнительным видеокодеком для видеозвонков с использованием WebRTC .
Хотя VP9 использует ту же базовую схему, что и предыдущие кодеки, команда WebM вложила улучшения в VP9, чтобы получить больше качества из каждого байта видео. Например, кодер отдает приоритет самым резким характеристикам изображения, а кодек теперь использует асимметричные преобразования, чтобы даже самые сложные сцены выглядели четкими и без блоков.
С VP9 интернет-подключения, которые в настоящее время способны обслуживать 720p без потери пакетов или задержки, смогут поддерживать видеозвонки 1080p при той же пропускной способности. VP9 также может сократить использование данных для пользователей с плохим соединением или дорогими тарифными планами, требуя в лучшем случае только 40% битрейта VP8.
Сравнение вызовов VP8 и VP9 можно увидеть на снимке экрана ниже, где показаны записи, сделанные с настройками кодировщика WebRTC, на которых показана экономия битрейта в 30%:

Кодек для вызова WebRTC, а также другие параметры мультимедиа, такие как битрейт, согласовываются между вызывающим и вызываемым абонентами путем обмена сообщениями метаданных протокола описания сеанса (SDP), которые описывают медиавозможности клиента.
Этот процесс установления связи — обмен возможностями медиа — известен как предложение/ответ. Например, вызывающий абонент может отправить предложение (сообщение SDP), указав предпочтение VP9, с VP8 в качестве запасного варианта. Если ответ подтверждает, что вызываемый абонент может обрабатывать VP9, видеовызов может продолжаться с использованием VP9. Если вызываемый абонент отвечает, что он может использовать только VP8, вызов продолжится с использованием VP8.
Чтобы увидеть это в действии, взгляните на код канонического приложения для видеочата WebRTC appr.tc.
В appcontroller.js VP9 устанавливается как предпочтительный кодек, если в URL-адресе не указан параметр vsc или vrc :
AppController.prototype.loadUrlParams_ = function() {
// ...
var DEFAULT_VIDEO_CODEC = 'VP9';
// …
this.loadingParams_.videoSendCodec = urlParams['vsc'];
// ...
this.loadingParams_.videoRecvCodec = urlParams['vrc'] || DEFAULT_VIDEO_CODEC;
}
В sdputils.js пользовательское значение кодека (если указано) затем используется для метаданных SDP:
function maybePreferVideoSendCodec(sdp, params) {
return maybePreferCodec(sdp, 'video', 'send', params.videoSendCodec);
}
function maybePreferVideoReceiveCodec(sdp, params) {
return maybePreferCodec(sdp, 'video', 'receive', params.videoRecvCodec);
}
Функция maybePreferCodec(), используемая здесь, устанавливает значения для запрошенного кодека в тексте метаданных SDP. SDP многословен и не предназначен для чтения человеком, но вы можете просмотреть SDP, используемый appr.tc , из консоли DevTools после выполнения вызова. Важная часть в отношении кодеков — строка m :
{
"sdp": "v=0\r\no=- 9188830394109743399 2 IN IP4 127.0.0.1\r\ns … m=video ...",
"type": "offer"
}
Используя appr.tc с его настройками по умолчанию в последней версии Chrome, вы увидите, что VP9 — это первый кодек, указанный в строке SDP m , за которым следует VP8, который Chrome также может использовать. Если вы установите VP8 в качестве предпочтительного кодека (например, через параметры URL в appr.tc ), VP8 будет указан первым.
Узнать больше
- Проект WebM : ресурсы VP9
- webrtc.org : дом проекта WebRTC
- g.co/webrtc : ссылки на другие ресурсы WebRTC
- webrtc.github.io/samples : живые примеры WebRTC
- test.webrtc.org : инструменты тестирования устройств и сетей с открытым исходным кодом, а также фреймворк для создания отчетов об ошибках