Проблемы со звуком

Статья о двух разных бедах: звука нет вовсе и звук есть, но плохой. Причины у них разные, поэтому и разбирать их нужно по-разному.

Почему звонок соединяется, а звука нет Соединение устанавливает сигнализация — протокол SIP. Звук передаётся отдельным потоком RTP-пакетов. Сигнализация может отработать безупречно, а медиа-поток при этом не дойти: потеряться в сети, упереться в NAT или в брандмауэр. Поэтому «гудки идут, а разговора нет» — нормальная и частая картина.

Звука нет совсем

Сначала определите направление

Откройте Офис → Статистика АТС и прослушайте запись разговора. Она сразу указывает на участок:

  • Слышно оператора, не слышно внешнего абонента — проблема между провайдером телефонии и сервером Октелл. Проверяйте входящий трафик на сервере.
  • Слышно внешнего абонента, не слышно оператора — проблема между телефоном оператора и сервером. Проверяйте исходящий трафик у оператора.
  • Слышно обоих, но оператор жалуется, что плохо слышит — проблема во входящем трафике у оператора.

Медиа-трафик не поступает на сервер

  1. Проверьте, что порт 5060 на сетевом интерфейсе слушает процесс oktell.HALRemoteApp.exe:
    netstat -anopb udp
  2. Убедитесь, что нужные порты проброшены на NAT-устройстве — см. статью о настройке сервера за NAT.
  3. Проверьте брандмауэр. Панель управления → Брандмауэр Windows → «Разрешить запуск программы или компонента» → «Разрешить другую программу» → «Обзор», и добавьте оба процесса:
    \oktell\server\oktell.ServerService.exe
    \oktell\server\oktell.HALRemoteApp.exe
  4. Перезагрузите сервер Октелл.
Внимание Отключать защиту системы для проверки не рекомендуется — добавляйте процессы в исключения.

Провайдер не отправляет медиа-трафик

Проверяется сниффером Wireshark. Если трафика от провайдера нет, возможно, коммутация не установилась на уровне сигнализации: посмотрите в логе trn (каталог \Server\Log\Hardware\SIP\) наличие SIP-пакета 200 OK по этой коммутации.

Трафик дошёл до сервера, но не дошёл до оператора

  • Если оператор работает в клиентском приложении — проверьте в настройках локальных устройств, выбраны ли действующие динамики и микрофон.
  • Если оператор в другой локальной сети за NAT, в удалённом офисе, — порты там пробрасывать не нужно. Проверьте настройки роутера, например установленный DMZ.
  • В настройках IP-телефона или софтфона размер звукового пакета (packet time) должен быть 20 мс.

Конфигурация сервера

Откройте Администрирование → Параметры аппаратуры → Настройки потока:

  • Адрес назначения для RTP-трафика — меняйте, если абонент не слышит оператора, то есть звук идёт от Октелл наружу.
  • Размер звукового пакета для кодека G.711 — 20 мс.
  • Разрешить изменять параметры связи во время коммутации — рекомендуется «Нет». Часть шлюзов и провайдеров плохо переносит инструкции REINVITE от сервера. При запрете Октелл включает транскодинг у себя, иначе пытается заставить внешний шлюз сменить кодек.
Внимание Параметр ptime, равный 20 мс, должен быть выставлен и на всех телефонах сотрудников, а не только на сервере.

На время поиска неисправности имеет смысл установить единый кодек G.711a или G.711u во всех шлюзах и телефонах в карте сети — это убирает из уравнения согласование кодеков.

Неочевидная причина Бывает, что исходящий трафик от Октелл пропадает после обновлений Windows: звонящий не слышит ни оператора, ни голосового меню. Попробуйте удалить последние установленные обновления. Для диагностики используйте ping и tracert.

Диагностика сравнением

Быстрый способ понять, чья сторона виновата, — подменить одно звено:

  • Подозрение на провайдера. Подключите другого SIP-провайдера и позвоните. Звук появился — дело в провайдере или в настройке соединения с ним.
  • Проверка учётных данных. Подключите любой софтфон с теми же учётными данными, что и на сервере. Линии в Администрирование → Карта сети предварительно отключите. Позвоните на софтфон: если звук есть, проблема в настройке Октелл, если нет — у провайдера.
  • Подозрение на телефон оператора. Подключите другой IP-телефон или софтфон. Звук появился — дело в телефоне.

Звук плохой

В подавляющем большинстве случаев плохое качество — это сетевая проблема. Любое искажение звука сводится либо к потере пакетов, либо к задержке.

Типичные причины

  1. Интернет-канал. Нагрузка, плавающий пинг, нестабильность провайдера. Решения: выделенный канал, смена провайдера или переход на кодек с меньшим размером пакета — G.729 вместо G.711.
  2. NAT-устройство. Роутер или маршрутизатор начал сбоить — перезагрузите его.
  3. Нагрузка на сервер. Идёт резервное копирование или на той же машине работает что-то ещё, например сервер 1С. Проверьте загрузку процессора и памяти в диспетчере задач.
  4. Брандмауэр или антивирус счёл поток пакетов подозрительным и придержал его. Проверьте настройки.
  5. Виртуальная машина. Используйте сетевой интерфейс Virtio, а не эмуляцию Intel. Настраивается в интерфейсе KVM.

Канальный лог — главный инструмент

Октелл пишет статистику по каждой коммутации в канальные логи:

Server\Log\Hardware\Sip\[дата]\[номер канала].log

Например: Server\Log\Hardware\Sip\2014-01-30\13003.log

В конце каждой коммутации приводится статистика RTP-сессии. Значения читаются так:

ПоказательЧто означает
IN / OUTВходящий трафик от устройства на сервер и исходящий от сервера к устройству
packets received, bytes receivedКоличество и объём принятых пакетов
out of orderПакеты, пришедшие вне очереди. Много — проблемы в сети
invalidНеверные пакеты
lostПотерянные пакеты. Много — проблемы в сети
delaysКоличество задержек за коммутацию. Слышится как «заикание» голоса
max delayМаксимальная задержка. Чем больше, тем сильнее заикание
average delaysСредний период поступления RTP-пакетов. Должен совпадать с размером звукового пакета кодека — для G.711 это 20 мс

Логи ведутся и по внешним, и по внутренним линиям, и это сразу локализует проблему: неполадки на внешней линии — между провайдером и сервером, на внутренней — между сервером и телефоном или гарнитурой оператора.

Чем открывать логи Notepad++ быстро открывает большие файлы и умеет подсвечивать все вхождения искомого текста — незаменимо при отслеживании пакетов по call-id или методов по номерам линий. Far держит файл открытым и обновляет его на лету, не загружая целиком в память, — удобно для наблюдения в реальном времени и для очень крупных файлов.

Wireshark

Запустите захват до звонка, выбрав нужный интерфейс и указав в фильтре захвата udp. Совершите тестовый звонок и остановите захват. Дальше пользуйтесь фильтром отображения:

rtp                        — все RTP-пакеты
ip.addr==192.168.0.81      — все пакеты с участием адреса
ip.src==192.168.0.81       — пакеты, отправленные с адреса
ip.dst==192.168.0.81       — пакеты, адресованные на адрес

Быстрее нагляднее другой путь: меню Telephony → VoIP Calls, выбрать коммутацию и нажать Flow. Две стрелки RTP означают, что трафик шёл в обе стороны; одна — сразу показывает, в какую сторону его не было.

Для оценки потерь: Telephony → RTP → Show all streams. В столбце Lost видны потери, до 5% считаются допустимыми. Столбцы Src IP addr и Dst IP addr покажут, в какую сторону идут потери.

Если операторы работают с гарнитурой, Wireshark имеет смысл поставить на рабочее место сотрудника и посмотреть RTP-трафик уже там.

Проверка канала между двумя точками

  • NetTester ставится на два компьютера, между которыми нужно проверить канал, и настраивается друг на друга. Можно оставить на неделю и потом посмотреть, сколько пакетов потерялось в каждую сторону, где были задержки, сколько было серий потерь и какой длины. Запускать сначала на сервере, потом на клиенте — иначе часть пакетов потеряется из-за асинхронного старта.
  • WinMTR трассирует маршрут до точки назначения, показывая по каждому узлу процент потерь и задержки. Перед запуском задайте в Options интервал отправки 0.1 секунды.

Эхо

Эхо стоит особняком: источников у него два, и природа у них разная.

Акустическое эхо

Возникает у удалённого абонента: он не держит трубку у уха, пользуется громкой связью или у него неудачно спроектирована трубка. Микрофон улавливает звук из динамика и отправляет его обратно в линию.

Что делать: уменьшить громкость исходящего голосового канала, если оборудование это позволяет.

Гибридное эхо

Возникает в точках перехода с цифровых транков на аналоговые двухпроводные линии. В самом Октелл звук передаётся в цифровом виде и не модифицируется, поэтому в сервере такое эхо появиться не может — ищите его на шлюзах.

Борются с ним эхокомпенсатором, который на шлюзах обычно уже включён. Важная особенность: эхокомпенсатор работает корректно только при небольшой задержке — примерно от 30 до 200 мс. При значительных задержках он не только бесполезен, но и добавляет собственную задержку.

Главный вывод Прежде чем менять настройки Октелл, убедитесь, что проблема не в сети. Потери и задержки пакетов дают ровно ту же картину, что и неверная конфигурация, но лечатся совсем другими средствами.