VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Отсутствие / задержка записи голоса с MixMonitor + PJSIP

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
karlsonru
Сообщения: 1
Зарегистрирован: 15 авг 2025, 23:28

Отсутствие / задержка записи голоса с MixMonitor + PJSIP

Сообщение karlsonru »

Здравствуйте, коллеги!

Столкнулся со странностями в работе АТС при переходе на MixMonitor, прошу совета куда копать дальше.

Проблема:
На аудиозаписи разговора отсутствует исходящий голосовой поток или он появляется не сразу. Например, аудиозапись разговора идёт 15 минут. Исходящий голос может появиться в начале и, например, с 7-ой минуты. А с 1 по 6 - тишина. При этом раз абонент не положил трубку а разговаривал (да и судя по его репликам) он слышал говорящего, диалог поддерживал.

Конфигурация:
Asterisk v22 запускается в контейнере на Ubuntu 24 (аналогичное поведение было и при Asterisk v20 на Ubuntu 22). Астериск устанавливал с репозитория пакетов через apt.
По стеку используется PJSIP, для записей MixMonitor

call flow звонка на псевокоде следующий:

; вызов внешнему провайдеру связи
[provider]
exten = _XXX!,1.NoOp()
; ....
same = n,Dial(PJSIP/${EXTEN}@provider,,U(preprocessing,s,1,...)

; после ответа стороны Б - выполняется U
[preprocessing]
; включается запись
same = n,GoSub(recording,s,1(${recfile}))
; вызов отправляется на другую АТС - либо Answer + Background с записью, либо какой-то предварительный роботизированный диалог
same = n,Dial(PJSIP/${preprocessing}@robots,,gb(...))
same = n,Return()

[recording]
exten = s,1,NoOp()
same = n,Set(recfile=${ARG1})
same = n,GotoIf($["${recfile}" = "disabled"]?skip_monitor)
same = n,MixMonitor(,r(/var/spool/asterisk/monitor/${recfile}-in.alaw)t(/var/spool/asterisk/monitor/${recfile}-out.alaw))
same = n(skip_monitor),Return()

; соединение с оператором, сюда вызов приходит по AMI если есть ответ на вызов provider & успешно отработал preprocessing
; он соединяет отвеченный канал из provider (абонента Б) с оператором
[connect]
exten = s,1,NoOp()
; ...
same = n,Dial(PJSIP/${OPERATOR},${OPERATOR_TIMEOUT})


direct_media установлен no (к внешнему провайдеру, к роботизированному приветствую, к оператору)
Потери RTP отмёл так как судя по записи стороны Б - диалог поддерживал, слышал хорошо.
Грешил на нагрузку на АТС (держится ~ 1000 - 1500 вызовов постоянно в часы пик) / хост-машине (расположено несколько контейнерных АТС) - разгрузил хост-машину. Ошибка всё равно сохранилась.

Роботизированное приветствие на записи есть, а вот голос оператора появляется не сразу. И это возникает не всегда (на каких то записях есть сразу, на каких-то нет).

При этом на Asterisk v16.28 + PJSIP + Monitor + Debian 10 с той же нагрузкой и процедурой звонка - всё хорошо, потерь в записях нет.

Включал дебаг + логи на АТС (40 гб за ~ час) - по логу ошибки не увидел или не понял. Всё запускается и работает.
Читал что MixMonitor построен на хуках, может быть не успевает перестроиться и подцепить в запись появляющийся новый канал с вызовом оператора + нагрузка?

Есть ещё несколько АТС на этом стеке, пока (?) не жаловались, там нагрузка меньше.

Из идей осталось только попробовать самостоятельную сборку Астериска (хотел избежать в пользу удобства обновлений через apt).

Возможно кто сталкивался с подобным, знаете в чём может быть проблема, уже как-то решали?
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH