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