uchill/front_material/docs/LIVEKIT_NOISE_SUPPRESSION.md

58 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Подавление шума в 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).