为什么星号(和其他系统)感觉需要重新生成呼叫中的DTMF?

我正在使用Asterisk与模拟电话设备交互,这些设备可以通过DTMF交互进行编程和testing。

其中一些人说话很快。 太快,你可以令人信服地争论; 我会在你身边。 但是,Asterisk完全能够听到这些音调,如果我有幸能够通过带内DTMFaudio获得纯粹的audiostream,我甚至可以非常成功地认出真正的快速音调。

Asterisk(或另一个电话系统)决定需要识别和重新生成DTMF时会出现问题。 我意识到,例如在带外DTMF中进行翻译时,这是很重要的,但我不确定为什么它似乎是默认的操作,特别是为什么它经常以较长的持续时间重新生成(例如100ms;幸运的是,在Asterisk中,这可以被改变,尽pipe它可能涉及重新编译),这几乎保证了数字的丢失。 其他人已经报告了即使转换不是必要的带外转换到带外也会导致重复数字的问题。

所以我的问题是:为什么这是电话系统的MO? 除非明确要求翻译,否则为什么不单独留下DTMF?

以您喜爱的歌曲的高保真CD录音。
使用可以find的最便宜的麦克风进行录制。
使用针对说出的单词进行优化的糟糕的8位audio编解码器对录音进行编码。
通过便宜的扬声器播放录音(并摆动电线)。

如果你听CD和链条上面的链子,你会听到有多么糟糕的东西得到电话。 现在想象一下,不是你录制的DTMF铃声,而是试图播放它们,让电脑识别它们。

这就是为什么大多数VoIP系统使用带外信道(如RFC 2833)对DTMFaudio进行重新编码的原因 – 压缩,networking抖动,延迟和潜在的数据包丢失使audio编码的DTMF容易失败。
通过将DTMF音调作为带外数据发送,它们可以重新插入离PSTN最近的端点处的audiostream,从而最大限度地降低音调被破坏的风险。

为什么是100ms? 由于某些电话线路或远程端口在较短的audio持续时间中遇到了问题(如果您曾经在嘈杂的地面线路上呼叫过按键音系统,则可能在按下button几秒钟之后沮丧地让系统识别音)。
(100ms可能太长了 – 20-50ms已经足够了)


您不必使用带外信号 – 潮湿的VoIP系统将处理带内信号(您通常必须在您的手机和服务器上设置参数才能这样做,而且您必须使用高质量编解码器(或者如果您希望在可靠性上实现真正的拍摄,则完全禁用压缩)。
大多数部署他们的人select使用RFC 2833(并重新编码在带内接收的DTMF),因为它实际上更可靠。