1話機歷史
1876年貝爾發明第一部電話機
第一代話機,手搖式撥打電話,通過搖轉手柄接通轉接中心,由中心接線員負責轉接,搖手柄主要是用於發電;
信令:撥號者和中心接線員的對話指示
第二代話機,脈衝撥號,不同脈衝序列代表不同號碼,例如1個脈衝表是1,9個脈衝表示9,實際上即爲0,1脈衝序列;
信令:0,1脈衝序列
第三代話機,雙音多頻信號(DTMF)撥號,這個時候已經沒有接線員,由電話機與交換機通過DTMF信號協商。
信令:DTMF信號,也由貝爾試驗室發明,信號如下圖,每個按鍵由一個高頻信號和一個低頻信號疊加組成一個組合信號,代表一個數字,交換機只要檢測到這兩個頻率即可判定爲撥號。
2 帶內收號和帶外收號
帶外outband傳輸號碼,顧名思義,即不使用媒體傳輸通道傳輸,而是使用其他數據通道(如信令方式收號),詳細描述見wiki定義。在當前H323域和SIP域的帶外信令號碼分別爲放在UserInputIndication消息和INFO消息,示例分別見下圖:
帶內in-band傳輸號碼即通過,媒體通道傳輸號碼,IP域中目前有DTMF號碼和2833。DTMF號碼即把終端產生的語音封裝成RTP語音包,作爲語音包和語音一起傳輸,見下圖爲號碼123的DTMF音。但是,採用這種方式可能由於網絡抖動或丟包,可能造成解出的語音(DTMF音)失真,最終造成多檢號或少檢號。
而2833方式傳輸號碼,通過一定規則對DTMF號碼進行標識,並且和語音區別開,檢號系統不需要解成語音來判別號碼,同時2833方式通過這些規則(如一個號碼發送多次)可以傳輸可靠性(對丟包、抖動網絡也可較好保證號碼被正確識別),降低誤檢率。
3 2833號碼傳輸
2833方式傳輸號碼,即通過參數化DTMF號碼,通過各個參數結合傳輸規則(2833、RTP)進行傳輸。如下圖,對一個DTMF按鍵音來說,需要起始時間(終端什麼時候按鍵)、時間持續長度(按下去時間多長),電平(音量大小),此外還需要有一參數記錄什麼時候按鍵結束,按的是什麼號碼。
由於要檢號系統要區分IP包是語音包還是號碼包,因此還需要有參數標識是號碼包。
2833承載在RTP包靜荷中,分別見RTP協議定義頭和2833協議頭格式如下,各個字段詳細定義點協議。
rfc3550(rtp)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| synchronization source (SSRC) identifier |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
| contributing source (CSRC) identifiers |
| .... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
rfc2833
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| event |E|R| volume | duration |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
以上表紅字有2833號碼傳輸關鍵字段,對比前面描述
PT,PAYLOAD TYPE淨荷類型,標識淨荷類型,對2833號碼而言,即表示這個包是2833號碼包,取值在信令協商是確定;
Timestamp,時戳,如前描述,用於標識按鍵時間;
Event,2833事件號,用於說明本數據包的事件(這裏用於標識按鍵號碼),例如,0-9對應的事件號即爲0-9;
E,事件結束標識位,如前描述用於表達這個按鍵結束;
Volume,音量,6位,參照前面,用於說明DTMF信號的音頻功率級,範圍從(0~ -63dbm),2833協議定有效的DTMF範圍是從0 到-36 dBm0;低於-55 dBm0則必須丟棄;
Duration,事件持續時間,單位爲採樣點數,即按鍵開始時間到當前統計總的採樣點數,以終端編碼器採樣率8Kh爲例,duaration=160,時間跨度即爲20ms(8khz即1ms8個採樣點,160個點即20ms)。Duration字段長度爲16位,即最多表示時間爲8s。
規則&注意:
a. 2833包的發送規則是什麼?
DTMF ON ----à DTMF OFF
一個號碼的2833包序列必須是按鍵到放開按鍵,開始包到結束包的時戳必須一樣,duration必須遞增,知道該號碼的結束包。
b. 如何判別兩個2833包是不同時刻的號碼?
通過時戳timstamp,時戳不同即號碼按鍵時刻不同,即便event描述的號碼相同,也是不同時刻的號碼。
c. 如何判別一次號碼結束?
E字段即爲結束表示位
d. duration爲何必須是遞增?
每當終端側發出某個號碼的2833包,其時間必然是遞增,因此duration統計的時間值也必然是遞增。
e. 一個號碼傳遞的2833包數量有沒有限制?爲何一個號碼要傳遞多次?
避免網絡丟包一個最有效的方法就是,多發幾次包。
d. 網絡抖動到一定程度,必然導致亂序,系統如何實現才能保證包亂序不多收號?
對包亂序,即包序列的時戳非遞增(按RTP要求必須遞增),如果單純以時戳不一樣作爲判斷是否新號碼的標準,可能導致多檢號碼。一個有效的辦法就是把比當前時戳小的包丟棄,一定程度上解決亂序問題。