uchill/front_material/docs/LIVEKIT_NOISE_SUPPRESSION.md

4.1 KiB
Raw Permalink Blame History

Подавление шума в 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.52 ms на кадр (10 ms аудио)
CPU Выше, чем у встроенного в браузер
Задержка Несколько миллисекунд, обычно незаметна
Основной поток Не блокируется (Worker/WASM)

Итог по производительности:

  • Слабые устройства / много вкладок: возможна дополнительная нагрузка на CPU и память; на средних и сильных ПК обычно приемлемо.
  • Ноутбуки/мобильные: возможен больший расход батареи при длительном звонке с включённым Krisp.
  • Латентность: влияние минимально, т.к. обработка на клиенте и в воркере.

Рекомендация

  1. Сейчас: оставить включённые noiseSuppression и echoCancellation в audioCaptureDefaults — это уже даёт базовое подавление шума без влияния на производительность.
  2. Krisp: подключать только если:
    • используется LiveKit Cloud (или есть договорённость по Krisp для self-hosted);
    • нужен сильный шумоподавитель (фоновые разговоры, улица, офис);
    • готовы к увеличению потребления RAM/CPU и размера загружаемого кода при первом включении фильтра.
  3. Опционально: сделать Krisp включаемым по кнопке (как в примере с useKrispNoiseFilter), чтобы пользователь сам решал, когда использовать тяжёлый режим.

Если нужно, могу расписать пошаговое подключение Krisp в нашем проекте (установка пакета, хук, кнопка в UI и проверка поддержки LiveKit Cloud).