一:自定义application
我们来回顾一下,freeswitch自定义application
自定义application:需要定义
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_app_shutdown);
SWITCH_MODULE_LOAD_FUNCTION(mod_app_load);
SWITCH_MODULE_DEFINITION(mod_app, mod_app_load, NULL, NULL);
SWITCH_STANDARD_APP(app_start_function);
SWITCH_MODULE_LOAD_FUNCTION
即定义此app后,在freeswitch中进行 load mod_app 后执行的代码,通常将一些初始化代码放入其中。
SWITCH_MODULE_SHUTDOWN_FUNCTION
模块卸载后,执行的代码,通常将load中的内存进行释放,避免内存泄漏
SWITCH_STANDARD_APP 即你定义的app在路由中被使用是,执行的代码
二:代码整体架构设计
那么我如何进行设计,完成此次服务呢,服务大致分为如下几块功能
a、自定义freeswitch模块中,在load方法中,进行对应配置读取,udpserver的初始化
b、自定义freeswitch模块中,在shutdown方法中,释放udpserver的初始化
c、第三方独立模块,接收udp流【我们可以使用java netty实现udp client】
e、ASR实时语音处理模块、ESL连接控制freeswitch模块
我们选择从mod_application 将数据发送至第三个服务,以增加一个模块的形式,来释放自己的能力,当然可以直接在freeswitch 自定义模块中完成所有这些操作,但这样代码冗余,尤其在不熟悉freeswitch源码前提下,这么干效率极低,产生的风险极高。
三:freeswitch 源码中一些细节
增加一个APP,
switch_application_interface_t *app_interface;
SWITCH_ADD_APP(app_interface, "yourapp", "yourapp", "yourapp", app_function, "[name]", SAF_NONE);
通过SWITCH_ADD_APP增加一个app, 参数第五个为回调函数
SWITCH_STANDARD_APP(app_function)
下一节,我们来实现application具体细节,以及udpserver实现