Снижение задержки в массовых видеотрансляциях до менее чем 1 секунды с помощью WebRTC

16/2/2021
·
Обновлено
7.8.2026
Минимизация задержки для массовых видеотрансляций до менее 1 секунды с WebRTC — обложка

Возможно ли добиться задержки менее секунды в видеобродкасте? А если стрим идёт на тысячную аудиторию? Да, возможно. Как? Ответим на этом примере — проекта Worldcast Live. Мы реализовали его на базе WebRTC. WCL транслирует концерты в HD-качестве на аудиторию в сотни и тысячи человек.

Зачем понижать задержку в видеотрансляции в прямом эфире?

Задержка (latency) менее секунды в видеоконференции — норма, иначе общаться невозможно. Для односторонней трансляции на большую аудиторию норма — и 2, и даже 20 секунд. Часто это приемлемо: задержка телевизионного сигнала — тоже около 6 секунд.

Но бывают случаи, когда в бродкасте нужна задержка менее секунды — например, в видеочате:

  • Спортивные события

Вряд ли пользователь будет доволен, когда все соседи закричат: «Гол!», а на его трансляции мяч всё ещё в центре поля. А если он ещё и ставит вживую?

  • Интервью

В век пандемии в онлайн перешло не только общение между друзьями, но и интервью с известными личностями. Сложите задержки интервьюера и интервьюируемого, добавьте миллисекунды, потраченные по дороге к пользователю. Чем больше результат — тем хуже опыт для всех сторон.

  • Концерты

Плейер WCL встраивается на разные сайты. Трансляция концерта идёт на них одновременно в прямом эфире. Если вы смотрите с другом с разных сайтов, задержка в 20 секунд испортит впечатление от просмотра. Сегодня организаторы концертов стараются минимизировать задержку у конечного пользователя. Ему, конечно, не так важно, услышит он гитарный рифф сразу или через 2 секунды, но общий тренд — на уменьшение задержки. Чем быстрее, тем лучше :)

А ещё...

Примеры выше комбинируются. В Worldcast Live зрители и исполнители на концерте общаются через видеочат. Значит, и задержка должна быть как у видеочата: важно минимальное время между вопросом и ответом.

Как добиться задержки менее секунды в бродкасте?

Используйте WebRTC

Стандартный пакет WebRTC обеспечивает среднюю задержку в 500 миллисекунд (полсекунды). На этом можно было бы остановиться: просто создать видеочат, где пользователи подключаются друг к другу — технически это не сложно. Но сложно добиться стабильной работы на тысячах пользователей и реализовать гибкую настройку потоков для улучшения качества.

Базовый WebRTC — это не HD-стриминг. Качество аудио подходит для разговора, но не для передачи музыки. Чтобы снизить задержку, WebRTC может ухудшать качество, пропускать короткие фрагменты видео и звука. Чтобы этого избежать, пришлось глубоко изучить работу WebRTC — и мы это сделали.

Настройте WebRTC

Для того чтобы уменьшение задержки не ухудшало качество и опыт конечного пользователя, требуется дополнительная разработка. Что мы сделали для WCL, которая транслирует HD-концерты на аудиторию в несколько тысяч человек:

  • включили многоканальное аудио

Стандартное аудио в WebRTC — моно, то есть один канал. Стерео — два канала. На WCL — 5 аудиоканалов.

  • повысили битрейт

Настройки WebRTC по умолчанию ограничивают скорость передачи видео до 500 кб/с. Для активных действий на экране этого мало: если быстро сменяются яркие цвета и есть ограничение в 500 кб/с — качество видео будет понижаться, чтобы уложиться в узкий канал, и появятся пиксели. Так себе опыт просмотра концерта. Поэтому мы увеличили битрейт (пропускную способность) до 1,5 Гб, чтобы передавать HD-видео

  • повысили частоту дискретизации

Таким образом мы улучшили качество аудио и видеопотоков — низкие и высокие частоты теперь не теряются при кодировании. Что именно мы сделали, рассказывать здесь не будем, но если интересно — пишите нам!

Масштабируйте Kurento

Kurento Media Server — это WebRTC-сервер с открытым исходным кодом. Для видеотрансляции настройте Master Kurento, через который будет идти стрим. К одному Master Kurento можно подключить до 500 зрителей, которые напрямую получают видеопоток. Если зрителей больше, включается Edge Kurento — его можно подключить к Master, и к нему уже присоединяются дополнительные пользователи. Чем больше зрителей, тем больше Edge Kurento нужно задействовать. Всё вместе это образует структуру в виде дерева.

Минимизация задержки для массовых видео трансляций до менее 1 секунды с WebRTC, image #1

В каких случаях оставить задержку больше секунды?

В условиях ограниченного бюджета WebRTC дороже HLS, если требуется масштабирование. Сервер WebRTC на WCL стоит 0,17 доллара в час — это около 122,40 долларов в месяц при расчёте на 30 дней.

HLS стоит $0,23 в час, и, в отличие от WebRTC, его можно включать и выключать — платим только за реальное использование, без расходов на простой. При трёх часовых концертах в неделю за 12 концертов в месяц выйдет чуть меньше $0,28. Разница ощутима. Учтите, что провайдеров серверов много и цены различаются, но на примере нашего проекта масштаб понятен.

Первая стабильная версия оптимальной задержки для WCL заняла 3,5 недели разработки. Если вам не нужна задержка менее одной секунды — например, вы не проводите интервью во время концерта — стоит ли вообще вкладываться в это?

А если кратко?

Задержка не более секунды в видеобродкасте необходима, если участники общаются между собой или смотрят мероприятие, где происходят быстрые изменения. С WebRTC это возможно даже для тысяч зрителей, если правильно использовать технологию.

Если ваше приложение подходит под эти задачи — обязательно обратите внимание на WebRTC. И свяжитесь с нами — поможем.

  • Технологии
    Разработка