Не ловит BUSY когда идет поток
Сообщений: 11
|
Не ловит BUSY когда идет поток
Приветствую !
Суть главной из моих детских проблем проблемы в следующем:
Звоню на Zap/1 - астериском берется трубка, идут вызовы на софтфоны, в фоне играется мох.
Затем просто кладу трубку с которой звонил.
А астериск Zap/1 не кладет - просто не определяет занято.
Однако во время разговоров конец ловится очень хорошо.
Есть предположение что определения сигнала зянято написано криво (не учтен шум в паузах) - когда снимаю трубку на параллельном аппарате - слышится шум в паузах (или проигрываемая музыка)
Спасибо!
# cat /etc/asterisk/zapata.conf | grep -v "^\(\;\|$\)"
language=en
context=city-in
signalling=fxs_ks
usedistinctiveringdetection=no
hidecallerid=no
callwaiting=yes
usecallingpres=no
callwaitingcallerid=no
threewaycalling=no
transfer=no
canpark=no
cancallforward=no
callreturn=no
echocancel=yes
echocancelwhenbridged=yes
rxgain=1.0
txgain=3.0
group=1
callgroup=1
pickupgroup=1
immediate=no
busydetect=yes
busycount=4
busypattern=350,350 ; Специально мерил - точность 1 мс
callprogress=no
progzone=us
pulsedial=yes
channel => 1
|
Сообщений: 11
|
Re: Не ловит BUSY когда идет поток
Приветствую !
Суть главной из моих детских проблем проблемы в следующем:
Звоню на Zap/1 (X100P (модем на чипе Motorola)) - астериском берется трубка, идут вызовы на софтфоны, в фоне играется мох.
Затем просто кладу трубку с которой звонил.
А астериск Zap/1 не кладет - просто не определяет занято.
Однако во время разговоров конец ловится очень хорошо.
Есть предположение что определения сигнала зянято написано криво (не учтен шум в паузах) - когда снимаю трубку на параллельном аппарате - слышится шум в паузах (или проигрываемая музыка)
Спасибо!
cat /etc/asterisk/zapata.conf:
language=en
context=city-in
signalling=fxs_ks
usedistinctiveringdetection=no
hidecallerid=no
callwaiting=yes
usecallingpres=no
callwaitingcallerid=no
threewaycalling=no
transfer=no
canpark=no
cancallforward=no
callreturn=no
echocancel=yes
echocancelwhenbridged=yes
rxgain=1.0
txgain=3.0
group=1
callgroup=1
pickupgroup=1
immediate=no
busydetect=yes
busycount=4
busypattern=350,350 ; Специально мерил - точность 1 мс
callprogress=no
progzone=us
pulsedial=yes
channel => 1
|
Сообщений: 11
|
Re: Не ловит BUSY когда идет поток
Попробовал с
BUSYDETECT_TONEONLY
и с
BUSYDETECT_COMPARE_TONE_AND_SILENCE
. Стало еще хуже определять.
Может быть есть код для зашумленных линий ?
Кстати, заметил что echocancel=no получше определяет hangup.
|
Сообщений: 11
|
Re: Не ловит BUSY когда идет поток
Все.... разобрался... (Версия 1.2.13, простите, что не сказал раньше)
Не думал что алгоритм определения BUSY в Астериске написан настолько бронелобо (хотя, для большинства ситуаций и так сойдет, правда ?)
Может взять алгоритм из dtmf_detect (Goertzel, он там даже есть Athlon заточеный), за проанализировать частоты дополнительно. Частоту BUSYTONE брать из Asterisk. С неожиданными hangups можно будет попрощаться, а определение занято на зашуьленных линиях железное :)
Неужели никто не делал ?
Asterisk uses the Goertzel algorithm to detect pre-determined frequencies which is always the case with DTMF tones. The Goertzel algorithm is optimized to search for specific frequencies. You could modify the tables which list the frequencies looked for by asterisk's DTMF detection code. Take a look at the asterisk source module dsp.c. This mod sounds easier than it is as you will need to make sure that you trap the tones you are looking for in all cases, and then pass control to you own code to do whatever processing you desire at the point of detection.
The Goertzel algorithm is fast if there are a limited number of frequencies being targeted and these frequencies are known. If you are looking for unknown frequencies you will need to resort to a different algorithm, most likely some variant of a Fast Fourier Transform.
|
Сообщений: 11
|
Re: Не ловит BUSY когда идет поток
Инетресная ссылка по теме: Resolving hangup detection problems with fxo cards.
Какраз описана моя проблема:
www.asteriskguru.com/tutorials/resolving_hangup_detection_problems_fxo_tdm_voicemail.html
По поводу indications.conf - насколько лично мне известно, эти сведения используются только в подсистеме callprogress - и она, имхо, корявая, что я бы не рискнул ее использровать на ответственных задачах. Хотя решение это очень хитроумное, респект тому, кто это делает.
Главное, я почти написал свою функцию на основе Goertzel-анализа. Автоматически подстраивается под уровень сигнала. Можно регулировать: чувствительность (по типу busycount), длительность tone/silence (мс), и даже частоту сигналов (Гц). Надеюсь, определять будет железно на любых линиях.
|
Сообщений: 11
|
Re: Не ловит BUSY когда идет поток
Ну вот и все. Алгоритм работает. Осталось привести в порядок код и выложить патчи для 1.2.14.
Ловит hangup когда абоненту идет милливат, мох, или просто радио.
Ловит правда не сразу, где-то 10-15 гудков, т.к. пока не сразу подстраивается под уровень сигнала (решаемо).
Ложных срабатываний не заметил - на методичный DMTF ( с мобильника) не реагирует. По отладочному графику виден хороший запас.
Доволен как слон.
|
Сообщений: 11
|
Re: Не ловит BUSY когда идет поток
Поправочка:
Ловит hangup ДАЖЕ когда абоненту идет милливат, мох, или просто радио.
|
Сообщений: 27
|
Re: Не ловит BUSY когда идет поток
А можно поделиться данной замечательной функцией? Ато у самого проблемы с детектом busy и answer, штатные функции работают крайне плохо :-(
Есличто мыло: elman _злаясобака_ protechtele.com
|
Сообщений: 177
|
Re: Не ловит BUSY когда идет поток
А еще правильнее выложить на bugs.digium.com
|
Сообщений: 27
|
Re: Не ловит BUSY когда идет поток
Поддерживаю! :-)
Вообще как я после разборок выяснил busydetect/busycount/busypattern таки работает, по крайней мере в моем случае, а вот идеологически гораздо более правильная callprogress похоже неработает вообще :-( По крайней мере бызи не ловит и ансвер дает по первому гудку КПВ хотя все тоны в zonedata.c прописаны
|
|