58 lines
4.1 KiB
Markdown
58 lines
4.1 KiB
Markdown
# Подавление шума в 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.
|
||
- **Латентность:** влияние минимально, т.к. обработка на клиенте и в воркере.
|
||
|
||
---
|
||
|
||
## Рекомендация
|
||
|
||
1. **Сейчас:** оставить включённые **noiseSuppression** и **echoCancellation** в `audioCaptureDefaults` — это уже даёт базовое подавление шума без влияния на производительность.
|
||
2. **Krisp:** подключать только если:
|
||
- используется **LiveKit Cloud** (или есть договорённость по Krisp для self-hosted);
|
||
- нужен сильный шумоподавитель (фоновые разговоры, улица, офис);
|
||
- готовы к увеличению потребления RAM/CPU и размера загружаемого кода при первом включении фильтра.
|
||
3. **Опционально:** сделать Krisp **включаемым по кнопке** (как в примере с `useKrispNoiseFilter`), чтобы пользователь сам решал, когда использовать тяжёлый режим.
|
||
|
||
Если нужно, могу расписать пошаговое подключение Krisp в нашем проекте (установка пакета, хук, кнопка в UI и проверка поддержки LiveKit Cloud).
|