代码之家  ›  专栏  ›  技术社区  ›  Zubair

连接呼叫的星号静音检测

  •  1
  • Zubair  · 技术社区  · 10 年前

    如果我的问题对你毫无意义,请提前道歉。 我是星号中的新手,我想做的是编写一个拨号计划,它可以连接2个软电话端点(VoIP客户端端点),然后尝试检测正在通话中的静音。我可以使用以下拨号计划拨打直通电话

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

    当我拨打100时,它会给client1打电话,我优雅地接到了,现在电话还在继续,现在我把两端的麦克风(主叫方和被叫方)都静音了,电话还在继续。每个频道的录制正在正确创建。现在,我需要在检测到静音3秒时触发一个事件,我需要抓住音频块直到静音。

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

    2 回复  |  直到 10 年前
        1
  •  3
  •   Matt Jordan    10 年前

    在星号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 其中一个频道停止通话时的事件。然后,您的外部应用程序可以查看事件之间是否存在三秒钟的间隔,并采取相应的行动。

        2
  •  1
  •   Tirtha    6 年前

    星号中没有此类功能

    您可以创建自己的c/c++应用程序,或者使用ChanSpy附加另一个频道,然后使用SilenceDetect命令+UserEvent命令。

    然而,这样的拨号计划不适合新手,对不起