Asterisk 播放声音时检测静音

Asterisk 播放声音时检测静音,asterisk,Asterisk,我正在开发一个java asterisk应用程序,它调用订阅者来传递消息。在通话过程中的某些时刻,我需要监控用户是在通话还是保持沉默。我需要监控相当长的时间(1-3秒),但不想中断传出消息的流。 我现在的做法如下 streamFile(*file A*); exec("WaitForSilence","300,1,1"); waitStatus=getVariable("WAITSTATUS"); streamFile(*file B*); 这很好,但它只是一个300ms的检测和1s的超时,因

我正在开发一个java asterisk应用程序,它调用订阅者来传递消息。在通话过程中的某些时刻,我需要监控用户是在通话还是保持沉默。我需要监控相当长的时间(1-3秒),但不想中断传出消息的流。 我现在的做法如下

streamFile(*file A*);
exec("WaitForSilence","300,1,1");
waitStatus=getVariable("WAITSTATUS");
streamFile(*file B*);
这很好,但它只是一个300ms的检测和1s的超时,因此从订阅者的角度来看,文件a和文件B之间的静默几乎是不可见的。但是如果我想听更长的时间(比如说3秒钟),那么用户的体验就会被破坏

我需要的是一个类似于“WaitForSilence”的函数,但是:

  • 与脚本并行运行
  • 使用我定义的名称在变量通道中传递其结果(因为可能有多个函数调用,我需要获得所有结果)

我已经找了不止一个aweek了,但找不到一个方法。有什么想法吗?

您提供的代码将执行等待,然后执行播放

在一个应用程序中不可能做到这一点

可能的方式:

1) 为此创建c/c++应用程序(需要星号大师技能)

2) 创建另一个通道,将其与ChanSpy混合,并在该通道中执行静默检测。复杂性-星号专家

两者都不是很短(超过2-3个代码屏幕),因此无法在本网站中描述


您也可以尝试使用后台应用程序,但我担心它不会起作用。

并不能真正解决我的问题,但至少现在已经清楚什么是可行的,什么是不可行的。我需要寻找另一条途径来解决我最初的问题。