没有合适的资源?快使用搜索试试~ 我知道了~
首页Freeswitch软件架构分析
Freeswitch软件架构分析

1. 背景 2 2. 项目需求 2 3. 部署 2 4. 软件框架 3 4.1模块描述 3 4.2软件架构 4 4.3模块加载机制 5 4.4应用(Applications) 6 4.4.1电话生命周期 6 4.4.2 mod_conference模块 8 4.4.3 mod_voicemail模块 14 4.4.4 mod_commands 14 4.4.5 mod_dptools 17 4.5 自动语音识别/语音合成 20 4.6 编码(Codecs) 20 4.7 拨号计划(Dialplan) 20 4.8 LDAP目录(Directories) 22 4.9 终端(Endpoints) 22 4.9.1 mod_sofia 23 4.9.2 mod_openzap 26 4.10事件处理(Event Handlers) 27 4.11文件格式(File Formats) 30 4.12语言(Languages) 30 4.13日志(Loggers) 30 4.14定时器(Timers) 30 4.15 XML(xml interface) 30 4.16核心库(core libary) 30 4.16.1事件 30 4.16.2任务调度 31 4.16.3日志 32 4.16.4 SQLDB 32 4.16.5 session状态监测线程 32 4.16.6 其它 32
资源详情
资源评论
资源推荐

Freeswitch 软件架构分析
背景
项目需求
部署
软件框架
模块描述
软件架构
模块加载机制
应用
电话生命周期
模块
模块
自动语音识别语音合成
编码( )
拨号计划(!)
"!# 目录(!)
$终端(%
$
$&
事件处理%'
文件格式((()
语言(")*))
日志(")))
定时器+
,-"(.)
核心库(/0)
事件
任务调度
日志
12"!3
状态监测线程
其它

本 文 基 于 45 的 源 码 和 46 文 档 分 析 45 软 件 架 构 。 76 文 档 的 网 址 是 : 58
4645)46-#)。
1. 背景
(179+ ' 开发者 50-99 过去曾是 6#3, 系统的开发者之一,原来给 6
贡献了不少代码,但根据他在其主页上的描述,他在 6 上开发了有关呼叫队列的应用,但呼叫队列
达到一定程度后会引起死锁和崩溃,作者感觉按照原有 6 的设计思路无法彻底解决这个问题。而
6 的许多开发者又不附和他的建议:即搞一个 的分支来重写代码。于是 年夏天作者决定自
己开发一个项目,就是 45。
(179+ ' 是 以 撰 写 而 成 的 开 放 源 码 电 话 应 用 软 件 , 可 以 连 接 19#
'、9,、"!#、:、,-##;),<)+6 等现有技术,架构出开放源码 #3, 系统或
开 放 源 码 的 =9# 交 换 平 台 。 同 时 (>179+ ' 也 能 跟 现 今 各 种 开 放 源 码 #3, 系 统 , 如
?#3,、30、@+%、6 等,相互整合。扮演软交换角色的 (179+ ',可以接受来自各
类 =9# 协定或类比与数位设备的输入,将其彼此连接,让软体电话、9# 电话与类比电话互通。特别的是,
这套软件还可以用简单的脚本语言)*)回应通话或执行 ++1+.15,文字语音转换传
输等程序,达成让 (179+ ' 朗读网路上的新闻 等效果。按 (179+ ' 开发者的说法,6
更 适 合 于 小 型 的 #3, , 而 (179+ ' 则 是 一 个 软 交 换 系 统 6*#3,
(179+ '*45。
2. 项目需求
公司研发的 9- 系统中缺少电话互通、电话会议、语音信箱等功能,所以计划将在系统中集成
45。企业使用 5 主要目的是将其作为电话软交换系统使用,根据数码庄园的要求,公司内
部组建电话交换系统,实现内部软电话或 电话与外部电话或软电话互通。基于以上原因,分析
45 系统时主要分析电话互通、电话会议、语音信箱这三方面。
3. 部署
根据需求,画出 45 在企业内部的部署图,图中没有画出另一端通信端点,根据以后的要求进
一步扩展。图中的虚线表示 45 服务器插上 % 板块直接连接到 #1+A 网络。19# 网关连接 ,
实现和其它的远程 19# 客户端通信。
拓扑图只描述了 45 部署中的关键设备,在实际中,还会有防火墙等其它网络设备如防火墙 ,

45 具有 A+ 功能,可以很好的与防火墙兼容。
4. 软件框架
4.1 模块描述
被分成几类模块,模块以 或 动态加载(关于加载机制在 稍后的段落中描
述),在需要时执行模块提供的 或 接口。模块加载的配置文件是
,文件中可以设置需要加载的模块, 启动后,会根据此文件内容加载模块。下面
模块分类列表:
应用。
自动语音识别 语音合成 !"# $$ !
编码( )
拨号计划( % )
&%! !
!!!!
目录(! !%! !)提供访问 &% 服务器功能
终端( ' !各种协议终端 如 19# 协议等
事件处理'(!!
文件格式( ! )例如 4 文件格式
语言( &## ) 如 #05 和 ;1 的嵌入式语言

4.2 软件架构
下 图 是 各 个 模 块 的 依 赖 关 系 图 。 上 层 是 对 外 提 供 的 接 口 , 包 括
1? B%+、'++#、##、#9、 ?A1?"%。为用户提供了多中控制接口。其中 1? B%+ 接口是 %=%A+
'A!"%C1 提供,用户可以远程连接 (1 并通过其发送 #9 命令、-1< 等控制 (1 的行为。,-"
9A+%C( % 对外提供了通过 7%3 方式控制 (1,数据格式是 '++# 协议。%A!#?9A+1 是提供了各种协
议终端,如 19#、1+%C91B 等。
关于这些模块的具体功能在稍后的章节中描述。
4.3 模块加载机制
变量 ...* 类型是:
0*45/**/D
E45F
E45*F
E45*5*45*4F
E45***F
E45*))F
G45/**/F
每 一 个 模 块 都 会 在 自 己 的 实 现 文 件 中 定 义 一 个 全 局 上 面 的 结 构 变 量 , 如
*,结构变量中包含三个函数指针:、5*4 和 *。(1 加载模块
是根据 *. 文件内容加载模块。以 模块为例,(1 读取(如 "*. 系统下调用
函数读取)* 结构变量的地址,然后调用 函数, 函数会将
###9 接口加载到不同类别 '1' 表里。在以后调用模块接口时,根据 ## 或 #9 的名称作为
'1' 的 60 定位,并调用 ## 或 #9 函数。
## 和 #9 接 口 加 载 完 成 后 , 检 查 模 块 是 否 有 * 函 数 , 如 果 有 为 此 函 数 创 建
45/*.线程,线程循环调用 * 函数。
当模块需要卸载时,会检查是否有 5*4 函数,如果有调用它完成退出和释放资源。
下图是加载的流程图:
剩余32页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论25