收號傻瓜書(rfc2833)

 

 

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要求必須遞增),如果單純以時戳不一樣作爲判斷是否新號碼的標準,可能導致多檢號碼。一個有效的辦法就是把比當前時戳小的包丟棄,一定程度上解決亂序問題。

 

 

 

 

發佈了39 篇原創文章 · 獲贊 9 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章