Портфолио
Web

Устранение эха в системе видеоконференций

Устранение эха при демонстрации экрана и трансляции системного звука в видеоконференциях на базе WebRTC с использованием Electron под Windows.

Задачи

  • Исследование причины появления эха при демонстрации экрана и системного звука
  • Поиск способов активации подавления эха (echoCancellation) в ограниченной реализации getUserMedia() Electron
  • Разработка патча для модификации исполняемого файла Electron без пересборки
  • Реализация утилиты на Node.js для автоматического применения патча
  • Интеграция решения в CI/CD пайплайн сборки продукта
Preview Устранение эха в системе видеоконференций

О проекте

Во время видеоконференций с демонстрацией экрана и системного звука в приложениях на базе Electron под Windows возникала критическая проблема: участники начинали слышать эхо собственного голоса. Это происходило потому, что Electron отключал модуль обработки звука (включая подавление эха) при screen sharing — в целях экономии ресурсов CPU.

Проблема была обнаружена в реализации функций внутри Electron: в момент захвата экрана автоматически отключалась обработка аудиопотока, несмотря на наличие соответствующего атрибута подавления эха в данном потоке.

Решение реализовано без пересборки Chromium/Electron и интегрировано в процесс сборки продукта.

Результаты

100%совместимость с актуальными версиями Electron
Безпересборки Electron — минимальные накладные расходы
Устраненоэхо при screen sharing с системным звуком
Интеграцияпатча в процесс сборки продукта
Снижениеошибок в коммуникации во время видеозвонков
Иллюстрация видеоконференции

Ограничения в реализации Electron

Electron отключал аудиообработку при демонстрации экрана, даже если явно был задан параметр echoCancellation. Причина — в исходниках Chromium модуль подавления эха отключается при типе "desktop".

Модификация без пересборки
Решение — создание бинарного патча, вносящего изменения напрямую в исполняемый файл Electron. Это позволило Избежать необходимости пересборки
Гибкая архитектура утилиты
Утилита построена на основе поиска сигнатуры, а не жёстких смещений, что позволяет адаптироваться под разные версии Electron без ручных правок.

Подробнее о реализации

Вместо пересборки Electron из исходников — ресурсоёмкой и нестабильной процедуры — было принято решение модифицировать уже собранный .exe файл Electron. Для этого была разработана специализированная Node.js-утилита, которая:

  • Ищет сигнатуру отключающего кода в бинарном файле
  • Вносит изменения, позволяющие активировать echoCancellation
  • Работает с несколькими версиями Electron благодаря абстракции по сигнатуре

Это позволило включить echoCancellation даже при screen sharing, что устранило источник эха и повысило качество связи без затрат на пересборку браузера.

Связанные сервисы

Service Аутсорсинг preview

Аутсорсинг

Реализация приложений, серверных и встраиваемых решений и веб-сайтов любой сложности. Используем передовые технологии и архитектурные подходы.

Подробнее
3D графика
Web
Масштабируемость

Обсудить проект

Опишите вашу задачу, мы проведём исследование и ответим вам как можно скорее.

С радостью проконсультируем вас любым из доступных способов.

Оставляя заявку, вы соглашаетесь с политикой обработки данных