Asterisk 的 DSP 模組優化

April 29, 2010
By

相信大家用 Asterisk FXO 當outbound dialing server 時也會在 chan_dahdi.conf 上把 callprogress 設定為 yes。

callprogress=yes
progzone=us

這個設定的作用是:Analog 線路在 outbound dialing 時,在 call delivered (call ringing)  的時間判斷對方是否真的接線 (Call Answer)。對方接線後便會執行相應的 dialplan。否則便掛線。如果沒有設定 callprogress ,FXO 上的 outbound dialing 便不會判斷對方接線與否,直接執行 dialplan。到時對方便會覺得系統怪怪的。

但 Asterisk 的 callprogress 總給人的印象是反應很慢。對方回應了 hello 後 Asterisk 需要等四至六秒才有回應。這四至六秒中,對方便要聽 dead air,這也使對方覺得系統怪怪的。

所以,我便嘗試更改 source code 來嘗試縮短這 dead air 的時間。

打開 main/dsp.c 的檔案,找到下列的 code:

/*! All THRESH_XXX values are in GSAMP_SIZE chunks (us = 22ms) */
enum gsamp_thresh {
THRESH_RING = 8,                /*!< Need at least 150ms ring to  accept */
THRESH_TALK = 2,                /*!< Talk detection does not work  continuously */
THRESH_BUSY = 4,                /*!< Need at least 80ms to accept */
THRESH_CONGESTION = 4,          /*!< Need at least 80ms to accept */
THRESH_HANGUP = 60,             /*!< Need at least 1300ms to accept  hangup */
THRESH_RING2ANSWER = 300        /*!< Timeout from start of ring to  answer (about 6600 ms) 這 數值由300 改為 180*/
};

把 THRESH_RING2ANSWER 由 300 改為 180。那麼 dead air 的時間會縮短為 1-2 秒了。

記得 Asterisk 需要recompile 後才起作用。

Leave a Reply

合作伙伴




Slideshow