Установка
Требования
- Docker. Подробная инструкция по установке
- Docker Compose. Подробная инструкция по установке
Установить NNRTP можно из Docker репозитория или скачав файлы Docker образов вручную. Скачать необходимые образы контейнеров можно на странице загрузки: Downloads
Быстрый старт
Максимально простая настройка и развертывание. В контейнере уже есть Coordinator, Denoiser и SIP Proxy (Kamailio). Все что нужно - установить docker, docker-compose, создать файл docker-compose.yml с содержимым:
rnn_model - используемая модель нейросети (см.ниже).
internal_ip - адрес сервера во внутренней сети. Например 192.168.1.167.
external_ip - адрес сервера во внешней сети, обычно это адрес в интернете, выданный Вам вашим провайдером.
Иногда его называют NAT адресом.
В большинстве случаев его нужно оставить таким же как и internal_ip, ваш SIP провайдер отлично с этим справится.
Запустить контейнер:
Прозрачный SIP Proxy с шумоподавлением будет работать на 5061 порту. Вам нужно только указать этот сервер в качестве SIP-Proxy в настройках SIP-клиента. Например: 192.168.1.167:5061
Coordinator
Обратите внимание что Координатор в системе может быть только один. Схема отказоустойчивости с активным и пассивными координаторами не рекомендована, т.к. у пассивных экземпляров отсутствует информация о потоках. При переключении трафика на новый координатор все старые звуковые потоки будут прерваны.
Подробнее о конфигурации и значении параметров можно прочитать здесь
Denoiser
Denoiser хорошо масштабируется. Кол-во работающих образов может быть любым.
Подробнее о конфигурации и значении параметров можно прочитать здесь
Настройка NNRTP
Denoiser и Coordinator настраиваются с помощью переменных окружения которые задаются при старте контейнера.
Общий принцип работы
Denoiser и Coordinator могут быть размещены в облаке или на выделенном сервере вместе с корпоративным SIP Сервером (не забудьте изменить порт для Координатора).
Кол-во работающих образов Denoiser может быть любым, в то время как процесс/образ Coordinator может быть только один (будет исправлено в версии 1.3. «Statefull failover»).
Coordinator является простым SIP прокси, на нем нельзя зарегистрироваться/авторизоваться. Для этого в сети должен быть SIP Server/Proxy с возможностью регистрации пользователей (у Вас или у Вашего SIP провайдера).
Настройка Coordinator
Пример настройки:Параметр | Назначение |
---|---|
intranet=адрес | Адрес или маска сети, определяет адреса внутренних клиентов/серверов от которых будут приходить пакеты (src_ip). Определяет сторону A в настройках шумоподавления.
Необходимо всегда определять этот параметр явно, иначе это приведет к невозможности обмена SIP сообщениями.
|
denoise_stream=параметр | Направление трафика, которое будет очищаться от шумов. Изменять этот параметр имеет смысл если у Вас ограниченная лицензия и Вы хотите максимально эффективно распределить лицензии только на очистку голосового трафика, например, от оператора к клиенту. параметр:
|
internal_ip=адрес | Aдрес сервера, на котором запущен контейнер с NNRT Coordinator, во внутренней сети. Например 192.168.1.167 |
external_ip=адрес | Aдрес сервера во внешней сети, обычно это адрес в интернете, выданный Вам вашим провайдером. Иногда его называют NAT адресом. В большинстве случаев его нужно оставить таким же как и internal_ip, ваш SIP провайдер отлично с этим справится. |
license_key=key | Строка лицензионного ключа. Без кавычек. |
network_mode: "host" – является обязательной настройкой, т.к. Координатор использует 30 000 портов для пропуска голосового трафика. При другом значении могут возникать ошибки iptables.
Координатор принимает SIP пакет, просматривает его содержимое, и, если требуется – вносит необходимые изменения. Если пакет имеет неизвестный формат или в нем не нужно производить изменений – пакет прозрачно отправляется дальше.
В случае если SIP пакет нужно изменить – в пакете отбрасываются все кодеки кроме [поддерживаемых], адрес RTP трафика изменяется на адрес координатора, порт RTP трафика выбирается произвольный, добавляется поле Via.
Настройка Denoiser
Пример настройки:Параметр | Назначение |
---|---|
rnn_model=имя NN | Название модели нейросети, используемой для очистки голосового трафика от шумов.
имя NN:
Специфические модели хорошо подходят для шумоподавления на конкретном языке, речь на других языках тоже может быть успешно обработана, но иногда возникают «артефакты» шумоподавления (произношение некоторых звуков может быть распознано как шум) model_multilanguage подходит для большинства основных европейских языков, но качество шумоподавления у нее немного хуже чем у специфических моделей. |
server_host=IPv4 | Определяет адрес и порт координатора, сервиса k8s, или NAT за которым находится координатор. Между координатором и Denoiser может находится NAT/dNAT/sNAT, принцип работы таков, что трансляция адресов не влияет на их взаимодействие. |
server_port=порт |
Настройка SIP Proxy
Общие принципы настройки SIP Proxy
При настройке корпоративного SIP Сервера/Proxy следует руководствоваться следующими принципами:
- Нужно настроить новый SIP Trunk с Координатором, использовав его IP адрес и порт в качестве адреса назначения SIP Trunk.
- Настроить проверку доступности SIP Trunk. Подробнее об этом можно [почитать здесь]
- Сделать новый SIP Trunk основным каналом телефонии, а старый запасным.
Эти настройки должны обеспечить хорошую отказоустойчивость и работоспособность.
Пример настройки шумоподавления для SIP Softphone + SIP Provider
В качестве SIP Phone будем использовать SoftPhone Microsip, провайдер – novofon.com
Способ подключения к серверу SIP Provider’а – регистрация с использованием логина и пароля.
SoftPhone и провайдер телефонии могут быть любыми. Цель данного примера настройки - показать общие принципы работы, возможности и ограничения NNRTP.
Требования:
- Статический IP-адрес для SoftPhone.
- Статический IP-адрес для сервера с NNTRP.
- Статический «белый» (публичный) IP-адрес для подключения к интернету.
Установка и настройка NNRTP на сервере Ubuntu 20.04 (192.168.1.167)
Нужно установить необходимые пакеты на сервер:
Создадим 2 файла docker-compose.coordinator.yml и docker-compose.denoiser.yml со следующим содержимым:
docker-compose.coordinator.yml:
Основные настройки:
192.168.1.0/24 - внутренние адреса сети, с которых мы будем принимать SIP пакееты.192.168.1.167 – адрес сервера NNRTP с координатором, на который SoftPhone будет отправлять SIP-пакеты. 100.64.56.12 – адрес нашего роутера в интернете. Это необходимо для преодоления NAT. На этот адрес сервер SIP Provider’а будет слать SIP пакеты, затем роутер, перешлет их нашему серверу NNRTP (192.168.1.167). Этот же адрес будет установлен для получения RTP пакетов от SIP Provider’а. Вам не нужно заботиться о «пробрасывании» портов для RTP трафика – NNRTP использует симметричные порты для передачи голосового трафика, поэтому роутер автоматически создаст трансляции для входящего трафика от SIP Provider’а.
NNRTP будет прозрачно пересылать все пакеты от SoftPhone к SIP Provider’у и если потребуется он будет вносить правки в SIP пакеты обеспечивающие прохождение SIP и RTP трафика через NNRTP. Вы можете использовать разные способы подключения к вашему SIP Provider: с регистрацией или со статическим транком.
Остальные настройки:
- denoise_stream=bothboth – включает шумоподавление в обоих направлениях – от SoftPhone к серверу SIP Provider’а и от SIP Provider’а к SoftPhone
docker-compose.denoiser.yml:
Т.к. Denoiser у нас располагается на том же сервере что и Координатор то адрес server_host будет 127.0.0.1. 1102 порт по умолчанию для подключения Denoiser к Координатору. model_ru – будем использовать модель наиболее подходящую для русской речи.
Нет необходимости запускать на одном сервере несколько копий Denoiser (кроме случая когда контейнеру доступно ограниченное кол-во процессоров), т.к. при старте он определит кол-во доступных процессоров и создаст по одному потоку шумоподавления на каждый процессор.
Настройка SoftPhone
В качестве SoftPhone будем использовать microsip.Откройте настройки аккаунта (Settings – Edit Account)
Укажите ваши учетные данные и адрес SIP сервера вашего SIP Provider’а. В качестве SIP Proxy укажите адрес сервера NNRTP, а так же порт на котором работает координатор – 5060.
У вас должно получиться как на картинке ниже:
Подтвердите настройки нажав кнопку «Save».
После этого SoftPhone должен зарегистрироваться на сервере SIP Provider’а.
Сделайте ваш первый тестовый звонок с шумоподавлением :) .
Отказоустойчивость NNRTP
Будет исправлено в версии 1.1]
Сходимость компонентов
Denoiser’ы и Coordinator обмениваются друг с другом пакетами, определяющими их состояние, каждые 100 мс.
Denoiser регистрируется Координатором при получении первого пакета от него.
В случае если Coordinator не получил 5 пакетов (500 мс) от Denoiser, то Denoiser считается отключившимся и все RTP потоки переключаются на оставшиеся рабочие Denoiser.
В случае отключения всех Denoiser от Координатора, Координатор начинает прозрачно передавать RTP непосредственному получателю без изменений (без шумоподавления).
В случае если подключится хотя бы один Denoiser – RTP трафик будет перенаправлен на него и шумоподавление продолжится для текущих звонков.
В случае если координатор выйдет из строя – передача SIP и RTP пакетов будет прервана (будет исправлено в версии 1.3. «Statefull failover» ), абоненты перестанут слышать друг друга.
Отказоустойчивость SIP "Trunk"
На корпоративном SIP Server необходимо настроить проверку доступности основного провайдера телефонии через Координатор. Для этого нужно настроить отправку SIP OPTIONS через Координатор.
Координатор пересылает все пакеты OPTIONS следующему пиру, а все ответы перешлет обратно SIP Server. Таким образом будет проверена работоспособность и Координатора, и сетевая связность Координатора с провайдером телефонии (SIP Provider).
В случае выхода из строя Координатора – статус SIP Trunk на корпоративном SIP Сервере изменится на Down и новые звонки должны пойти по запасному пути.