4.1 KiB
4.1 KiB
Подавление шума в LiveKit
Можно ли сделать активное подавление лишних шумов?
Да. Есть два уровня:
1. Встроенное в браузер (уже включено)
В LiveKitRoomContent в options.audioCaptureDefaults задано:
- noiseSuppression: true — штатное подавление шума через WebRTC (getUserMedia).
- echoCancellation: true — подавление эха.
Плюсы: без доп. библиотек, почти не нагружает CPU, поддерживается всеми современными браузерами.
Минусы: качество среднее, в шумных условиях может быть недостаточно.
2. Krisp (AI-шумоподавление)
LiveKit поддерживает Krisp через пакет @livekit/krisp-noise-filter и хук useKrispNoiseFilter из @livekit/components-react/krisp.
Особенности:
- Работает только с LiveKit Cloud (не с self-hosted сервером без интеграции Krisp).
- Обработка на клиенте (в браузере), в отдельном потоке (Worker), аудио на внешние серверы не отправляется.
- Подгрузка пакета по требованию (dynamic import при включении фильтра).
Оценка по производительности (по данным Krisp / LiveKit):
| Параметр | Оценка |
|---|---|
| Размер пакета | ~12 MB |
| Память (RAM) | ~100 MB |
| Обработка кадра | ~1.5–2 ms на кадр (10 ms аудио) |
| CPU | Выше, чем у встроенного в браузер |
| Задержка | Несколько миллисекунд, обычно незаметна |
| Основной поток | Не блокируется (Worker/WASM) |
Итог по производительности:
- Слабые устройства / много вкладок: возможна дополнительная нагрузка на CPU и память; на средних и сильных ПК обычно приемлемо.
- Ноутбуки/мобильные: возможен больший расход батареи при длительном звонке с включённым Krisp.
- Латентность: влияние минимально, т.к. обработка на клиенте и в воркере.
Рекомендация
- Сейчас: оставить включённые noiseSuppression и echoCancellation в
audioCaptureDefaults— это уже даёт базовое подавление шума без влияния на производительность. - Krisp: подключать только если:
- используется LiveKit Cloud (или есть договорённость по Krisp для self-hosted);
- нужен сильный шумоподавитель (фоновые разговоры, улица, офис);
- готовы к увеличению потребления RAM/CPU и размера загружаемого кода при первом включении фильтра.
- Опционально: сделать Krisp включаемым по кнопке (как в примере с
useKrispNoiseFilter), чтобы пользователь сам решал, когда использовать тяжёлый режим.
Если нужно, могу расписать пошаговое подключение Krisp в нашем проекте (установка пакета, хук, кнопка в UI и проверка поддержки LiveKit Cloud).