美文网首页
【FreeSwitch模块开发指南】何如新增一个APP?

【FreeSwitch模块开发指南】何如新增一个APP?

作者: 安安爸Chris | 来源:发表于2018-09-27 13:47 被阅读0次

    今天我们来看一下如何给Freeswitch新增一个APP。

    假设我们要新增一个播放语音文件的APP(Freeswitch已经有该能力,这里只为做演示)

    步骤1. 添加一个处理函数

    使用宏SWITCH_STANDARD_APP定义你添加的函数。


    SWITCH_STANDARD_APP
    #define SYNTAX_PLAYBACK "<path> <offset>"
    SWITCH_STANDARD_APP(playback_function) {
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "**playback_function**\n");
        int argc;
        char *argv[2] = { 0 };
        char *mydata;
    
        if (!zstr(data) && (mydata = switch_core_session_strdup(session, data))) {
            if ((argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) >= 1) {
                switch_input_args_t args = {0};
                switch_file_handle_t fh = {0};
    
                uint offset = switch_atoui(argv[1]);
                fh.offset_pos = offset;
    
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "playback file path:%s, offset:%d", argv[0], offset);
                switch_ivr_play_file(session, &fh, argv[0], &args);
            }
        }
    }
    

    这个函数的功能就是调用freeswitch自身的播放语音接口函数,逻辑很简单。
    这里注意到几点:

    • App函数是自带session的,Api中是没有的
    • App函数中没有stream用于控制台输出的流;Api中是有的
    • App函数不需要返回值;Api中是有的

    第二步. 在LOAD_FUNCTION中添加该函数

    SWITCH_MODULE_LOAD_FUNCTION(mod_eric_load) {
        // .......
    
        switch_application_interface_t *app_interface;
        SWITCH_ADD_APP(app_interface, "my_playback", "playback", "playback", playback_function, SYNTAX_PLAYBACK, SAF_NONE);
    
        return SWITCH_STATUS_SUCCESS;
    }
    

    好,到此新增APP就写好了。编译打包,然后我们在freeswitch上试一下吧。


    加载

    ok,从日志上可以看到,我们的新的App添加进入了。

    我们来试一下


    不能像Api一样调用

    不能像Api一样调用,直接在控制台上使用直接报错。 这也是App和Api的区别之一。那么我们该怎么试用呢?

    一般两种方式,

    1. 通过拨号计划
    2. 通过lua脚本

    用拨号计划测试

    使用拨号计划需要配置一个软终端用于测试,我这里使用的是Zoiper5.
    这是一款收费软件,不过也可以限制功能免费使用。 使用Zoiper5注册到我们的Freeswitch上。

    下面是定义好的拨号计划

       <extension name="mydemo">
          <condition field="destination_number" expression="^411$">
            <action application="answer"/>
            <action application="sleep" data="1000"/>
            <action application="my_playback" data="sample/ms_8k_8bit.wav 6"/>
            <action application="sleep" data="1000"/>
            <action application="hangup"/>
          </condition>
        </extension>
    

    在zoiper上拨打411,触发该拨号计划,可以听到语音声音。这个App添加成功!

    相关文章

      网友评论

          本文标题:【FreeSwitch模块开发指南】何如新增一个APP?

          本文链接:https://www.haomeiwen.com/subject/qdjeoftx.html