在UNIX类系统上,FreeSwitch 默认安装位置:/usr/local/freeswitch/;在Windows上,C:\Programming Files\FreeSwitch

目录结构

FreeSwitch 目录结构_xml

sounds:存放了各种声音文件。

FreeSwitch 目录结构_配置文件_02

en 表示英语、us表示美式英语、Callie 表示嗓音。

配置文件

配置文件由许多 XML 文件组成。

FreeSwitch 目录结构_XML_03

FreeSwitch 目录结构_XML_04

freeswitch.xml是最重要的配置文件,作用是将所有配置文件粘到一起。完整的 XML 文档包括:configuration(配置)、dialplan(拨号计划)、charplan(聊天计划)、directory(用户目录)、phrase(分词),每一部分又有不同的配置。

FreeSwitch 目录结构_xml_05

FreeSwitch 目录结构_XML_06

X-PRE-PROCESS是一个预处理命令。

编辑 vars.xml

FreeSwitch 目录结构_xml_07

如在调试阶段想把一条X-PRE-PROCESS指令注释掉:

FreeSwitch 目录结构_配置文件_08

当FreeSwitch预处理是,还没有到XMl解析阶段,会将预处理命令替换为以下:

FreeSwitch 目录结构_XML_09

由于XMl的注释不能嵌套,会产生错误的XML。解决办法:破坏预处理命令

FreeSwitch 目录结构_配置文件_10

由于FreeSwitch不认识xX-PRE-RPOCESS 和 XPRE-RPOCESS,会忽略该行。

vars.xml 主要通过X-PRE-PROCESS指令定义了一些局部变量,如:

FreeSwitch 目录结构_xml_11

系统自动设置的变量

FreeSwitch 目录结构_配置文件_12

FreeSwitch 目录结构_配置文件_13

查看这些变量的值:

FreeSwitch 目录结构_xml_14

autoload_configs 目录下的各种配置文件会在系统启动时装入。

例如:sofia.conf.xml

FreeSwitch 目录结构_XML_15

FreeSwitch 目录结构_xml_16

profiles 标签可通过X-PRE-PROCESS指令装入其他的配置文件。

FreeSwitch 目录结构_xml_17

aotoload_configs/modules.conf.xml 决定了freeswitch启动时自动加载那些模块。

FreeSwitch 目录结构_xml_18

dialplan目录:定义了xml拨号计划

ivr_menues目录:存放了默认的一些IVR菜单的例子

directory目录:决定了freeswitch作为注册服务器时,那些用户可以注册。

XML 用户目录

用户目录的默认文件:conf/directory/,系统自带的配置文件为 default.xml

FreeSwitch 目录结构_XML_19

该配置文件决定了那些用户能注册到freeswitch中。所有用户都属于一个domain。

在domain中定义了许多组(group),组里面包含很多用户(user)

FreeSwitch 目录结构_xml_20

使用type=“pointer”

FreeSwitch 目录结构_xml_21

显示Alice的设置

FreeSwitch 目录结构_XML_22

呼叫相关概念

如果Bob和Alice通话,典型的呼叫流程主要有以下两种:

FreeSwitch 目录结构_XML_23

来去话、Session、Channel与call

Bob 到 freeswitch 的通话称为来话;freeswitch 作为一个B2BUA在去呼叫Alice时,称为去话。

无论来话还是去话,对每一次呼叫,freeswitch都会启动一个session(会话),用于控制整个呼叫,会一直持续到通话结束。其中,每个session控制一个channel(通道、信道),channel是一对UA的实体。

通话时,freeswitch的作用是将两个channel桥接到一起,使得双方通话。这两路桥接的通话在逻辑上组成一个通话(call)。

回铃音与Early Media

A与B通过两天交换机通话

FreeSwitch 目录结构_xml_24

A呼叫B,B话机开始振铃,A端可听到回铃音(Ring Back Tone)。回铃音和彩铃是不收费的。这些回铃音就称为Early Media。

全局变量和局部变量

可以使用X-PRE-PROCESS在freeswitch中设置一些变量,后续使用$${var}的形式来引用。这些变量是全局有效的。

另外一些变量在Dialplan、app或directory中设置的,他们会影响呼叫流程且可以被动态改变。一般与一个channel有关,称为通道变量。可以以${var}形式引用,仅在channel的生命周期有效。