В связи с пандемией видеоконференции всё более плотно входят в нашу жизнь, мы проводим встречи с коллегами, посещаем удалённые лекции или уроки или просто устраиваем сеансы связи с родными.
И в каждой видеоконференции обязательно найдётся кто-то, чьё видео будет отставать, зависать или вовсе будет показывать какое-то слайдшоу. Дайте угадаю, вы сразу же вспомнили такого участника вашей последней видеоконференции. :) Это люди, чей компьютер устарел, захламлён тысячей работающих в фоновом режиме процессов, или чей интернет оставляет желать лучшего.
В этой статье я хочу разобрать возможные решения столь частой проблемы видеоконференций.
Проблемы с зависающим/отстающим видео обычно связаны с тем, что видео одного качества с лёгкостью проходит через один канал интернета/устройство, но не проходит через другой.
Давайте на примере:
Есть три участника видеоконференции: A, B, C. У участников A и B очень хороший канал интернета и хорошее качество видео. А у участника C плохо ловящий 3G с постоянными потерями.
В итоге, если участник А будет отправлять видео в высоком качестве, которое способен принять участник B, то такое видео не пролезет в канал участника C. А если отправлять видео в качестве, которое беспроблемно работает для участника C, то участники A и B будут недовольны качеством связи. Как же быть?
Немного поразмыслив, мы в Voximplant сделали поддержку Simulcast для управления качеством видео в конференциях. Работает он так: участники с хорошим железом и широким каналом в интернет будут отправлять несколько потоков видео: в хорошем качестве для тех, кто может себе его позволить, и в качестве хуже для участников с плохим интернетом или железом. Какое качество кому отправлять, решает сервер.
Что происходит на стороне отправителя?
Для видео с веб-камер или стриминга мы управляем качеством с помощью изменения разрешения видео. Чем выше разрешение отправителя, тем больше слоёв он отправляет. Затем каждому участнику конференции отправляется видео в максимальном качестве, которое этот участник может принять.
Для шаринга экрана такой подход может оказаться неверным, потому что люди иногда хотят показать слайды, свой рабочий стол или даже исходный код. А при снижении разрешения мелкие элементы будет замыливать. Поэтому для таких случаев снижение качества происходит не уменьшением разрешения, а уменьшением частоты кадров в секунду.
А что на стороне получателя видео?
Серверная часть Voximplant сама анализирует канал принимающей стороны и подбирает подходящее качество видео для отправки. Дополнительно нагрузка снижается за счёт двух факторов:
Видео запрашивается разрешением не больше, чем размер видео элемента на экране
Выключается прием видео тех участников, которые нам не интересны (например не помещаются на экран или не говорят)
Мы проводим различные эксперименты для того, чтобы найти больше способов улучшения качества видео для участников с разными возможностями, так что вскоре к этим методам будут добавлены новые.
Как использовать?
Всё уже встроено в платформу Voximplant. Достаточно подключиться с включённым simulcast’ом, и всё вышеперечисленное будет работать. Вот пример на Web SDK:
const conference = VoxImplant.getInstance().callConference({
number: 'foobar',
simulcast: true
});
А дальше можно уже вручную включать или выключать определённые видеопотоки, менять разрешение, устанавливать битрейт и многое другое. Кому интересно, вот здесь можно почитать, как всё реализовать.
Качественной всем связи!