Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8797
  • 博文数量: 1
  • 博客积分: 45
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-02 19:59
文章分类

全部博文(1)

文章存档

2012年(1)

我的朋友

分类: C/C++

2012-07-02 22:38:54

1. 什么是DTMF

DTMF(Dual-tone Multi-frequency)双音多频,一个DTMF信号由两个频率的音频信号叠加构成。这两个音频信号的频率来自两组预分配的频率组:行频组或列频组。每一对这样的音频信号唯一表示一个数字或符号(通常就是按键号码)

假如你拨打了10086,它会有相应的语音提示信息,拨0键,接入人工帮助....    拨1键,然后干嘛干嘛,那么10086是如何了解你到底拨了哪个键,这就需要一种方式将我们具体拨哪个号码通知给它,这就是DTMF 的用途, DTMF 之前使用特定的脉冲来代表相应的号码。

2. DTMFVOIP中的解决方案

目前传送DTMF信号普遍有三种方式:

通信协议传输(SIP信令)

用SIP信令的INFO方法携带DTMF信号。

该方法是用SIP信令的INFO方法来明文定义来代表DTMF信号。主要缺陷是因为SIP控制信令和媒体传输(RTP)是分开传输,很容易造成DTMF信号和媒体包不同步。

举个例子,在Voice Mail应用中,用户根据提示音输入一个DTMF信号,随后开始留言。Server是在接受到该DTMF信号后开始保存用户的留言。然而由于DTMF信号是通过SIP信令来传输的,而媒体流是通过RTP来传输的,有可能用户留言的RTP包先到,而该DTMF信号的INFO消息延迟,导致Server不保存用户的语音留言直至接受到INFO消息。


B. 通过RTP的数据内容传输(Inband

In Band是指直接将DTMF的音频数字信号不经任何处理直接打成RTP包在IP网中传输。其中可能和用户的语音媒体流混合在一起传输。程序要获知哪个包有DTMF信号,是什么DTMF信号,必须实时检查每个RTP包里面的媒体流数据,分析它的频域。主要缺陷是由于网络丢包的影响,有时会造成DTMF信号丢失,而且DTMF音混合在语音包中,容易产生偏差,造成信号失真。


C. 通过rfc2833的规则和格式包传输

RFC2833DTMF信号按照一个的规则和格式组成一个数据包,有专门的RTP包进行标识,在RTP包的头域中就可得知该包是DTMF包,并且知道是什么DTMF信号。RFC2833专门对此有定义。该方法是将DTMF信号和媒体流一样,用RTP包来传输,因而没有DTMF信号和媒体流不同步的问题,接收端接收后进行解析,再还原成相应的DTMF信号,对丢包的容错性强以及识别差错率低,相对来说比较成熟。


阅读(6368) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~