Asterisk 的 DSP 模組優化
相信大家用 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 後才起作用。



