FreeSWITCH 架构
总体架构
核心和多个外围模块组成。
核心
核心实现关键的数据结构、状态机、数据库等。核心代码提供Public API 调用核心功能。核心保持了最高程度的抽象,因为可以调用不同的功能、不同协议的模块。
数据库(DB)
FS核心使用内部队列、哈希存储数据外,还采用外部数据库来存储。提高性能、降低死所的风险。FreeSWITCH内置SQLite 作为数据存储。核心数据库存储位置/usr/local/freeswitch/db/core.db
公共应用程序接口
FS 在核心层实现了一些Public API ,这些API 可以被外围的模块调用。
接口
FS 层还提供了很多抽象的接口,供外围模块实现。
事件
FS 在内部也使用消息和事件机制进行进程间和模块间通信。
在FS外部,可以通过Event Socket等接口订阅相关的事件
订阅事件的方法:
/event plain ALL
/event plain CHANNEL_ANSWER
/event plain CUSTOM sofia::register
终端(EndPoint)
EndPoint 是终结FS的地方,他主要包含了不同呼叫控制协议的接口,比如:SIP\TDM硬件\H323以及Google Talk等。
拨号计划
主要功能是查找电话路由功能,系统默认是由mod_dialplan_xml提供,它是由xml描述的。
聊天计划
ChatPlan是对文本消息进行路由,如:SIP SIMPLE,SKYPE Message,XMPP Message等。它是在mod_sms中实现的。
应用程序(Application, APP)
FS 提供了许多App使复杂的任务变得简单,比如:mod_voicemail模块可以实现语音留言。mod_conference模块泽实现高质量的多方会议。是由mod_dptools提供。
命令接口(FSAPI)
FSAPI 是一种对对外的命令接口,原理输入一个字符串,该字符串由内部模块处理,然后输出一个具备一定格式的文本。
XML 接口
XML接口支持多种获取XML的方式,它可以从本地配置文件或数据库中读取,也可以通过HTTP 服务器中读取。
编解码器
FS 支持多种语音、视频的codec。
语音识别及语音合成
支持ASR和TTS合成
格式、文件接口
支持不同格式声音文件回放、录音。如果wav和mp3等。
日志
日志可以写到控制台、日志文件、系统日志以及远程的日志服务器。实现日志的模块:mod_console、mod_logfile、mod_syslog
定时器
实时语音通话需要非常准确的定时器,在FS中,可以使用软时钟或内核时钟。FS最理想的工作时钟频率是1000Hz,而某些Linux发行版或虚拟机的内核默认是100Hz或250Hz,在这种情况下,可以使用内核提供的时钟接口,或者重新编译内核调整时钟频率。
嵌入式语言
通过swig可以支持多种嵌入语言进行控制呼叫流程。
事件套接字
通过Event Socket可以控制呼叫流程,扩展FS功能。