VP9 теперь доступен в WebRTC

Два года назад Chrome включил поддержку кодека VP9 . Начиная с Chrome 48 для ПК и Android, VP9 станет дополнительным видеокодеком для видеозвонков с использованием WebRTC .

Хотя VP9 использует ту же базовую схему, что и предыдущие кодеки, команда WebM внесла в VP9 улучшения, позволяющие повысить качество каждого байта видео. Например, кодировщик отдает приоритет самым четким характеристикам изображения, а кодек теперь использует асимметричные преобразования, чтобы даже самые сложные сцены выглядели четкими и без блоков.

Благодаря VP9 интернет-соединения, которые в настоящее время поддерживают разрешение 720p без потери пакетов или задержек, смогут поддерживать видеовызовы 1080p с той же полосой пропускания. VP9 также может сократить использование данных для пользователей с плохим соединением или дорогими тарифными планами, требуя в лучшем случае только 40% битрейта VP8.

Вы можете увидеть, как вызовы VP8 сравниваются с VP9, ​​на снимке экрана ниже, где показаны записи, которые мы сделали с настройками кодировщика WebRTC, демонстрируя экономию битрейта на 30 %:

Снимок экрана видео, на котором показаны вызовы WebRTC VP8 и VP9 рядом

Кодек для вызова 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);
}

Используемая здесь функция mayPreferCodec() устанавливает значения для запрошенного кодека в тексте метаданных 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 : инструменты тестирования устройств и сети с открытым исходным кодом, а также система отчетов об ошибках.