2016-01-01 3 views
1

Извините, если мой вопрос не имеет для вас никакого смысла. Я новичок в звездочке, и то, что я пытаюсь сделать, это написать план набора, который может подключить 2 конечных точки софт-телефона (конечные точки VoIP-клиента), а затем попытаться обнаружить молчание в текущем вызове. Я могу сделать через вызов, используя следующий план набораобнаружение тишины звездочки при подключенном вызове

exten = 100, 1, Answer() 
same = 100, n, Monitor() 
same = 100, n, Dial(SIP/client1,15) 

, когда я набрал 100, это делает вызов client1, который я получил изящно и теперь называем это идти, теперь я приглушить мои обе конечные микрофоны (абоненте и вызываемый), вызов все еще продолжается. Запись каждого канала создается должным образом. Теперь мне нужно запустить событие, когда в течение 3 секунд обнаружена тишина, и мне нужно захватить этот звуковой фрагмент до молчания.

Любая идея, как я могу достичь этой цели?

ответ

1

В Звездочка 13, вы можете использовать функцию TALK_DETECT диалплана:

Сводка

поднимает уведомления, когда Asterisk обнаружит молчание или говорить на канал.

Описание

Функция TALK_DETECT позволяет события на канале он применяется к. Эти события могут быть выбраны через AMI, ARI и, возможно, другие модули Asterisk, которые прослушивают внутреннее уведомление.

Имейте в виде, что TALK_DETECT выглядит только для аудио наступающего из стороны устройства канала, то есть на стороне чтения. Таким образом, если мы хотим поднять события для обоих каналов, нам необходимо применить их к каждому каналу. В качестве примера, ниже будет применяться обнаружение ток к обоим каналам с помощью предварительно набрать обработчик на исходящем канале:

[default] 

exten => 100,1,Answer() 
same => n,Set(TALK_DETECT(set)=) 
same => n,Monitor() 
same => n,Dial(SIP/client1,15,b(default^apply_talk_detect^1)) 
same => n,Hangup() 

exten => apply_talk_detect,1,NoOp() 
same => n,Set(TALK_DETECT(set)=) 
same => n,Return() 

Используя это, вы должны получить событие AMI событие ChannelTalkingStart при разговоре обнаруживается, и ChannelTalkingStop когда один из каналов перестает разговаривать. Затем ваше внешнее приложение может посмотреть, есть ли три события между событиями и предпринять соответствующие действия.

+0

Great Tip Matt, Но мне нужно выбрать звуковой фрагмент, проблема в том, что файл монитора недоступен до тех пор, пока вызов не завершится. Как я могу его получить? – Zubair

+0

Если вам нужен звук в реальном времени, то использование монитора напрямую не подходит. Вместо этого вы можете использовать ChanSpy для пересылки этого звука в другое место. Если вам нужен аудиофайл, вы отправите шпионский канал в приложение «Запись». Когда ваши события срабатывают с использованием событий Talk Detection, о которых я упоминал, вы должны повесить шпионский канал и получить файл, который он создал. –

+0

Спасибо, Мэтт, это работает именно то, что я хочу. Ответ принят – Zubair

1

Там нет такой в ​​звездочках Функции добавления

Вы можете создать свое собственное C/C++ приложения или прикрепить Enother канала с помощью ChanSpy и использовать команду SilenceDetect + команду UserEvent.

Однако такие diaplan не для новичка, извините