声明:本文转载自 http://www.cnblogs.com/spiritonly/articles/1790859.html
FreeSWITCH的内核特别稳定,而外部模块的接口也相当稳定,所以为我们开发自己的模块打下了良好的基础。在设计之初,Anthony Minessale 将外部模块分为13中类型,每种类型代表不同的应用方向,并且也设计了稳定的plugin接口。
FreeSWTICH的接口类型:
- SWITCH_ENDPOINT_INTERFACE /* endpoint modules, 主要实现各种通信协议,如SIP、H.232、Skype、XMPP等等*/
- SWITCH_TIMER_INTERFACE /* 时钟接口,包括软时钟和硬时钟,FreeSWITCH自带一个soft timer */
- SWITCH_DIALPLAN_INTERFACE /* dialplan modules, 用来控制呼叫流程的,比如在XML中编写流程的控制,或者自己定义一种文本语法,然后编写一个dialplan module用来解析这种流程控制的语法 */
- SWITCH_CODEC_INTERFACE /* 编码模块,包括 G.722、G.729等,现在貌似还没有视频的编解码,有兴趣的朋友可以自己开发一个 */
- SWITCH_APPLICATION_INTERFACE /* 应用模块,这种模块一般是用户定义的功能,比如说使用自己的短信猫发短信,那么就可以写一个APP,在dialplan中使用 */
- SWITCH_API_INTERFACE /* API一般是在FreeSWITCH的shell中使用的,但是也可以通过特定方式在dialplan中使用,类似于APP modules */
- SWITCH_FILE_INTERFACE /* 文件操作模块,暂时还没分析这个接口 */
- SWITCH_SPEECH_INTERFACE /* TTS 模块,调用TTS引擎的API实现语音合成的功能,用户可以直接在dialplan中使用,比如将微软的SAPI实现TTS功能 */
- SWITCH_DIRECTORY_INTERFACE /* 模块操作模块,暂时还没分析这个接口 */
- SWITCH_CHAT_INTERFACE /* IM模块,暂时还没分析这个接口 */
- SWITCH_SAY_INTERFACE /* 提示音多语言支持模块,FreeSWTICH有一些内置的提示音,一个say module实现一种语音的提示音播放,比如说mod_say_zh就是使用中文播放 “元”、”角”、“分”,而mod_say_en就是英文播放”dollar“、”cent“等 */
- SWITCH_ASR_INTERFACE /* ASR模块,调用语音识别引擎API实现语音识别 */
- SWITCH_MANAGEMENT_INTERFACE /* 暂时还没有分析这个接口 */
上面这些接口,有的比较简单,比如TTS的,SAY模块(大部分常用的都内置了,无需再开发),Dialplan模块,也有部分比较复杂,比如Endpoint和ASR这两个就教负责一些。还有一些我还没有分析到,所以不太清楚其负责程度,等写到对应的模块再说吧。
其实说白了,C/C++的plugin/module framework无非就是函数指针,那么FreeSWITCH的module接口也是大量的使用了函数指针,以达到用户实现功能模块,FreeSWITCH Core负责调度的原则。
基本上会按照上面标志的顺序对FreeSWITCH的模块开发做一些简单的分析,然后再说一下开发中应该注意的地方(如果我做过对应模块),最后可能写一些简单的示例。