FreeSWITCH中dtmf信號

FreeSWITCH中dtmf信號

DTMF的相關定義

關於DTMF信號的時間間隔,CCITT對DTMF信號規定的指標是,傳送/接收率爲每秒10個數字,即每個數字100ms。代表數字的音頻信號必須持續至少45ms,但不超過55ms。
100ms內其他時間爲靜音,以便區別連續的兩個按鍵信號。

FreeSWITCH中的運用

撥號計劃中執行:

可以在日誌中看到相關內容。
2019-02-26 11:49:31.711424 [DEBUG] switch_rtp.c:7771 RTP RECV DTMF 1:1440
2019-02-26 11:49:31.711424 [DEBUG] mod_fsvad.c:1679 (VAD-0) flag:0, digit:1, asr feed dtmf
2019-02-26 11:49:31.711424 [INFO] switch_channel.c:515 RECV DTMF 1:1440

start_dtmf 這個APP執行的是dtmf檢出的動作。

在mod_dptools模塊中,有如下定義:
SWITCH_STANDARD_APP(dtmf_session_function)
{
switch_ivr_inband_dtmf_session(session);
}

主入口是以下函數:

switch_ivr_async.c
SWITCH_DECLARE(switch_status_t) switch_ivr_inband_dtmf_session(switch_core_session_t *session)

mod_dptools.c 判斷dtmf種別

/**

  • Convert DTMF source to human readable string
    */
    static const char *to_dtmf_source_string(switch_dtmf_source_t source)
    {
    switch(source) {
    case SWITCH_DTMF_ENDPOINT: return “SIP INFO”;
    case SWITCH_DTMF_INBAND_AUDIO: return “INBAND”;
    case SWITCH_DTMF_RTP: return “2833”;
    case SWITCH_DTMF_UNKNOWN: return “UNKNOWN”;
    case SWITCH_DTMF_APP: return “APP”;
    }
    return “UNKNOWN”;
    }

處理RFC2833的dtmf位置

文件名:
switch_rtp.c

函數:
static handle_rfc2833_result_t handle_rfc2833(switch_rtp_t *rtp_session, switch_size_t bytes, int *do_cng)

處理SIP INFO的dtmf位置

文件名:
mod_sofia.c

函數:
void sofia_handle_sip_i_info(nua_t *nua, sofia_profile_t *profile, nua_handle_t *nh, switch_core_session_t *session, sip_t const *sip,
sofia_dispatch_event_t *de, tagi_t tags[])

處理INBAND的dtmf位置

文件名:
switch_ivr_async.c

函數:
SWITCH_DECLARE(switch_status_t) switch_ivr_inband_dtmf_session(switch_core_session_t *session)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章