Челленджи команды Яндекс 360 при разработке Телемоста: как мы их решаем
Технический руководитель Яндекс Телемоста объяснил, как работает видеосвязь и почему идеальное качество требует нестандартных решений.
Технический руководитель Яндекс Телемоста объяснил, как работает видеосвязь и почему идеальное качество требует нестандартных решений.
Видеоконференции стали неотъемлемой частью деловых коммуникаций. Но за каждой «простой» виртуальной встречей стоит сложная инфраструктура. Иван Парфилов, технический Product Owner Яндекс Телемоста, рассказывает, над какими проблемами работает его команда и какие решения внедряет, чтобы видеосвязь была надёжной и комфортной для бизнеса.
В августе прошлого года мы перевели Телемост с внешнего IT-решения на платформу собственной разработки, что стало поворотным моментом в развитии продукта. Этот шаг позволил нам:
Как и в любом масштабном обновлении, первый выход в свет нового продукта не был простым. Нашими главными помощниками на этом этапе стали наши коллеги: Яндекс 360 начал активно тестить Телемост на новом движке. Это стало настоящим испытанием на прочность, которое выявило ряд сложностей: нестабильное соединение, проблемы с аудио, недостаточное качество видео и многое другое.
Мы приняли вызов и начали работать, чтобы превратить «просто работающий» продукт в качественно новый инструмент, который расширит возможности бизнеса по использованию сервиса.
На первом этапе мы сосредоточились на основных сложных моментах и за несколько месяцев работы:
Кроме того, мы унифицировали систему сбора данных о качестве соединения, что позволяет видеть какие-то сложности «секунда в секунду».
Чтобы разобраться, почему порой возникают проблемы с видеосвязью, надо понимать принцип работы современных платформ для видеоконференций.
В отличие от большинства веб-приложений, подобные системы, в том числе и Телемост, не работают по клиент-серверной модели. Вместо этого используется архитектура с селективной передачей (SFU, или Selective Forwarding Unit).
Телемост собирает видеопотоки от участников встречи и пересылает их другим участникам с помощью UDP-датаграмм. В отличие от привычных соединений, сервер не устанавливает постоянное подключение и не ожидает подтверждений доставки, а отправляет пакеты один за другим, чтобы минимизировать задержки.
Чтобы датаграммы дошли до адресата, клиент должен быть публично доступен по IP-адресу. Но в реальных сетях у устройства пользователя, как правило, никакого общедоступного публичного IP-адреса нет: трафик в процессе маршрутизации проходит несколько преобразований NAT. Решить эту проблему помогают технологии:
Передача данных организована через несколько логических каналов:
Для передачи медиатрафика мы используем протокол RTP: он ориентирован на передачу данных для минимизации задержек, но допускает потерю данных. А контроль и синхронизацию медиапотоков мы осуществляем через RTCP (RTP Control Protocol).
Такая многоуровневая система позволяет поддерживать стабильную видеосвязь на разных сетях, но иногда может служить источником сбоев.
Вот некоторые ситуации, с которыми сталкивались наши клиенты, и то, как команда решила их.
Когда вы видите, что видео коллеги становится «мыльным» или демонстрация экрана начинает зависать, скорее всего, причина в ограничении пропускной способности сети. Для видеоконференции важно не только качество вашего соединения, но и то, что происходит у ваших собеседников.
С точки зрения видеоконференций хороший интернет — это не высокая пиковая скорость, а стабильное соединение с минимальными потерями. Гигабитное соединение, которое на 9 секунд «замирает», а потом отдаёт весь трафик за 1 секунду, для Телемоста хуже, чем стабильное соединение на 100 Мбит/с.
Чтобы решить сложности со связью, механизм оценки пропускной способности (BWE) анализирует в реальном времени параметры сети на основе статистики WebRTC Stats. BWE пытается оценить, какая пропускная полоса доступна пользователю.
Кроме того, участники конференций теперь могут отключать входящее видео. Это значительно снижает нагрузку на канал и позволяет сконцентрироваться на аудио и передаче собственного видео.
Если видео собеседника периодически замирает, а звук начинает прерываться, скорее всего, часть данных теряется при передаче по сети. Представьте, что видеозвонок — это поток писем и некоторые из них по ошибке не попадают в нужный почтовый ящик.
Чтобы компенсировать такие потери, мы используем несколько технических решений:
Систему повторного запроса (технически RTX и NACK). Когда ваше устройство не получает какой-то фрагмент данных, оно «просит» Телемост отправить его снова. Это похоже на разговор по телефону, когда вы не расслышали фразу собеседника и просите повторить.
Умное восстановление данных (или упреждающая коррекция ошибок — FEC). Телемост заранее добавляет «запасные» данные, которые помогают восстановить потерянные фрагменты. Это как если бы важные сообщения отправлялись несколько раз. Даже если часть «писем» потеряют на почте, вы получите нужную информацию.
Оба этих подхода требуют большой пропускной способности канала связи: часть информации дублируется либо по запросу, либо по умолчанию. Зато такие решения минимизируют задержки и повышают плавность видео и звука.
Интеллектуальную экономию трафика (DTX — прерывистая передача), напротив, сокращает размер данных, чтобы не перегружать соединение. Система определяет моменты тишины и не передаёт «пустой» звук, а при статичном изображении (когда никто не двигается) снижается частота кадров. Это позволяет сэкономить до 30% трафика без потери качества для пользователя.
В зависимости от условий подключения Телемост динамически выбирает оптимальную стратегию, чтобы обеспечить максимально возможное качество видеосвязи.
Оптимальная передача видео требует баланса между качеством и объёмом данных. Ни одна, даже самая лучшая сеть не выдержит, если передавать каждый кадр каждого участника в достаточно высоком качестве с частотой 24 кадра в секунду. Поэтому в видеосвязи используют два вида кадров:
При потере даже одного промежуточного кадра восстановить изображение бывает сложно, так как требуется запрос нового I-frame. Массовые запросы таких кадров могут вызвать «I-frame шторм», перегружая сеть. Поэтому оптимальным решением становится продолжение использования P-frame с попыткой восстановления изображения, что приводит к появлению характерных визуальных артефактов.
Потери кадров могут быть вызваны как недостаточной пропускной способностью сети, так и неспособностью устройства справиться с нагрузкой при кодировании или декодировании видеопотока. В обоих случаях проблема проявляется одинаково: изображение начинает «рассыпаться».
При кратковременных проблемах лучше использовать небольшое застывание изображения, чтобы избежать «рассыпания». При длительных проблемах предпочтительнее показывать ухудшенное изображение. Так пользователь видит, что соединение всё же сохраняется.
Для частичного решения таких проблем мы используем адаптивное кодирование (Simulcast):
Из-за огромного разнообразия доступного оборудования в работе с десктопной версией мы постоянно сталкиваемся с самыми неожиданными проблемами. Вот некоторые из интересных случаев, с которыми мы работали:
Пользователи сообщали о зелёном экране при демонстрации видео в 4K. На определённых видеокартах с включённым аппаратным ускорением в некоторых браузерах вместо демонстрации экрана отображался зелёный прямоугольник.
Как решили: порекомендовали обновить драйверы видеокарты и отключить аппаратное ускорение.
Заказчик сообщил, что на одинаковых компьютерах с разными Wi-Fi-модулями качество звука кардинально отличается.
Статус: сняли дамп Wireshark, продолжаем разбираться.
Пользователи с профессиональными звуковыми картами (с частотой дискретизации до 192 кГц и 16 каналами) сталкивались с разнообразными проблемами: звук не идёт, идёт только в один канал, звучит выше или ниже нормального, прерывается.
Статус: пока не решили полностью, продолжаем работать над решением из-за огромного количества возможных комбинаций оборудования.
Пользователи сообщали о странном, очень низком голосе собеседников при использовании AirPods. При обнаружении AirPods система видела наушники с частотой 48 кГц, но при подключении частота синхронизировалась с микрофоном (24 кГц). При этом WebRTC продолжал отправлять аудио с частотой 48 кГц.
Как решили: разработали специальную логику для работы с AirPods, которая учитывает эту особенность.
У одного из заказчиков Телемост внезапно перестал работать у всех сотрудников одновременно. Выяснили, что обновление корпоративного Kaspersky начало блокировать WebRTC-трафик.
Как решили: связались с поставщиком антивирусного ПО, чтобы внести Телемост в список исключений.
Эти и многие другие внесённые изменения уже повысили качество и стабильность конференций и увеличили количество сессий без сложностей до 99%, но мы продолжаем работать над улучшением нашего продукта. Мы не можем создать идеальные каналы связи для каждого пользователя или раздать всем последние модели гаджетов, но можем обеспечить максимально возможное качество видеоконференций даже в сложных условиях.
В ближайших планах:
Наша задача — создать продукт, в котором работа технологий станет абсолютно невидимой для пользователя. Вам не нужно думать, как работает Телемост, — вы просто используете его для общения.
Больше о том, как команда Телемоста следит за стабильностью звонков, читайте в телеграм-канале Яндекс 360 для бизнеса.