为什么 asterisk(和其他系统)认为需要重新生成通话中的 DTMF?

为什么 asterisk(和其他系统)认为需要重新生成通话中的 DTMF?

我正在使用 Asterisk 与可以使用 DTMF 交互进行编程和测试的模拟电话设备进行交互。

有些人说话很快。太快了,你可以令人信服地争辩;我同意你的观点。然而,Asterisk 完全能够听到音调,如果我足够幸运地获得纯带内 DTMF 音频流,我可以非常成功地识别出甚至非常快的音调。

当 Asterisk(或其他电话系统)决定需要识别和重新生成 DTMF 时,就会出现问题。我意识到,在转换带外 DTMF 时,这一点很重要,但我不确定为什么这似乎是默认操作,尤其是为什么它经常以较长的持续时间重新生成(例如 100 毫秒;幸运的是,在 Asterisk 中,这可以更改,尽管它可能涉及重新编译),这几乎肯定会导致数字丢失。其他人报告了带内转换为带外导致数字重复的问题,即使转换不是必要的。

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

答案1

用高保真 CD 录制您最喜欢的歌曲。
使用您能找到的最便宜的麦克风录制。使用
针对口语优化的劣质 8 位音频编解码器对录音进行编码。
通过廉价扬声器播放录音(并摇动电线)。

如果您同时收听 CD 和上面的链接,您会听到电话中的东西被破坏得多么严重。现在想象一下,您录制的不是歌曲,而是 DTMF 音调,并尝试播放它们并让计算机识别它们。

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

为什么是 100ms?因为有些电话线或远程终端在较短的音调持续时间内会遇到麻烦(如果您曾经通过嘈杂的陆线拨打过按键音系统,您可能会沮丧地按住按钮几秒钟,让系统识别音调)。
(100ms 可能太长 - 20-50ms 绰绰有余)


你不需要使用带外信令——潮湿的 VoIP 系统将处理带内信令(通常你必须在手机上设置一个参数和你的服务器这样做,你必须使用高质量的编解码器(或者,如果您想要真正的可靠性,则完全禁用压缩)。
大多数部署它们的人选择使用 RFC 2833(并重新编码带内接收的 DTMF),因为它的可靠性要高得多。

相关内容