FreeSWITCH使用說明

第二章 FreeSWITCH 初步

什麼是 FreeSWITCH ?

FreeSWITCH 是一個開源的電話交換平臺,它具備很強的可伸縮性--從一個簡單的軟電話客戶端到運營商級的軟交換設備幾乎無所不能。能原生地運行於Windows、 Max OS X、Linux、BSD 及 solaris 等諸多32/64位平臺。能夠用做一個簡單的交換引擎、一個PBX,一個媒體網關或媒體支持IVR的服務器等。它支持SIP、H32三、Skype、Google Talk等協議,並能很容易地與各類開源的PBX系統如sipXecs、Call Weaver、Bayonne、YATE及Asterisk等通訊。 FreeSWITCH 遵循RFC並支持不少高級的SIP特性,如 presence、BLF、SLA以及TCP、TLS和sRTP等。它也能夠用做一個SBC進行透明的SIP代理(proxy)以支持其它媒體如T.38 等。FreeSWITCH 支持寬帶及窄帶語音編碼,電話會議橋可同時支持八、十二、1六、2四、32及48kHZ的語音. 而在傳統的電話網絡中,要作到三方通話或多方通話須要經過專門的芯片來處理,其它像預付費,彩鈴等業務在PSTN網絡中都須要依靠智能網(IN)才能實現,並且配置起來至關不靈活。

快速體驗

FreeSWITCH 的功能確實很是豐富和強大,在進一步學習以前咱們先來作一個完整的體驗。FreeSWITCH 默認的配置是一個SOHO PBX(家用電話小交換機),那麼咱們本章的目標就是從0安裝,實現分機互撥電話,測試各類功能,並經過添加一個SIP-PSTN網關撥打PSTN電話。這樣,即便你沒有任何使用經驗,你也應該能順利走完本章,從而創建一個直接的認識。在體驗過程當中,你會遇到一點稍微複雜的配置,若是不能徹底理解,也不用擔憂,咱們在後面會詳細的介紹。固然,若是你是一個頗有經驗的 FreeSWITCH 用戶,那麼大可跳過本章。

安裝FreeSWITCH基本系統


在本文寫做時,最新的版本1.0.5pre10,但說不定當你讀到時1.0.5正式版已經發布了。FreeSWITCH支持32位及64位的 Linux、 MacOSX、BSD、Solaris、Windows等衆多平臺。某些平臺上有編譯好的安裝包,但本人強烈建議從源代碼進行安裝,由於 FreeSWITCH 更新很是快,而已編譯好的版本一般都比較舊。你能夠下載源碼包,也能夠直接從SVN倉庫中取得最新的代碼。與其它項目不一樣的是,其SVN主幹 (trunk)代碼一般比穩定的發佈版更穩定。並且,當你須要技術支持時,開發人員也一般建議你先升級到SVN中最新的代碼,再看是否是仍有問題。

Windows用戶能夠直接下載安裝文件 http://files.freeswitch.org/windows_installer/freeswitch-1.0.4.exe (再提醒一下,版本比較舊代,若是從源代碼安裝的話,須要Visual Studio 2008)。安裝完成執行 c:\freeswitch\freeswitch.exe 即可啓動,其配置文件都在c:\freeswitch\conf\。

如下假定你使用 Linux 平臺,並假定你有 Linux 的基本知識。如何從頭安裝 Linux 超出了本書的範圍,並且,你也能夠很容易的從網上找到這些資料。通常來講,任何發行套件都是能夠的,可是,有些發行套件的內核、文件系統、編譯環境,LibC 版本會有一些問題。因此,若是你在遇到問題後想得到社區支持,最好選擇一種你們都熟悉的發行套件。FreeSWITCH 開發者使用的平臺是 CentOS 5.2/5.3(CentOS 5.4 上會有一些問題,並不老是版本越高越好),社區中也有許多人在使用 Ubuntu 和 Debian,若是你想用於生產環境,建議使用 LTS(Long Term Support) 的版本,即 Ubuntu8.04/10.04 或 Debian Stable。在安裝以前,咱們須要先準備一些環境(FreeSWITCH 能夠以普通用戶權限運行,但爲了簡單起見,如下全部操做均用 root 執行):

CentOS:

yum install -y subversion autoconf automake libtool gcc-c++ ncurses-devel make

Ubuntu:

apt-get -y install build-essential subversion automake autoconf wget libtool libncurses5-dev

如下三種安裝方式任選其一,默認安裝位置在/usr/local/freeswitch。安裝過程當中會下載源代碼目錄,請保留,以便之後升級及安裝配置其它組件。

解壓縮源碼包安裝:

wget http://latest.freeswitch.org/freeswitch-1.0.5-latest.tar.gz
tar xvzf freeswitch-1.0.5-latest.tar.gz
cd freeswitch-1.0.5
./configure
make install

這是在在 Linux 上從源代碼安裝軟件的標準過程。首先第 1 行下載最新的源代碼,第 2 行解壓縮,第 4 行配置編譯環境,第 5 行編譯安裝。

從 SVN 倉庫安裝:

FreeSWITCH 使用 Subversion 管理源代碼,從代碼庫安裝能讓你永遠使用最新的版本。

svn co http://svn.freeswitch.org/svn/freeswitch/trunk freeswitch
cd freeswitch
./bootstrap.sh
./configure
make install

與上一種方法不一樣的是,直接從代碼庫安裝須要執行一個 bootstrap.sh 以初始化一些環境。

最快安裝(推薦)

wget http://www.freeswitch.org/eg/Makefile && make install

以上命令會下載一個 Makefile,而後使用 make 執行安裝過程。安裝過程當中它會從 SVN 倉庫中獲取代碼,實際上執行的操做跟上一種安裝方式相同。

安裝聲音文件

在如下例子中咱們須要一些聲音文件,而安裝這些聲音文件也異常簡單。你只需在源代碼目錄中執行:

make sounds-install
make moh-install

如下高質量的聲音文件可選擇安裝。FreeSWITCH支持八、1六、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、H32三、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)按鈕會變成綠色的。以下圖。

激動人心的時刻就要來了。輸入「9999」按回車(或按綠色撥打電話按鈕),就應該能聽到保持音樂(MOH, Music on Hold)。若是聽不到也不要氣餒,看一下 FS-Con 中有沒有提示什麼錯誤。若是有「File Not Found」之類的提示,多半是聲音文件沒有安裝,從新查看 make moh-install 是否有錯誤。接下來,能夠依次試試撥打如下號碼:

------------------
號碼 | 說明
----------------------
9999 | 保持音樂
9996 | echo,迴音測試
××× | info,在控制檯上顯示呼叫參數
9888 | FreeSWITCH電話會議,每週召開
5900 | 呼叫掛起
5901 | 接聽掛起的呼叫
5000 | 示例IVR
4000 | 聽取語音信箱
33xx | 電話會議,48K(其中xx可爲00-99,下同)
32xx | 電話會議,32K
31xx | 電話會議,16K
30xx | 電話會議,8K
2000-2002 | 呼叫組
1000-1019 | 默認分機號

表一: 默認號碼及說明

另外,也許你想嘗試註冊另一個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="destionation_number"
expression="^(10[01][0-9])$"> 一行,改成 <condition field="destionation_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/profile/internal/1000 &echo (撥打1000並執行echo程序)
FS> originate user/1000 &echo (同上)
FS> originate sofia/profile/internal/1000 9999 (至關於在軟電話1000上撥打9999)
FS> originate sofia/profile/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 的哲學,學到更多的調試技術和技巧,解決任何問題都會是小菜一碟了。node

相關文章
相關標籤/搜索