如果我的问题对你来说毫无意义,请提前道歉。我是星号中的新手,我正在尝试写一个拨号计划,它可以连接2个软电话端点(VoIP客户端端点),然后尝试检测正在进行的呼叫中的静音。我可以使用以下拨号计划进行直通电话
exten = 100, 1, Answer()
same = 100, n, Monitor()
same = 100, n, Dial(SIP/client1,15)
当我拨100时,它会呼叫客户端1,我很优雅地收到了它,现在呼叫正在进行,现在我将我的两端麦克风(呼叫者和被呼叫者)静音,呼叫仍在进行。正在正确创建每个频道的录制。现在,每当检测到3秒钟的静音时,我需要触发一个事件,并且我需要获取音频块,直到静音。
你知道我怎样才能实现这个目标吗?
在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事件,当其中一个通道停止通话时,应该得到ChannelTalking停止事件。然后,您的外部应用程序可以查看事件之间是否有三秒的间隔,并采取相应的操作。
星号中没有此类功能
您可以创建自己的c/c++应用程序,或者使用ChanSpy连接另一个通道,并使用SilenceDetect命令+UserEvent命令。
然而,这样的拨号计划不适合新手,对不起