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

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

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

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

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


SWITCH_STANDARD_APP
#define SYNTAX_PLAYBACK " "
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上试一下吧。


【FreeSwitch模块开发指南】何如新增一个APP?_第1张图片
加载

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

我们来试一下


不能像Api一样调用

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

一般两种方式,

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

用拨号计划测试

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

下面是定义好的拨号计划

   
      
        
        
        
        
        
      
    

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

你可能感兴趣的:(【FreeSwitch模块开发指南】何如新增一个APP?)