什么是DTMF?
假如你撥打了電信客服10000,它會有相應的語音提示信息,撥0鍵,接入人工幫助...撥1鍵,然后干嘛干嘛,那么10000是如何了解你到底撥了哪個鍵,這就需要一種方式將我們具體撥哪個號碼通知給它,這就是DTMF 的用途。
DTMF(Double Tone
MulitiFrequency,雙音多頻)作為實現電話號碼快速可靠傳輸的一種技術,它具有很強的抗干擾能力和較高的傳輸速度,因此,可廣泛用于電話通信系統中。 但絕大部分是用作電話的音頻撥號。另外,它也可以在數據通信系統中廣泛地用來實現各種數據流和語音等信息的遠程傳輸。
DTMF是用兩個特定的單音頻組合信號來代表數字信號以實現其功能的一種編碼技術。兩個單音頻的頻率不同,代表的數字或實現的功能也不同。 這種電話機中通常有16個按鍵,其中有10個數字鍵0~9和6個功能鍵*、#、A、B、C、D。由于按照組合原理,一般應有8種不同的單音頻信號。因此可采用的頻率也有8種,故稱之為多頻,又因它采用從8種頻率中任意抽出2種進行組合來進行編碼,所以又稱之為“8中取2”的編碼技術。
根據CCITT的建議,國際上采用的多種頻率為697Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477Hz和1633Hz等8種。用這8種頻率可形成16種不同的組合,從而代表16種不同的數字或功能鍵,具體組合見表1。
表1 雙音多頻的組合功能
高頻群Hz/低頻群Hz/功能 |
1209 |
1336 |
1477 |
1633 |
697 |
1 |
2 |
3 |
A |
770 |
4 |
5 |
6 |
B |
852 |
7 |
8 |
9 |
C |
941 |
* |
0 |
# |
D |
目前傳送DTMF信號普遍有三種方式:
A. 通信協議傳輸(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的規則和格式包傳輸
RFC2833是DTMF信號按照一個的規則和格式組成一個數據包,有專門的RTP包進行標識,在RTP包的頭域中就可得知該包是DTMF包,并且知道是什么DTMF信號。RFC2833專門對此有定義。該方法是將DTMF信號和媒體流一樣,用RTP包來傳輸,因而沒有DTMF信號和媒體流不同步的問題,接收端接收后進行解析,再還原成相應的DTMF信號,對丟包的容錯性強以及識別差錯率低,相對來說比較成熟。
在選擇壓縮比很高碼率很低的codec,比如G.723.1和G.729A等,建議不要使用INBAND模式,因為INBAND DTMF數據在進行復雜編解碼后會產生失真,造成DTMF檢測發生偏差或失敗。最好選擇RFC2833和SIPINFO
原文出處:http://blog.chinaunix.net/uid-27122534-id-3260925.html
聯系地址:廣東省深圳市龍華新區觀瀾街道大和路596號怡力科技園B棟2樓
客服電話:0755-81755956/23595456/81753995/23006965
工作時間:周一至周五 08:30-12:00 13:20-17:50
微信公眾號
技術支持