VOIP RTP分析和AC490除錯記錄

2021-05-22 14:55:50 字數 4385 閱讀 9133

最近在研究voip ,**閘道器底層使用ac490 進行語音頻號ip 化( 驅動不由我寫) ,碰見一些,總結如下。

ac490 是audiocodes 公 司的voip 處理器,可以執行8/12 通道lbrc ,包括g.723/g.729/ilbc/amr/gsm fr 。支援24 通道的g.711 算 法或12 通道的g.711/g.723 演算法 的語音編碼;g.168-2002 回波消除;t.38 傳 真;支援rtp/rtcp 的打包/ 解包。

詳細定義請見rfc3550

(對rtp

格式的描述)

和 rfc3551

(對rtp

攜帶的**資訊格式的描述).

前12 個位元組在每乙個rtp packet 中都存在,而一系列的csrc 標記 只有存在mixer 時才有。

version (v): 2 bits

標明rtp 版本號。協議初始版本為0 ,rfc3550 中規定的版本號為2 。

padding (p): 1 bit

如果該位被設定,則在該packet 末尾包含了額外的附加資訊,附加資訊的 最後乙個位元組表示額外附加資訊的長度(包含該位元組本身)。該欄位之所以存在是因為一些加密機制需要固定長度的資料塊,或者為了在乙個底層協議資料單元中傳 輸多個rtp packets 。

extension (x): 1 bit

如果該位被設定,則在固定的頭部後存在乙個擴充套件頭部,格式定義在rfc3550 5.3.1 節。

csrc count (cc): 4 bits

在固定頭部後存在多少個csrc 標 記。

marker (m): 1 bit

該位的功能依賴於profile 的定義。profile 可以改變該位的 長度,但是要保持marker 和payload type 總 長度不變(一共是8 bit )。

payload type (pt): 7 bits

標記著rtp packet 所攜帶資訊的型別,標準型別列出在rfc3551 中。如果接收方不能識 別該型別,必須忽略該packet 。

sequence number: 16 bits

序列號,每個rtp packet 傳送後該序列號加1 ,接收方可以根據該序列號重新排列資料報順序。

timestamp: 32 bits

時間戳。反映rtp packet 所攜帶資訊包中第乙個位元組的取樣時間。

ssrc: 32 bits

標識資料來源。在乙個rtp session 其 間每個資料流都應該有乙個不同的ssrc 。

csrc list: 0 to 15 items, 32 bits each

標識貢獻的資料來源。只有存在mixer 的時候才有效。如乙個將多聲道的語音流合併成乙個單聲道的語音流,在這裡就列出原來每個聲道的ssrc 。

payload :此部分的格式規定見rfc3551, 隨攜帶的**流格式不同而不同。

按照rfc3551 中4.5.6 規定,乙個攜帶g729 格式的rtp 包的payload 可以由0 或多個g.729 或 g.729 annex a 幀組成,後面再有0 或多個g.729 annex b 幀組成。

g.729 或 g.729 annex a 每幀長10 byte ,相互 間完全相容,主要攜帶語音資訊。g.729 annex b 幀每幀長4 byte ,主要攜帶vad(voice activity detector, 語音行為檢測) 和cng(comfort noise generator, 舒適噪音生成) 。

不過根據對sip **和軟sip **的g729 的rtp 包抓包分析,其payload 一般是由4 個g.729 或 g.729 annex a 組成。因為vad 不是所有設 備都支援,例如asterisk 不支援。

按照rfc3551 中4.5.14 規定,乙個攜帶g711 格式的rtp 包格式較簡單,在g711 中每個聲音取樣被編碼為8 bit 。56 kb/s 和48 kb/s 在rtp 中是不被支援的。

本身希望用ac490 直接傳送rtp 包,但是控制其直接傳送的rtp 包卻無法被sip **,asterisk 和wireshark 正確分析。

3.1 g

.729

的問題

rtp

頭部多了4

個bit

,一般來時g729

的rtp

包頭2個bite

是80 12

,或者80 92(mark

被置為1

,一般是在第乙個rtp

包中),而

ac490

傳送g729

的rtp

包中80 12

前面多個4bit

, 修改ac490

的驅動使其去掉頭4

個bit

,可以被wireshark

分析為g729

的rtp

包,

但仍然無法與sip

**互通,繼續分析發現sip

**的g729

的rtp

包payload

長度為20 bit

,而ac490

的為12bit

,且在通過

asterisk

的時候,asterisk

報告檢測有vad

幀,檢視asterisk

原始碼發現asterisk

的frame.c

不支援vad

綜上和前面對g729

格式的描述,猜測ac490

的預設g729

的rtp

包由2個g.729

或 g.729 annex a

幀和乙個g.729 annex b

幀組成。而sip

**和軟sip

**的g729

的rtp

包一般由4

個g.729

或 g.729 annex a

幀組成。

修改驅動,改變ac490

的g729

的rtp

包為4個g.729

幀,與sip

**和軟sip

**互通成功。

3.2 g

.711a

的問題

在前面的除錯過程,由於修改ac490

的g729

的rtp

包格式的方式需要些時間,嘗試修改ac490

的rtp

格式為g.711a

,也就是pcma

因為其格式較為簡單。但開始時仍然無法與sip

**互通,表現為sip

**可以聽到聲音但有很大的雜音,ac490

這面的普通**靜音。分析

為還是兩端包格式不符,ac490

丟棄了所有發過來的包。

繼續抓包,sip

**的g.711a

的rtp

包payload

長度為160bit

,而ac490g.711a

的rtp

包payload

長度為162bit

,多次試驗分析後,發

現主要在ac490rtp

包payload

最後兩個bit

上,在一次通話中,這兩個bit

要麼是00 00

,要麼是固定的兩個bit

,所有包後面都是這兩種型別。

而不同通話中,00 00 

外的另一種方式的兩個bit

不同。而00 00

或兩個固定bit

出現方式暫時為發現規律,在靜音包和語音包尾部兩種都會

出現。
建議修改ac490

驅動為在傳送時去掉尾部兩個bit

,接受時補上兩個bit 00 00

再次試驗互通成功。
1. 

較為仔細的學習了rtp

有關rfc

,主要是rfc3550, rfc3551,

還有rfc 2198

和rfc2833

2. 

基本掌握了sip

**和軟sip

**的rtp

包結構,了解了常見的rtp

包格式(

即rfc

中建議的多種方式那種最常用)

3. 

對asterisk

的sip.conf

配置進一步熟悉,尤其是canreinvite

這一段,怎樣使其表現的近似於stateless

的sip

伺服器。

4. 

對用wireshark

抓包進一步掌握。

VOIP RTP分析和AC490除錯記錄

最近在研究voip,閘道器底層使用ac490進行語音頻號ip化 驅動不由我寫 碰見一些,總結如下。ac490是audiocodes公司的voip處理器,可以執行8 12通道lbrc,包括g.723 g.729 ilbc amr gsm fr。支援24通道的g.711演算法或12通道的g.711 g....

DC係數和AC係數

1 dc係數的中間格式計算 jpeg中為了更進一步節約空間,並不直接儲存資料的具體數值,而是將資料按照位數分為16組,儲存在表裡面。這也就是所謂的變長整數編碼 vli。即,第 0組中儲存的編碼位數為 0,其編碼所代表的數字為0 第 1組中儲存的編碼位數為 1,編碼所代表的數字為 1或者 1.如下面的...

AC和AP的區別

wlan系統一般由ac 接入控制器 和ap 無線接入點 組成。無線ap,為access point簡稱,一般翻譯為 無線訪問節點 它是用於無線網路的無線交換機,也是無線網路的核心。無線ap是移動計算機使用者進入有線網路的接入點,主要用於寬頻家庭 大樓內部以及園區內部,典型距離覆蓋幾十公尺至上百公尺,...