[Freeswitch-dev] Getting DTMF from channel.

Paulo Rogério Panhoto paulo at voicetechnology.com.br
Fri Oct 22 13:09:29 PDT 2010


    Hi,

    I'm writing a module that allows playback of MP4 video files (with
libmp4v2). The playback itself is made by two functions ready to run on
separate threads (though, audio runs on current thread and video runs on
a separate one). At this point, I'm trying to implement dtmf cut-through.

    After some research (I checked out mod_dptools.c and
switch_ivr_play_say.c) and this code was my best guess -- it runs on the
audio stream:

        if(switch_channel_test_flag(pt->channel, CF_BREAK))
        {
            switch_channel_clear_flag(pt->channel, CF_BREAK);
            break;
        }

        switch_ivr_parse_all_events(pt->session);
       
        if(switch_channel_has_dtmf(pt->channel))
        {
            switch_channel_dequeue_dtmf(pt->channel, &dtmf);
            const char * terminators =
switch_channel_get_variable(pt->channel,
SWITCH_PLAYBACK_TERMINATORS_VARIABLE);
            if(terminators && !strcasecmp(terminators, "none"))
terminators = NULL;
            switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(pt->session),
SWITCH_LOG_DEBUG, "Digit %c\n", dtmf.digit);
            if(terminators && strchr(terminators, dtmf.digit))
            {
                std::string digit(&dtmf.digit, 0, 1);
                switch_channel_set_variable(pt->channel,
SWITCH_PLAYBACK_TERMINATOR_USED, digit.c_str());
                break;
            }
        }
       
    Which didn't work. I'm asking if anyone has any idea.

    Any help is appreciated

    Regards,

    Paulo R. Panhoto




More information about the FreeSWITCH-dev mailing list