1) паразитное эхо у звонящего с SIP телефона через SIP провайдера.
2) Легкое эхо при звонках через VOIP шлюз D-Link DVG-6004S
3) Трески, пропадания звука
4) Большие задержки.
5) Бывает еще эффект что когда говорит один человек второго не слышно.
В наличие SIP Телефоны Cisco SPA514G,SPA303,SPA301 Yealink W52P. Софтфоны X-Lite,QuteCom, Android SIP, CSipSimple
При звонке просто на Asterisk MOH, IVR или ECHO звук приемлемый но не идеал.
Самое худшее звучание когда звонят с мобильных операторов через SIP провайдера.
Подключал Yealink W52P напрямую к SIP провайдеру звук шикарный, значит проблема в моих настройках.
Использовал Астериски под FreeBSD 9.2 x64 из портов Asterisk 1.8.23.1, Debian 7.2.0 x64 Asterisk 1.8.33.1(Если не вру).
Сервер ставил как на Citrix XENServer 6.2 так и на желето Intel Atom/Pentium D всегда x64.
Решил попробовать Elastix 2.4.0 x32 Шикарно работает но он мне неудобен я уже привык к CLI и хотелось бы вылечить от глюков мою версию.
Сейчас есть подозрения на то что 64bit работает плохо а 32bit работает хорошо ставлю FreeBSD 9.2 i686.
Долгое время убил на настройки NAT\QoS JitterFilter\Кодеки перебивал всевозможные опции sip.conf. Даже настраивал по аналогии с Elastix в sip.conf, результат был один плохой звук.
Я уже грешу на диалплан хотя он работает то как раз нормально.
Может нужен какой либо тюнинг ядра ОС?
Вот мои основные конфиги, выкладываю основную выжимку а не все простыни.
Код: Выделить всё
;
; sip.conf
;
[general]
bindaddr = %LOCAL_IP%
bindport = 5060
localnet = %LOCAL_SUBNET%/%LOCAL_SUBMASK%
externip = %EXTER_IP%
nat = no
directmedia = no
qualify = yes
allowoverlap = yes
autoframing = no
context = from_general
allowguest = no
alwaysauthreject = yes
disallow = all
allow = alaw
dtmfmode = rfc2833
language = ru
highpriority = yes
register => %USERNAME%:%PASSWORD%@%PROV_HOST%:5060/%EXTERN_NUM%
[TRUNKNAME] ; SIP провайдер
type = friend
host = %PROV_HOST%
defaultuser = %USERNAME%
secret = %PASSWORD%
context = from_trunk
disallow = all
allow = alaw ; g729; поддерживает alaw, g729 и ulaw
insecure = invite
canreinvite = no
deny = 0.0.0.0/0
permit = %PROV_HOST%/32
nat = yes
dtmfmode = rfc2833
[dlink_fxo] ; D-Link DVG-6004S
type = friend
host = dynamic
context = from_dlink
secret = %PASSWORD%
dtmfmode = rfc2833
disallow = all
allow = alaw
deny = 0.0.0.0/0
permit = %GATE_IP%/32
nat = no
[fxo_1](dlink_fxo) ; Внутренний 680
[fxo_2](dlink_fxo) ; Внутренний 697
[fxo_3](dlink_fxo) ; Внутренний 650
[fxo_4](dlink_fxo) ; Внутренний 665
[default](!) ; Шаблон аккаунтов телефонов
secret = %VERY_STRONG_PASSWORD%
callgroup = 1
pickupgroup = 1
qualify = yes
nat = no
type = friend
host = dynamic
context = from_phones
disallow = all
allow = alaw
deny = 0.0.0.0/0
permit = %LOCAL_SUBNET%/22
dtmfmode = rfc2833
canreinvite = no
[external](!,default) ; Разрешает подключение откуда угодно
permit = 0.0.0.0/0.0.0.0
disallow = all
nat = yes
canreinvite = no
allow = alaw,ulaw,gsm
[0051](default) ; Локальная Трубка
fullname = %CALLER_NAME%
cid_number = %CALLER_NUM%
secret = %PASSWORD%
Код: Выделить всё
;
; extensions.conf
;
[general]
static = yes
writeprotect = yes
autofallthrough = no
[globals]
; +--------------------------------------------------------------+
; | Входящие звонки |
; +--------------------------------------------------------------+
[from_phones] ; Входящий звонок с внутреннего телефона
include = testing
include = to_phones
include = to_external
[from_dlink] ; Входящий звонок с VOIP Шлюза
exten = 680,1,NoOp() ; D-LINK DVG-6004S FXO_1
exten = 680,n,Macro(support-queue)
exten = 680,n,Hangup()
exten = 697,1,NoOp() ; D-LINK DVG-6004S FXO_2
exten = 697,n,Macro(support-queue)
exten = 697,n,Hangup()
exten = 650,1,NoOp() ; D-LINK DVG-6004S FXO_3
exten = 650,n,Macro(support-queue)
exten = 650,n,Hangup()
exten = 665,1,NoOp() ; D-LINK DVG-6004S FXO_4 - KIRALEX
exten = 665,n,Dial(SIP/0055&SIP/0059&SIP/0058)
exten = 665,n,Hangup()
[from_trunk] ; Входящий звонок с провайдера
include = to_phones
exten = %EXTERN_NUM%,1,NoOp()
exten = %EXTERN_NUM%,n,Goto(voicemenu_support,s,1)
exten = %EXTERN_NUM%,n,Hangup()
; +--------------------------------------------------------------+
; | Исходящие звонки |
; +--------------------------------------------------------------+
[to_phones] ; Исходящий звонок на внутренний телефон
exten = _00XX,1,NoOp() ; Набор на внутренние телефоны 4 цифры
exten = _00XX,n,Macro(monitor)
exten = _00XX,n,Dial(SIP/${EXTEN},120,Tt)
exten = _00XX,n,Hangup()
[to_external] ; Исходящий звонок на внешнюю линию
exten = _XXX,1,NoOp() ; Звонок на внутреннюю АТС, любой трехзначный номер
exten = _XXX,n,Macro(monitor)
exten = _XXX,n,Dial(SIP/dlink_fxo/${EXTEN},,Tt)
exten = _XXX,n,Hangup()
exten = _8XXXXXXXXXX,1,NoOp() ; Звонок начинает на 10-ти значный номер который начинается на 7 или 8
exten = _8XXXXXXXXXX,n,Macro(monitor)
exten = _8XXXXXXXXXX,n,Dial(SIP/TRUNKNAME/0${EXTEN})
exten = _8XXXXXXXXXX,n,Hangup()
exten = _+7XXXXXXXXXX,1,NoOp() ; Звонок начинает на 10-ти значный номер который начинается на 7 или 8
exten = _+7XXXXXXXXXX,n,Macro(monitor)
exten = _+7XXXXXXXXXX,n,Dial(SIP/TRUNKNAME/08${EXTEN:2})
exten = _+7XXXXXXXXXX,n,Hangup()
exten = _XXXXXXXXXX,1,NoOp() ; Звонок без указания 8-ки
exten = _XXXXXXXXXX,n,Macro(monitor)
exten = _XXXXXXXXXX,n,Dial(SIP/TRUNKNAME/08${EXTEN})
exten = _XXXXXXXXXX,n,Hangup()
exten = _XXXXXXX,1,NoOp() ; Звонок на городские 495 без указания 495
exten = _XXXXXXX,n,Macro(monitor)
exten = _XXXXXXX,n,Dial(SIP/TRUNKNAME/08495${EXTEN:1})
exten = _XXXXXXX,n,Hangup()
; +--------------------------------------------------------------+
; | Другое |
; +--------------------------------------------------------------+
[macro-monitor] ; Макрос запись звонков
exten = s,1,Set(MONITOR_FILE=/var/spool/asterisk/monitor/${UNIQUEID})
exten = s,n,Playback(beep)
exten = s,n,MixMonitor(${MONITOR_FILE}.wav,b)
[macro-support-queue]
exten = s,1,NoOp() ; Изза какогото бага не работают нормально пинальти поэтому такой костыль
exten = s,n,Queue(support_first,tn)
exten = s,n,Queue(support_second,t)
exten = s,n,Hangup()
; +---------------------------------------------------+
; | Для тестирования |
; +---------------------------------------------------+
[testing]
exten = 00,1,NoOp() ; (Press '#' to done) ; Эхотест
exten = 00,n,Answer()
exten = 00,n,Background(demo-echotest)
exten = 00,n,Echo()
exten = 00,n,Playback(demo-echodone)
exten = 01,1,NoOp() ; Музыка
exten = 01,n,Answer()
exten = 01,n,MusicOnHold(default)
exten = 01,n,Hangup()
exten = 02,1,NoOp() ; Очередь SUPPURT
exten = 02,n,Macro(monitor)
exten = 02,n,Macro(support-queue)
exten = 02,n,Hangup()
exten = 03,1,NoOp() ; Тестовый вызов на мой мобильный номер через шлюз
exten = 03,n,Dial(SIP/dlink_fxo/9%MY_PHONE_NUM%)
exten = 03,n,Hangup()
exten = 04,1,NoOp() ; Тестовый вызов на мой мобильный номер через SIP
exten = 04,n,Dial(SIP/TRUNKNAME/0%MY_PHONE_NUM%)
exten = 04,n,Hangup()
exten = 06,1,NoOp() ; Echo test Skype like
exten = 06,n,Set(MONITOR_FILE=/var/spool/asterisk/monitor/${UNIQUEID})
exten = 06,n,Answer()
exten = 06,n,Playback(demo-echotest)
exten = 06,n,Playback(dictate/record_mode)
exten = 06,n,Playback(digits/10)
exten = 06,n,Playback(seconds)
exten = 06,n,Playback(beep)
exten = 06,n,MixMonitor(${MONITOR_FILE}.alaw,a)
exten = 06,n,Wait(10)
exten = 06,n,StopMixMonitor()
exten = 06,n,Playback(beep)
exten = 06,n,Playback(dictate/playback_mode)
exten = 06,n,Playback(beep)
exten = 06,n,Playback(${MONITOR_FILE})
exten = 06,n,System(/bin/rm ${MONITOR_FILE}.alaw)
exten = 06,n,Hangup()
exten = 07,1,NoOp()
exten = 07,n,Goto(voicemenu_support,s,1)
exten = 07,n,Hangup()
; Обработка ошибок
exten = i,1,Playback(pbx-invalid)
exten = i,n,Goto(voicemenu,s,Start)
exten = t,1,Playback(vm-goodbye)
exten = t,n,Hangup()
[voicemenu_support] ; Голосовое меню поддержки
include = to_phones
exten = s,1,NoOp()
exten = s,n,Answer()
exten = s,n,Set(TIMEOUT(digit)=2) ; Устанавливаем таймаут набора цифр
exten = s,n,Playback(calls-are-recorded)
exten = s,n,Macro(monitor)
exten = s,n,Background(dial-exten-tone) ; Если вы знаете внутренний номер обонента наберите его номер в тоновом режиме
exten = s,n(Start),NoOp()
exten = s,n,WaitExten(5)
exten = s,n,Playback(beep)
exten = s,n,Macro(support-queue)
exten = s,n,Hangup()
exten = i,1,Wait(1)
exten = i,n,Playback(pbx-invalid)
exten = i,n,Goto(s,Start)
exten = i,n,Hangup()
; EOF
Код: Выделить всё
;
; RTP Configuration
;
[general]
rtpstart = 10100
rtpend = 10200
; EOF
Код: Выделить всё
;
; modules.conf
;
[modules]
autoload = no
load => app_dial.so
load => app_echo.so
load => app_macro.so
load => app_mixmonitor.so
load => app_playback.so
load => app_queue.so
load => app_softhangup.so
load => app_verbose.so
load => app_setcallerid.so
load => app_system.so
load => func_callerid.so
load => res_musiconhold.so
load => res_fax.so
load => res_fax_spandsp.so
load => res_timing_pthread.so
load => pbx_config.so
load => chan_sip.so
;load => chan_iax2.so
load => res_rtp_asterisk.so
load => format_gsm.so
load => format_wav.so
load => format_wav_gsm.so
load => format_pcm.so
load => codec_gsm.so
load => codec_alaw.so
load => codec_ulaw.so
load => func_cdr.so
load => cdr_mysql.so
; EOF
Код: Выделить всё
;
; asterisk.conf
;
[files]
astctlpermissions => 700
astctlowner => asterisk
astctlgroup => asterisk
astctl => /var/run/asterisk/asterisk.ctl
[directories](!)
astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /usr/share/asterisk
astdbdir => /var/db/asterisk
astkeydir => /usr/share/asterisk
astdatadir => /usr/share/asterisk
astagidir => /usr/share/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk
[options]
documentation_language = ru_RU
internal_timing = yes
[compat]
pbx_realtime = 1.6
res_agi = 1.6
app_set = 1.6
; EOF