雙音多頻DTMF(Dual Tone Multi-Frequency)信令,因其提供更高的撥號速率,迅速取代了傳統轉盤式電話機使用的撥號脈沖信令。DTMF也應用在交互式控制中,諸如語言菜單、語言郵件、電話銀行和ATM終端等。由於DTMF在傳統通信領域中的廣泛使用,所以在VOIP中,DTMF仍是發揮着重要的作用。
一個DTMF信號由兩個頻率的音頻信號疊加構成。每一對這樣的音頻信號唯一表示一個數字或符號。產生DTMF信號,就是利用兩個不同頻率的正弦波疊加以后形成的波形,解碼時則采用改進的Goertzel算法,從頻域搜索兩個正弦波的存在。有16種DTMF信號,0-9、*#ABCD。
DTMF在VOIP中的解決方案:
由於在IP網中的通信傳輸是采用包交換(packet switch)而不是傳統領域中的線路交換(circuit switch)以及IP網的不穩定的特性,DTMF在VOIP中應用的解決方案和傳統有所不同,並且暫時還未統一,有多種解決方案。
1.用SIP信令的INFO方法攜帶DTMF信號。
該方法是用SIP信令的INFO方法來明文定義來代表DTMF信號。該種方法還在研究討論當中,有專家認為其並不適用,主要缺陷是因為SIP控制信令和媒體傳輸(RTP)是分開傳輸,很容易造成DTMF信號和媒體包不同步。
簡單舉個例子,在 Voice Mail應用中,用戶根據提示音輸入一個DTMF信號,隨后開始留言。Server是在接受到該DTMF信號后開始保存用戶的留言。然而由於DTMF信號是通過SIP信令來傳輸的,而媒體流是通過RTP來傳輸的,有可能用戶留言的RTP包先到,而該DTMF信號的INFO消息延遲,導致Server不保存用戶的語音留言直至接受到INFO消息。
2.在RTP媒體傳輸中攜帶DTMF信號。
該方法是將DTMF信號和媒體流一樣,用RTP包來傳輸,因而沒有DTMF信號和媒體流不同步的問題,使用H323信令的VOIP就是采用該種方法,相對來說比較成熟。
而其中又分In band和Out of band(RFC2833)兩種。
In Band DTMF:In Band DTMF是指直接將DTMF的音頻數字信號不經任何處理直接打成RTP包在IP網中傳輸。其中可能和用戶的語音媒體流混合(mix)在一起傳輸。程序要獲知哪個包有DTMF信號,是什么DTMF信號,必須實時檢查每個RTP包里面的媒體流數據,分析它的頻域。
Out of Band DTMF(RFC 2833):Out of Band DTMF是DTMF信號用專門的RTP包進行標識,在RTP包的頭域中就可得知該包是DTMF包,並且知道是什么DTMF信號。RFC2833專門對此有定義。
3.動態生成DTMF音頻信號
當程序需要產生一個DTMF音頻數字信號時,當然可以讀取已經錄制好的文件。
4.根據RTP包中的音頻信號檢測DTMF信號
在輸入信號中檢測DTMF信號,並將其轉換為實際的數字,這一解碼過程本質是連續的過程,需要在輸入的數據信號流中連續地搜索DTMF信號頻譜的存在。
