Ubuntu:

apt-get -y install build-essential automake autoconf git-core wget libtool
apt-get -y install libncurses5-dev libtiff-dev libjpeg-dev zlib1g-dev

从 Git 仓库安装:

从代码库安装能让你永远使用最新的版本:

git clone git://git.freeswitch.org/freeswitch.git
cd freeswitch
./bootstrap.sh
./configure
make install

这是在在 Linux 上从源代码安装软件的标准过程。首先第1行使用git工具从软件仓库中下载最新的源代码,第3行执行bootstrap.sh初始化一些编译环境,第4行配置编译环境,第5行编译安装。

解压缩源码包安装:

wget http://files.freeswitch.org/freeswitch-1.2.rc2.tar.bz2
tar xvjf http://files.freeswitch.org/freeswitch-1.2.rc2.tar.bz2
cd freeswitch-1.2
./configure
make install

与上一种方法不同的是,它不需要执行过bootstrap.sh(打包前已经执行过了,因而不需要automake和autoconf工具),便可以直接配置安装。

安装声音文件

在以下例子中我们需要一些声音文件,而安装这些声音文件也异常简单。你只需在源代码目录中执行:

make sounds-install
make moh-install

以下高质量的声音文件可选择安装。FreeSWITCH支持8、16、32及48kHz的语音,很少有其它电话系统支持如此多的抽样频率(普通电话是8K,更高频率意味着更好的通话质量)。

make cd-sounds-install
make cd-moh-install

安装完成后,会显示一个有用的帮助,

+---------- FreeSWITCH install Complete ----------+
+ FreeSWITCH has been successfully installed. +
+ +
+ Install sounds: +
+ (uhd-sounds includes hd-sounds, sounds) +
+ (hd-sounds includes sounds) +
+ ------------------------------------ +
+ make cd-sounds-install +
+ make cd-moh-install +
+ +
+ make uhd-sounds-install +
+ make uhd-moh-install +
+ +
+ make hd-sounds-install +
+ make hd-moh-install +
+ +
+ make sounds-install +
+ make moh-install +
+ +
+ Install non english sounds: +
+ replace XX with language +
+ (ru : Russian) +
+ ------------------------------------ +
+ make cd-sounds-XX-install +
+ make uhd-sounds-XX-install +
+ make hd-sounds-XX-install +
+ make sounds-XX-install +
+ +
+ Upgrade to latest: +
+ ---------------------------------- +
+ make current +
+ +
+ Rebuild all: +
+ ---------------------------------- +
+ make sure +
+ +
+ Install/Re-install default config: +
+ ---------------------------------- +
+ make samples +
+ +
+ Additional resources: +
+ ---------------------------------- +
+ http://www.freeswitch.org +
+ http://wiki.freeswitch.org +
+ http://jira.freeswitch.org +
+ http://lists.freeswitch.org +
+ +
+ irc.freenode.net / #freeswitch +
+-------------------------------------------------+

至此,已经安装完了。在Unix类操作系统上,其默认的安装位置是/usr/local/freeswtich,下文所述的路径全部相对于该路径。 两个常用的命令是 bin/freeswitch 和 bin/fs_cli,为了便于使用,建议将这两个命令做符号链接放到你的搜索路径中,如:

ln -sf /usr/local/freeswitch/bin/freeswitch /usr/local/bin/
ln -sf /usr/local/freeswitch/bin/fs_cli /usr/local/bin/

当然,如果 /usr/local/bin 不在你的搜索路径中,可以把上面 /usr/local/bin 换成 /usr/bin/。 另外你也可以修改你的PATH环境变量以包含该路径。

接下来就应该可以启动了,通过在终端中执行freeswitch命令(如果你已做符号链接的话,否则要执行/usr/local /freeswitch/bin/freeswitch)可以将其启动到前台,启动过程中会有许多log输出,第一次启动时会有一些错误和警告,可以不用 理会。启动完成后会进入到系统控制台(以下称称FS-Con)。并显示类似的提示符“freeswitch@internal>”(以下简作 “FS> ”)。通过在FS-Con中输入shutdown命令可以关闭FreeSWITCH。

如果您想将FreeSWITCH启动到后台(daemon,服务模式),可以使用freeswitch -nc (No console)。后台模式没有控制台,如果这时想控制FreeSWITCH,可以使用客户端软件fs_cli连接。注意,在fs_cli中需要使用 fsctl shutdown 命令关闭 FreeSWITCH。当然,也可以直接在 Linux 提示符下通过 freeswitch -stop 命令关闭。如果不想退出 FreeSWITCH 服务,只退出fs_cli客户端,则需要输入 /exit,或Ctrl + D,或者,直接关掉终端窗口。

连接SIP软电话

FreeSWITCH最典型的应用是作为一个服务器(它实际上是一个背靠背的用户代理,B2BUA),并用电话客户端软件(一般叫软电话)连接到 它。虽然 FreeSWITCH 支持 IAX、H323、Skype、Gtalk 等众多通信协议,但其最主要的协议还是 SIP。支持SIP的软电话有很多,最常用的是 X-Lite 和 Zoiper。这两款软电话都支持 Linux、MacOSX 和 Windows平台,免费使用但是不开源。在 Linux 上你还可以使用 ekiga 软电话。

强烈建议在同一局域网上的其它机器上安装软电话,并确保麦克风和耳机可以正常工作 。当然,如果你没有多余的机器做这个实验,那么你也可以在同一台机器上安装。只是需要注意,软电话不要占用 UDP 5060 端口,因为 FreeSWITCH 默认要使用该端口,这是新手常会遇到的一个问题。你可以通过先启动 FreeSWITCH 再启动软电话来避免该问题,另外有些软电话允许你修改本地监听端口。

通过输入以下命令可以知道 FreeSWITCH 监听在哪个IP地址上,记住这个 IP 地址(:5060以前的部分),下面要用到:

netstat -an | grep 5060 

FreeSWITCH 默认配置了 1000 ~ 1019 共 20 个用户,你可以随便选择一个用户进行配置:

在 X-Lite 上点右键,选 Sip Account Settings...,点Add添加一个账号,填入以下参数(Zoiper 可参照配置):

Display Name: 1000
User name: 1000
Password: 1234
Authorization user name: 1000
Domain: 你的IP地址,就是刚才你记住的那个

其它都使用默认设置,点 OK 就可以了。然后点 Close 关闭 Sip Account 设置窗口。这时 X-Lite 将自动向 FreeSWITCH 注册。注册成功后会显示"Ready. Your username is 1000",另外,左侧的“拨打电话”(Dial)按钮会变成绿色的。如下图。

激动人心的时刻就要来了。输入“9664”按回车(或按绿色拨打电话按钮),就应该能听到保持音乐(MOH, Music on Hold)。如果听不到也不要气馁,看一下 FS-Con 中有没有提示什么错误。如果有“File Not Found”之类的提示,多半是声音文件没有安装,重新查看 make moh-install 是否有错误。接下来,可以依次试试拨打以下号码:

------------------
号码 | 说明
----------------------
9664 | 保持音乐
9196 | echo,回音测试
9195 | echo,回音测试,延迟5秒
9197 | milliwatte extension,铃音生成
9198 | TGML 铃音生成示例
5000 | 示例IVR
4000 | 听取语音信箱
33xx | 电话会议,48K(其中xx可为00-99,下同)
32xx | 电话会议,32K
31xx | 电话会议,16K
30xx | 电话会议,8K
2000-2002 | 呼叫组
1000-1019 | 默认分机号 表一: 默认号码及说明

详情见 http://wiki.freeswitch.org/wiki/Default_Dialplan_QRF

另外,也许你想尝试注册另外一个SIP用户并在两者间通话。最好是在同一个局域网中的另外一台机器上启动另一个 X-Lite ,并使用 1001 注册,注册完毕后就可以在 1000 上呼叫 1001,或在 1001 上呼叫 1000 。当然,你仍然可以在同一台机器上做这件事(比方说用Zoiper注册为1001),需要注意的是,由于你机器上只有一个声卡,两者可能会争用声音设备。 特别是在Linux上,有些软件会独占声音设备。如果同时也有一个USB接口的耳机,那就可以设置不同的软件使用不同的声音设备。

配置简介

FreeSWITCH配置文件默认放在 conf/, 它由一系列XML配置文件组成。最顶层的文件是freeswitch.xml,系统启动时它依次装入其它一些XML文件并最终组成一个大的XML文件。

文件                                |    说明
---------------------------------------------------
vars.xml | 一些常用变量
dialplan/default.xml | 缺省的拨号计划
directory/default/*.xml | SIP用户,每用户一个文件
sip_profiles/internal.xml | 一个SIP profile,或称作一个SIP-UA,监听在本地IP及端口5060,一般供内网用户使用
sip_profiles/externa.xml | 另一个SIP-UA,用作外部连接,端口5080
autoload_configs/modules.conf.xml | 配置当FreeSWITCH启动时自动装载哪些模块

添加一个新的SIP用户

FreeSWITCH默认设置了20个用户(1000-1019),如果你需要更多的用户,或者想通过添加一个用户来学习FreeSWITCH配置,只需要简单执行以下三步:

  • 在 conf/directory/default/ 增加一个用户配置文件
  • 修改拨号计划(Dialplan)使其它用户可以呼叫到它
  • 重新加载配置使其生效

如果想添加用户Jack,分机号是1234。只需要到 conf/directory/default 目录下,将 1000.xml 拷贝到 1234.xml。打开1234.xml,将所有1000都改为1234。并把 effective_caller_id_name 的值改为 Jack,然后存盘退出。如:

<variable name="effective_caller_id_name" value="Jack"/> 

接下来,打开 conf/dialplan/default.xml,找到 <condition field="destination_number"
expression="(10[01][0-9])$"> 一行,改为 <condition field="destination_number" expression="(10[01][0-9]|1234)$">。熟悉正则表达式的人应该知道,“(10[01][0-9])$”匹配被叫号码1000-1019。因此我们修改之后的表达式就多匹配了一个1234。FreeSWITCH使用Perl兼容的正则表达式(PCRE)。

现在,回到FS-Con,或启动fs_cli,执行 reloadxml 命令或按快捷键F6,使新的配置生效。

找到刚才注册为1001的那个软电话(或启动一个新的,如果你有足够的机器的话),把1001都改为1234然后重新注册,则可以与1000相互进 行拨打测试了。如果没有多台机器,在同一台机器上运行多个软电话可能有冲突,这时,也可以直接进在FreeSWITCH控制台上使用命令进行测试:

FS> sofia status profile internal  (显示多少用户已注册)
FS> originate sofia/internal/1000 &echo (拨打1000并执行echo程序)
FS> originate user/1000 &echo (同上)
FS> originate sofia/internal/1000 9999 (相当于在软电话1000上拨打9999)
FS> originate sofia/internal/1000 9999 XML default (同上)

其中,echo() 程序一个很简单的程序,它只是将你说话的内容原样再放给你听,在测试时很有用,在本书中,我们会经常用它来测试。

FreeSWITCH用作软电话

FreeSWITCH也可以简单的用作一个软电话,如X-Lite. 虽然相比而言比配置X-Lite略微麻烦一些,但你会从中得到更多好处:FreeSWITCH是开源的,更强大、灵活。关键是它是目前我所知道的唯一支持CELT高清通话的软电话。

FreeSWITCH使用mod_portaudio支持你本地的声音设备。该模块默认是不编译的。到你的源代码树下,执行:

make mod_portaudio
make mod_portaudio-install

其它的模块也可以依照上面的方式进行重新编译和安装。然后到FS-Con中,执行:

FS> load mod_portaudio 

如果得到“Cannot find an input device”之类的错误可能是你的声卡驱动有问题。如果是提示“+OK”就是成功了,接着执行:

FS> pa devlist

API CALL [pa(devlist)] output:
0;Built-in Microphone;2;0;
1;Built-in Speaker;0;2;r
2;Built-in Headphone;0;2;
3;Logitech USB Headset;0;2;o
4;Logitech USB Headset;1;0;i

以上是在我笔记本上的输出,它列出了所有的声音设备。其中,3和4最后的“o”和“i”分别代表声音输出(out)和输入(in)设备。在你的电脑上可能不一样,如果你想选择其它设备,可以使用命令:

FS> pa indev #0
FS> pa outdev #2

以上命令会选择我电脑上内置的麦克风和耳机。

接下来你就可以有一个可以用命令行控制的软电话了,酷吧?

FS> pa looptest    (回路测试,echo)
FS> pa call 9999
FS> pa call 1000
FS> pa hangup

如上所示,你可以呼叫刚才试过的所有号码。现在假设想从SIP分机1000呼叫到你,那需要修改拨号计划(Dialplan)。用你喜欢的编辑器编辑以下文件放到conf/dialplan/default/portaudio.xml

<include>
<extension name="call me">
<condition field="destination_number" expression="^(me|12345678)$">
<action application="bridge" data="portaudio"/>
</condition>
</extension>
</include>

然后,在FS-Con中按“F6”或输入以下命令使之生效:

FS> reloadxml 

在分机1000上呼叫“me”或“12345678”(你肯定想为自己选择一个更酷的号码),然后在FS-Con上应该能看到类似“[DEBUG] mod_portaudio.c:268 BRRRRING! BRRRRING! call 1”的输出(如果看不到的话按“F8”能得到详细的Log),这说明你的软电话在振铃。多打几个回车,然后输入“pa answer”就可以接听电话了。“pa hangup”可以挂断电话。

当然,你肯定希望在振铃时能听到真正的振铃音而不是看什么BRRRRRING。好办,选择一个好听一声音文件(.wav格式),编辑conf/autoload_configs/portaudio.conf.xml,修改下面一行:

<param name="ring-file" value="/home/your_name/your_ring_file.wav"/> 

然后重新加载模块:

FS> reloadxml
FS> reload mod_portaudio

再打打试试,看是否能听到振铃音了?

如果你用不惯字符界面,可以看一下FreeSWITCH-Air(http://www.freeswitch.org.cn /download),它为 FreeSWITCH 提供一个简洁的软电话的图形界面。另外,如果你需要高清通话,除需要设置相关的语音编解码器(codec)外,你还需要有一幅好的耳机才能达到最好的效 果。本人使用的是一款USB耳机。

配置SIP网关拨打外部电话

如果你在某个运营商拥有SIP账号,你就可以配置上拨打外部电话了。该SIP账号(或提供该账号的设备)在 FreeSWITCH 中称为SIP网关(Gateway)。添加一个网关只需要在 conf/sip_profiles/external/ 创建一个XML文件,名字可以随便起,如gw1.xml。

<gateway name="gw1">
<param name="realm" value="SIP服务器地址,可以是IP或IP:端口号"/>
<param name="username" value="SIP用户名"/>
<param name="password" value="密码"/>
<param name="register" value="true" />
</gateway>

如果你的SIP网关还需要其它参数,可以参阅同目录下的 example.xml,但一般来说上述参数就够了。你可以重启 FreeSWITCH,或者执行以下命令使用之生效。

FS> sofia profile external rescan reloadxml 

然后显示一下状态:

FS> sofia status 

如果显示 gateway gw1 的状态是 REGED ,则表明正确的注册到了网关上。你可以先用命令试一下网关是否工作正常:

FS> originate sofia/gateway/gw1/xxxxxx &echo() 

以上命令会通过网关 gw1 呼叫号码 xxxxxx(可能是你的手机号),被叫号码接听电话后,FreeSWITCH 会执行 echo() 程序,你应该能听到自己的回音。

从某一分机上呼出

如果网关测试正常,你就可以配置从你的SIP软电话或portaudio呼出了。由于我们是把 FreeSWITCH 当作 PBX 用,我们需要选一个出局字冠。常见的 PBX 一般是内部拨小号,打外部电话就需要加拨 0 或先拨 9 。当然,这是你自己的交换机,你可以用任何你喜欢的数字(甚至是字母)。 继续修改拨号计划,创建新XML文件: conf/dialplan/default/call_out.xml :

<include>
<extension name="call out">
<condition field="destination_number" expression="^0(\d+)$">
<action application="bridge" data="sofia/gateway/gw1/$1"/>
</condition>
</extension>
</include>

其中,(\d+)为正则表达式,匹配 0 后面的所有数字并存到变量 $1 中。然后通过 bridge 程序通过网关 gw1 打出该号码。当然,建立该XML后需要在Fs-Con中执行 reloadxml 使用之生效。

呼入电话处理。

如果你的 SIP 网关支持呼入,那么你需要知道呼入的 DID 。 DID的全称是 Direct Inbound Dial,即直接呼入。一般来说,呼入的 DID 就是你的 SIP 号码,如果你不知道,也没关系,后面你会学会如何得到。 编辑以下XML文件放到 conf/dialplan/public/my_did.xml

<include>
<extension name="public_did">
<condition field="destination_number" expression="^(你的DID)$">
<action application="transfer" data="1000 XML default"/>
</condition>
</extension>
</include>

reloadxml 使之生效。上述配置会将来话直接转接到分机 1000 上。在后面的章节你会学到如何更灵活的处理呼入电话,如转接到语音菜单或语音信箱等。

小结

其实本章涵盖了从安装、配置到调试、使用的相当多的内容,如果你能顺利走到这儿,你肯定对 FreeSWITCH 已经受不释手了。如果你卡在了某处,或某些功能未能实现,也不是你的错,主要是因为 FreeSWITCH 博大精深,我不能在短短的一章内把所有的方面解释清楚。在后面的章节中,你会学到更多的基本概念、更加深入地了解 FreeSWITCH 的哲学,学到更多的调试技术和技巧,解决任何问题都会是小菜一碟了。

本文参考自http://www.freeswitch.org/node/202,但非翻译作品,且已通知原作者。

FreeSWITCH 1.2.5.3 Step by Step Install的更多相关文章

  1. Step by step Dynamics CRM 2011升级到Dynamics CRM 2013

    原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...

  2. Step by Step 创建一个新的Dynamics CRM Organization

    原创地址:http://www.cnblogs.com/jfzhu/p/4012833.html 转载请注明出处 前面演示过如何安装Dynamics CRM 2013,参见<Step by st ...

  3. Step by step Install a Local Report Server and Remote Report Server Database

    原创地址:http://www.cnblogs.com/jfzhu/p/4012097.html 转载请注明出处 前面的文章<Step by step SQL Server 2012的安装 &g ...

  4. Step by step Dynamics CRM 2013安装

    原创地址:http://www.cnblogs.com/jfzhu/p/4008391.html 转载请注明出处   SQL Server可以与CRM装在同一台计算机上,也可安装在不同的计算机上.演示 ...

  5. Step by step 活动目录中添加一个子域

    原创地址:http://www.cnblogs.com/jfzhu/p/4006545.html 转载请注明出处 前面介绍过如何创建一个域,下面再介绍一下如何在该父域中添加一个子域. 活动目录中的森林 ...

  6. SQL Server 维护计划实现数据库备份(Step by Step)(转)

    SQL Server 维护计划实现数据库备份(Step by Step) 一.前言 SQL Server 备份和还原全攻略,里面包括了通过SSMS操作还原各种备份文件的图形指导,SQL Server  ...

  7. 转:eclipse以及step into step over step return的区别

    首先来讲一下step into step over step return的区别: step into就是单步执行,遇到子函数就进入并且继续单步执行:(F5) step over是在单步执行时,在函数 ...

  8. [转]Bootstrap 3.0.0 with ASP.NET Web Forms – Step by Step – Without NuGet Package

    本文转自:http://www.mytecbits.com/microsoft/dot-net/bootstrap-3-0-0-with-asp-net-web-forms In my earlier ...

  9. EF框架step by step(7)—Code First DataAnnotations(2)

    上一篇EF框架step by step(7)—Code First DataAnnotations(1)描述了实体内部的采用数据特性描述与表的关系.这一篇将用DataAnnotations描述一下实体 ...

  10. EF框架step by step(6)—处理实体complex属性

    上一篇的中介绍过了对于EF4.1框架中,实体的简单属性的处理 这一篇介绍一下Code First方法中,实体Complex属性的处理.Complex属性是将一个对象做为另一个对象的属性.映射到数据库中 ...

随机推荐

  1. java System.getProperty()参数大全

    java.version Java Runtime Environment versionjava.vendor Java Runtime Environment vendorjava.vendor. ...

  2. 这是个简单的UTF8转码的小Demo

    NSString *name = @"你好啊"; NSString *string = [NSString stringWithFormat:@"%@",nam ...

  3. discuz中方法

    discuz中检验是否是邮箱 function isemail($email) { && strlen($email) <= && preg_match(&quo ...

  4. 枚举类valueOf方法的疑问

    枚举类中valueOf方法只有一个参数而Enum类中有两个参数,请问Enum实例类中的valueOf方法是从何处继承而来?   答案:jvm进行编译的时候添加的.

  5. 《CoffeeScript应用开发》学习:第五章 CoffeeScript中的类

    在CoffeeScript中定义类 在CoffeeScript中,使用class定义类,使用关键字new实例化对象. 给类绑定方法 class Airplane takeOff: -> cons ...

  6. mysql实用操作

    1.查看某个表的建表语句 show create table thetable -- thetable为待查表名

  7. lnmp

    参照http://www.osyunwei.com/archives/8867.html,略有改动 一 .系统约定 软件源代码包存放位置:/usr/local/src 源码包编译安装位置:/usr/l ...

  8. 9.7 js进阶总结2

    数组元素添加 将一个或多个新元素添加到数组结尾,并返回数组新长度 var week_len = week.push(‘星期四’,‘星期五’); 将一个或多个新元素添加到数组开始,数组中的元素自动后移, ...

  9. GDT 学习笔记逻辑地址和线性地址计算,因为是自学,所以这只是我的个人理解,不对的请大家指导。

    在 bochs 刚开始的时候 gdt 是未知的,需要通过实模式的16位代码段初始化 gdt 信息, 在 lgdt 指令之后,即可以使用程序自定义的 GDT 表了. 假如:gdt 初始地址为 0x7c7 ...

  10. 只有一个radio的单选框如何在选中后取消选中

    <input type="radio" id="all" value="1" name="executeRadio" ...