连接呼叫上的星号静音检测

时间:2016-01-01 13:47:47

标签: signal-processing asterisk voip audio-processing

如果我的问题没有意义,请提前抱歉。 我是星号的新手,而我正在尝试做的是编写一个可以连接2个软电话端点(VoIP客户端点)的拨号计划,然后尝试检测正在进行的呼叫中的静音。我可以通过使用以下拨号计划来打电话

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

当我拨打100时,它拨打了client1,我收到了优雅的电话,现在正在通话,现在我将我的两个麦克风(来电者和被叫者)静音,电话仍在继续。正确创建每个频道的录制。现在我需要在检测到静音3秒时发射一个事件,我需要抓住那个音频块直到静音。

知道如何实现这个目标吗?

2 个答案:

答案 0 :(得分:2)

在Asterisk 13中,您可以使用TALK_DETECT拨号方案功能:

  

概要

     

当Asterisk检测到静音或通话时发出通知   信道。

     

描述

     

TALK_DETECT功能可在其应用的通道上启用事件   至。这些事件可以通过AMI,ARI和其他可能的事件发出   听取内部通知的星号模块。

请注意,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事件。然后,您的外部应用程序可以查看事件之间是否存在三秒间隔,并相应地采取相应措施。

答案 1 :(得分:1)

星号

中没有这样的功能

您可以使用ChanSpy创建我们自己的c / c ++应用程序或附加另一个通道,并使用SilenceDetect命令+ UserEvent命令。

然而,这样的diaplan不适合新手,抱歉