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

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

Ограничения в реализации Electron
Electron отключал аудиообработку при демонстрации экрана, даже если явно был задан параметр echoCancellation. Причина — в исходниках Chromium модуль подавления эха отключается при типе "desktop".
- Модификация без пересборки
- Решение — создание бинарного патча, вносящего изменения напрямую в исполняемый файл Electron. Это позволило Избежать необходимости пересборки
- Гибкая архитектура утилиты
- Утилита построена на основе поиска сигнатуры, а не жёстких смещений, что позволяет адаптироваться под разные версии Electron без ручных правок.
Подробнее о реализации
Вместо пересборки Electron из исходников — ресурсоёмкой и нестабильной процедуры —
было принято решение модифицировать уже собранный .exe
файл Electron.
Для этого была разработана специализированная Node.js-утилита, которая:
- Ищет сигнатуру отключающего кода в бинарном файле
- Вносит изменения, позволяющие активировать
echoCancellation
- Работает с несколькими версиями Electron благодаря абстракции по сигнатуре
Это позволило включить echoCancellation даже при screen sharing, что устранило источник эха и повысило качество связи без затрат на пересборку браузера.
Связанные сервисы
Обсудить проект
Опишите вашу задачу, мы проведём исследование и ответим вам как можно скорее.