工作需要,研究了一下freeswitch,发现很强大。
FreeSWITCH开发者Anthony Minessale II过去曾是Asterisk PBX系统的开发者之一,原来给asterisk贡献了不少代码,但根据他在其主页上的描述,他在asterisk上开发了有关呼叫队列的应用,但呼叫队列达到一定程度后会引起死锁和崩溃,作者感觉按照原有asterisk的设计思路无法彻底解决这个问题。而asterisk的许多开发者又不附和他的建议:即搞一个2.0的分支来重写代码。于是2005年夏天作者决定自己开发一个项目,就是freeswitch。
FreeSWITCH是以C撰写而成的开放源码电话应用软件,可以连接SIP H.323、IAX2、LDAP、Zeroconf、XMPP / Jingle,Google Talk等现有技术,架构出开放源码PBX系统或开放源码的VoIP交换平台。同时Free-SWITCH也能跟现今各种开放源码PBX系统,如OpenPBX、Bayonne、YATE、Asterisk等,相互整合。扮演软交换角色的FreeSWITCH,可以接受来自各类VoIP协定或类比与数位设备的输入,将其彼此连接,让软体电话、IP电话与类比电话互通。特别的是,这套软件还可以用简单的脚本语言(script language)回应通话或执行TTS (Text to Speech,文字语音转换)传输等程序,达成让FreeSWITCH朗读网路上的新闻feeds等效果。按FreeSWITCH开发者的说法,Asterisk更适合于小型的PBX,而FreeSWITCH则是一个软交换系统 (Asterisk is an open source PBX and FreeSWITCH is an open source soft switch.)。它能胜任更复杂的工作──象预付费,彩铃等在传统电话网络中都需要依靠智能网(IN)才能实现。
我到他主页http://www.freeswitch.org下了代码下来看了看,目前最新版本是1.0.4,居然还支持windows,用vc2008编译了一下,一次通过,帅呆了。不过编译的没有配置。还可以直接下载windows版本的安装包http://files.freeswitch.org/windows_installer/freeswitch-1.0.4.exe
对于开发者,需要知道freeswitch使用了APR(Apache portable Run-time libraries,Apache可移植运行库)作为底层的接口。
FreeSWITCH被分成几个模块接口。下面是列表: (sun翻译自freeswitch网站)
- 拨号规则(Dialplan):
实现呼叫状态,获取呼叫的数据,作出路由决定。
- 端点(Endpoint):
协议的特定接口如SIP协议,TDM时分复用等
- 自动语音识别/语音合成(ASR/TTS):
语音识别与合成。
- 目录(Directory):
LDAP的类型的数据库查询。
- 事件(Events):
模块可以获取核心活动以及注册自己的自定义事件 ,并在以后的时间进行分析。
- 事件处理程序(Event Handlers):
远程访问事件和CDR。
- 格式(Formats):
例如wav文件格式。
- 记录器(Loggers):
控制台或文件记录。
- 语言(Languages):
如Python和JavaScript的嵌入式语言。
- 发音(Say):
特定语言的模块构建声音(用声音文件) 。
- 定时器(Timers):
可靠的计时器给包的间隔时间计时。
- 应用(Applications):
可以执行应用程序,如Voicemail语音邮件。
- FSAPI(FreeSWITCH API接口)
命令行功能,xmlrpc的职能,职能的CGI类型,拨号规则函数在字符串中,暴露了原型的字符串变量。
- XML
使用核心的钩子,使它们能够做到实时 查找和创建基于XML的CDR