第一章谈freeswitch架构汇编.docx
- 文档编号:1452354
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:14
- 大小:74.60KB
第一章谈freeswitch架构汇编.docx
《第一章谈freeswitch架构汇编.docx》由会员分享,可在线阅读,更多相关《第一章谈freeswitch架构汇编.docx(14页珍藏版)》请在冰豆网上搜索。
第一章谈freeswitch架构汇编
ArchitectureofFreeSWITCH
Freeswitch的架构
欢迎来到FreeSWITCH!
如果你正读到此,那么无可置疑你对VOIP和电信行业很感兴趣。
FreeSWITCH是一个在电信通讯技术革命中起到革命性软件。
在看这个强大的软件的架构前,我们先瞧一瞧有趣的电信技术。
这对我们深入了解FreeSWITCH会有帮助。
在此章节,我们将会了解:
•一场电信业的革命
•FreeSWITCH的特性
•终端和拨号模块
•FreeSWITCH是怎么简化像语音留言这样复杂的应用的
一场革命已经开始,秘密已被揭开
对于大多数人来说,电话的工作原理是比较神秘的。
它的工作原理被保守为秘密已经许多年了。
我们仅仅是把我们的电话插到墙上的电话口里,然后它们正常使用了。
大多数人仅仅这样做,然后期待它们工作正常。
不过电信界的革命已经开始了,我们已经开始去解开这个电信业遗留的最关键秘密。
现在,像你我这样的普通人都有能力去创建比传统电信系统更好,同时可以以相对较低的价格提供高级功能的电话系统。
不少人已经将FreeSWITCH用于商业电话系统,获取利润。
FreeSWITCH已经把这一切变得更加的容易了,所以我们要看一下它的架构,更好的理解它是如何工作的。
如果这些概念听起来很晦涩难懂和抽象,不要担心和丧气,学习电话技术,特别是VOIP,可不是一朝一夕的事情,其实,我们建议你多读几遍本章节。
在你看第一遍的时候尽可能多的理解与吸收,然后当你读完了第五章后再重复温习一遍,理解了XML的拨号方案,你会惊讶的发现你对VOIP和FreeSWITCH的理解将会大大的提升。
当你读完第9章节的内容后再来略读它第三遍,通过外部命令来控制FreeSWITCH,在那时,你将会有一个深刻地领会到VOIP和FreeSWITCH的概念。
给自己一个充足的时间去消化这些陌生的新概念。
然后你就会发现你已经是一个非常牛的FreeSWITCH管理员。
如果你不气馁,你会对这个陌生而美妙的电话世界有一个有意义的认知。
电话和电话系统都是非常复杂难理解的,并且经过多年的发展,通讯变来越来越多样化。
在美国和英国最流行的电话当属传统模拟电话,我们也叫它POTSlines或纯粹老的电话服务(PlainOldTelephoneService)。
大多数我们今天使用的电话,从传统的MaBell电话到移动无线电话,同样一件事被掩盖--那就是他们背后的技术。
在最近的10到15年间,电脑和电话的技术交汇点,催生出了一对儿与POTSline通讯的便宜方案-----移动电话和VOIP电话(也叫网络电话)。
FreeSWITCH将多种电话通讯技术桥接在一起来适应如此混杂的通讯方案。
所以,我们可以无障碍的沟通,尽管这些通讯技术间不兼容,FreeSWITCH还可以桥接电话到你自己写的电脑程序上去,然后用从未发生过的方式来响应。
FreeSWITCH是一个可以运行在Windows和多种UNIX上,如MacOSX,linux,solaris和BSD上的软件。
这表示无论是你的家庭PC和高端的服务器,你都可以安装FreeSWITCH和使用FreeSWITCH处理电话呼叫。
关于如何安装FreeSWITCH我们将会在第二章节进行详细的讨论,编译和安装。
我们了解完了基础的架构后,我们就会立即进行安装。
FreeSWITCH的设计:
模块化,可扩展,稳定
FreeSWITCH的设计目标是提供一个围绕在switching核心的模块化,可扩展,并且为开发人员提供用来添加和控制系统的健全接口的通讯系统。
FreeSWITCH中的每一个分子都是彼此独立,同时不需要了解其他部分是如何工作,此外,每个分子所提供的我们叫作“裸露功能”。
FreeSWITCH的功能同样可以使用加载模块进行扩展,一种可以绑定外部功能到核心的特殊技术。
FreeSWITCH拥有很多不同的模块类型围绕在中央核心,比较像行星围绕着恒星公转一样。
列表如下:
ModuleType:
模块类型:
Purpose:
作用:
终端
电话协议像SIP.H.323和POTSlines。
拨号方案
分析通话详细信息和决定将通话路由到哪里
编码
音频格式之间的转换
应用
执行一个任务,像播放声音或设置数据
应用程序接口
(API)
导出一个接受text参数同时也返回text内容的函数,这种函数可以供跨模块或使用外部连接调用的函数。
文件
提供一个接口来提取和播放各种格式的音频文件的声音
(TTS)文本到语音转换
文本到语音引擎的接口。
自动语音识别ASR
语音识别系统的接口。
目录
连接目录信息服务到通用核心查找API,如LDAP。
Chat
桥接和交换多种聊天协议
Say
使用多种语言将语音文件串联,提供反馈播放像电话号码,时间,拼写单词,等等。
如图
通过各个模块接口的功能相结合,FreeSWITCH可以配置连接IP电话,POSTSlines和基于IP的电话服务。
它也可以转换音频格式和你可以自己创建带自定义菜单系统的接口。
你甚至可以从其他的机器上来控制一台正在运行中的Freeswitch服务器。
让我们从一个使用很广泛的模块终端模块来开始更进一步的观察。
Importantmodules:
EndpointandDialplan
重要模块:
终端和拨号方案
终端模块是极为重要的,添加了一些使FreeSWITCH变成现在强大平台的关键性的功能。
终端模块扮演的主要角色是添加通用的通信技术,然后将他们初始化成一个我们叫做session的抽象实体。
一个Session代表一个FreeSWITCH的和特定的协议之间的连接。
目前FreeSWITCH拥有好些个终端模块,已经实现了像SIP,H323,GTALK以及其他的通信协议。
我们将会花一些时间去了解freeswitch中一个比较常用叫mod_sofia的模块。
Sofia-SIP(http:
//sofia-)是一个由诺基亚(NOKIA)赞助的开源项目。
这个项目的设计之初是为会话发始协议也叫SIP做一个程序接口。
我们在FreeSWITCH中的mod_sofia模块中使用了这个库。
mod_sofia模块注册了所有在FreeSWITCH中创建模块的必要Hook.同时互相转换FreeSWITCH结构和SIP结构。
模块的配置信息取自FreeSWITCH的中心配置文件,允许mod_sofia加载用户定义的参数和详细连接信息。
这样FreeSWITCH就可以接受SIP电话设备的注册,注册到其他的SIP服务,发送通知,以及提供像语言留言这样的服务。
当一个SIP呼叫已经建立在FreeSWITCH与另一个SIP设备之间,它会在FreeSWITCH中显示为一个活动中的会话。
如果有电话打进来,可以将呼叫转移或格拉到IVR菜单,保持音乐,一个或多个分机,有许多其它的选择可用。
让我们来看一个典型的场景,当一个已经注册的SIP电话分机2000呼叫分机2001,希望建立一个呼叫。
首先,SIP电话通过网络发送一个呼叫建立消息(INVITE)到mod_sofia(mod_sofia正在侦听等待这类的消息).收到消息后,mod_sofia模块分析有关细节,同时将呼叫转入到FreeSWITCH的核心状态机。
下一步是寻找拨号方案模块,依据配置内容进行呼叫终端。
默认及最常用的拨号文案模块是XML拨号方案模块。
XML拨号方案模块设计用来从freeswitch的中央XML注册表中读取指令列表。
XML拨号方案模块使用正则表达式匹配来解析一系列的XML扩展对象。
当我们呼叫2001时,我们希望找到一个XMLextension测试其destination_number字段是否匹配“2001”,然后再使用相应的规则进行路由(route);拨号方案并不是限制仅匹配一个extension.
其实,在第五章,理解XML拨号方案,你将会得到extension的更详细的定义。
XML拨号方案为每一个通话创建了一种“tasklist”,每一个可以匹配的extension中的action都将会添加到通话的“tasklist”。
假设FreeSWITCH至少找到一个extension符合通话,XMLDiaplan将会插入一些尝试把通话连接到2001的一些说明到会话对象。
一旦这些instructions被插入到会话中,通话的状态由ROUTING转到EXECUTE状态,EXECUTE从列表中找下一个handlerdrill同时执行由ROUTING状态获得的instructions。
Thisiswheretheapplicationinterfacecomesintothepicture.每一个添加到session的instruction都使用包含应用名称和一个将要传到应用的数据参数.
在例子中我们要用的应用是bridge.这个应用的目的是创建一个session和另一个出站连接(outboundconnection),然后连接这两个session,开启语音交流。
我们提供给bridge的参数是user/2001,一个很简单的方式生成一个呼叫分机2001的通话。
一个2001拨号规则的条目可以看起来像这样:
Extension的名字是”example”,它只有一个条件可以匹配。
如果条件被匹配,它只有一个应用去执行。
用白话来说,刚才提到的extension,可以这样表达:
如果主叫拨打了2001,然后在主叫和对端(一个电话)2001确立一个连接。
思考一下这是怎样发生的。
一旦我们插入instructions到一个session,它的状态就会从切换到EXECUTE,FreeSWITCH的核心将会使用收集到的数据执行想要的行为.首先,默认执行的将会是解析命令以便于执行bridge到user/2001,然后它会寻找bridge应用,然后传送参数user/2001到bridge应用中.FreeSWTICH的核心将会建立一个所需类型的outboundsession.用户2001也是一个SIP电话,所以user/2001将会解析到一个SIP的拨号字符串,它将用来传送到mod_sofia去请求mod_sofia去创建一个新的outboundsession.
如果新的session建立成功,现在FreeSWTICH核心中会有两个session.
Bridge应用将会取得新的session和原来的session(主叫的电话),然后在它们之间执行bridgefunction.
这样只要分机2001的人实际上接听了电话,双向的语音流就可以传输了.
如果用户无法接听或繁忙,一个超时(这表示一个失败)将会产生,同时发送对应的MESSAGE到主叫的电话.
如果电话未接通或分机繁忙,很多的routing选项是可选择的,像呼叫转移或语音邮箱.
所有的一切都由一个简单的动作产生---拿起电话听筒然后拨打2001.
FreeSWTICH拥有复杂的SIP协议的全部,同时把它的复杂性减少到了一个commondenominator.
Fromthere,它通过允许我们来配置一个简单的指令到拨号规则实现连接电话2000到电话2001来进一步降低复杂度.
如果我们想让2001电话能拨打电
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第一章 freeswitch 架构 汇编