工作需要,研究了一下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