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)

你可能感兴趣的:(FreeSWITCH中dtmf信号)