摘要:近年來,Asterisk已經成為開源項目中語音交換和PBX的標準,而且基于Asterisk的VoIP解決方案也成為許多中小企業的首選方案。在此討論了開源項目Asterisk的體系結構及其功能,并以Linux為網絡操作平臺,以Asterisk作為開發工具,以MySQL作為數據庫支持構建一種基于SIP的電話會議系統。這里提出的基于SIP協議的IP電話系統設計具有投資小,成本低,方便實用,可靠性強,安全性好等優點。由于系統設計規范,管理模塊集中化,不僅降低了成本,而且更便于系統的操作和維護。該系統秉承了TCP/UDP協議族的簡單性,絕大多數功能都能通過軟件實現,且可進行簡單的改進,以滿足不同的應用和需要。
關鍵詞:開源軟件; Asterisk; VoIP; 撥號方案; 電話會議系統
中圖分類號:TP393.02文獻標識碼:B
文章編號:1004-373X(2010)08-0077-03
Research and Design of Teleconference System Based on Asterisk
LIU Wei
(Fuzhou Institute of Technology, Fuzhou 350108, China)
Abstract:In recent years, Asterisk has become a standard ofvoice exchange and PBX in the open source projects, and a solution based on Asterisk for VoIP has become the first choice of many small and medium enterprises. The system structure and its function of Asterisk Open-source project are discussed. A SIP-based teleconference system is estallished by taking Linux as the networkoperation platform, Asterisk as a developmental tooland MySQL as database′s support. SIP-based IP telephone system has the charactescstics ofsmall investment, low cost, convenience, reliabilityand security. the system can meet different applications and needs after a simple modification because the system inherits the simplicity of TCP/UDP protocol, and most of functions is realized by softwares.
Keywords:open-source software; Asterisk; VoIP; dial plan; teleconference system
0 引 言
近年來,通信行業的開源項目不斷涌現,打破了傳統電信設備制造商對電信技術的壟斷,為下一代網絡(NGN)的發展注入了無限活力[1]。Asterisk是一個由Digium公司發起的開放源代碼軟件,以通用公共許可證(GNU GPL)的授權方式發行。Asterisk運行在Linux上,以軟件的方式實現了(專用分組交換機,PBX)的大部分功能,是一個較全面的通信平臺,既支持傳統的模擬電話設備和數字電話設備,也支持新興的基于網絡的VoIP語音系統。Asterisk在小企業預算可承受的范圍內提供了商業交換機的功能和可伸縮性。
1 基于Asterisk技術的電話會議系統研究
1.1 Asterisk特點
Asterisk[2]是一款完全用軟件實現,可以運行在Linux,BSD,MacOS X等操作系統上的IP分組交換機產品,是世界上最著名的開源VoIP服務器軟件之一,為各國的VoIP愛好者所癡迷。實際上,Asterisk已經成為開源項目中語音交換和PBX的標準,而且基于Asterisk的VoIP解決方案也已成為許多中小企業的首選方案。Asterisk可以使用目前流行的編解碼器和協議將VoIP電話系統與傳統的公共交換電話系統集成起來,以較低的通話費用,提供較高的語音質量。
Asterisk可以連接數目眾多的接口類型,包括模擬接口、數字線路,也可以透明地橋接VoIP之間的一些協議,包括SIP,H.323,IAX,MGCP等協議。
1.2 Asterisk體系結構
Asterisk體系結構簡單,與傳統電話技術的不同之處在于本質上扮演著一個中間件的角色,連接底層不同的電話技術到上層應用,創建了一個部署異構電話技術互通的持久性通信環境。
Asterisk是基于模塊化設計的,多種模塊都可以在運行中通過動態模塊加載并初始化,用戶可以根據實際需要動態增加相應的模塊。Asterisk提供了四種基本的API函數集[3],以便于不同組件的交互,如信道API、Codec轉換器API、文件格式API及應用程序API。對于應用程序API允許第三方廠商開發基于Asterisk的應用程序,本文正是通過這些接口,完成在電話呼叫階段與Asterisk的交互,實現電話會議系統。
1.3 系統開發環境
在開發系統時,由于Asterisk源碼便于在Linux中編譯和運行,相對比較安全,對中小型軟件的研發中,Linux可成為開發的首選操作系統。因此本系統選擇Redhat Linux 9.0服務器版,在此基礎上安裝Asterisk軟件包,該設計系統使用Asterisk開源平臺[4]。Asterisk的核心主要由三個包組成:Asterisk主程序(Asterisk)、Zapate電話驅動(Zaptel)和PRI庫(libpri),還有一些其他軟件,如語音附加包等。要實現電話會議,只需在Asterisk上對zaptel.conf,zapata.conf,sip.conf,extensions.conf和meetme.conf 進行配置,就可以通過固定模擬電話、SIP 電話完成常規呼叫和電話會議等功能[5]。開發語言采用PHP/MySQL/Apache。
2 基于Asterisk技術的電話會議系統設計
2.1 設計方案
該系統是基于Web的電話會議業務,用戶可以通過軟終端、普通話機、SIP硬終端、手機等參加Web會議。會議管理員通過Web頁面預約會議,并對會議進行實時管理,會議信息通過Web頁面顯示。
Web電話會議系統的功能包括預約會議、創建會議、呼叫成員、會議結束后處理一些計費等一些基本的步驟。當許多用戶并發開會時,如何保證用戶間的獨立性;大部分API都是異步調用,如何同步整個邏輯流程;這些都是在此設計中重點考慮的問題。
(1) 業務邏輯與Web服務器的通信[6]。后臺業務需要接收并處理Web頁面發來的請求,同時向頁面反饋處理結果。后臺要響應所有頁面Session發來的請求,因此這個問題可以分解為兩個問題,一個是通信機制;另一個是頁面Session與后臺會議的對應關系。這個問題涉及到Web電話會議系統的架構,Web Conference業務是基于Web的業務,通過Asterisk軟件平臺提供的API/AGI實現。
(2) 業務邏輯對呼叫會話的管理。在開會過程中每個會議都要對應一個會議呼叫會話(CCSession),通過這些呼叫會話向AGI網關發API調用請求,接收AGI網關的響應,區分響應該交給哪個業務處理,是對什么請求的響應。
(3) 業務邏輯對會議的管理。后臺要并發處理多個會議,必須把這些會議組織起來。向上要提供會議狀態,向下能夠區分接收的API響應屬于哪個會議或成員。
2.2 設計思路
經過分析可以得出,Web電話會議系統的設計思路是:通過用戶登錄到Web服務器啟動業務,頁面通過PHPAGI調用Asterisk Manager API Action實現與 Asterisk平臺的交互。Asterisk調用AGI來訪問數據庫讀取相應數據,并通過撥號方案、Meetme達到會議呼叫、會議管控與會議計費等功能,如圖1所示。
圖1 電話會議系統設計流程圖
2.3 設計開發舉例
(1) Extensions.conf:Asterisk的核心配置文件,該配置文件形成PBX的呼叫方案。
電話打進處理:
[dialin-conf]
exten => _X.,1,ExecIf($[ \"${EXTEN}\" = \"011862556787948\" ],Set,CHANNEL(language)=cn)
exten => _X.,n,ExecIf($[ \"${EXTEN}\" = \"011862556787947\" ],Goto,amytest|meet|1)
exten => _X.,n,Set(play=conference/conf-getconfno|try=1)
exten => _X.,n(read),Read(data,${play},10,,3,5)
exten => _X.,1,ExecIf($[ \"${EXTEN}\" = \"011862556787948\" ],Set,CHANNEL(language)=cn)
exten => _X.,n,ExecIf($[ \"${EXTEN}\" = \"011862556787947\" ],Goto,amytest|meet|1)
exten => _X.,n,Set(play=conference/conf-getconfno|try=1)
exten => _X.,n(read),Read(data,${play},10,,3,5)
exten => _X.,n,AGI(conf_admin.php,${data})
其中:agi conf_admin.php 是根據用戶輸入信息讀取會議資料屬性;011862556787948是被允許訪問的中國號碼。
Web觸發電話呼入處理:
[conference]
exten => s,1,Hangup
exten => s,n,AGI(conf_admin.php,${data})
exten => s,n,NoOp(${Agent})
exten => s,n,Set(CALLERID(name)=${name}|MEETME_RECORDINGFORMAT=gsm|MEETME_EXIT_CONTEXT=
conference-exit|MEETME_RECORDINGFILE=/usr/local/ferser/var/spool/meetme/conf-rec-${data})
(2) Meetme.conf:用于配置 MeetMe 會議系統。在配置文件中,這里可以定義會議室和進入會議的密碼來建立一個電話會議。
(3) Zaptel.conf:用于配置連接傳統模擬電話硬件接口,建立一個FXS 和FXO 通道。
(4) Zapata.conf:用于為系統中安裝的電話硬件配置Asterisk接口。通過zaptel.conf 和zapata.conf 對FXS/FXO 接口通道進行配置,可以將模擬話機經過FXS 接口,PSTN 經過FXO或E1/T1接入到Asterisk服務器,也可以通過SIP協議,經過軟交換實現VoIP的落地。
(5) Sip.conf:用于配置SIP協議。該文件的開始是一個[general]section,包含通道設置,所有用戶和對端的默認選項。可以對系統注冊的每個用戶設置用戶名、連接類型、認證密碼和指令地點(用于控制電話的權限,以及如何處理此號碼的呼入呼叫)。
通過以上配置文件的設置,即可實現電話會議系統的功能[7]。
另外,Asterisk有開源數據庫MySQL和開源編程語言PHP,Perl接口,所有經過Asterisk服務器的呼叫詳細記錄(CallDetailRecord)都被記錄在數據庫中,如雙方的號碼、ID、通話時間等。根據產生的呼叫詳細記錄信息,可以監控通信流量,進行流量統計和通話計費,而且Asterisk的數據庫能和企業的現有數據庫整合到一起。用戶還可以通過PHP語言開發的Web程序對MySQL進行維護。
3 結 語
這里提出的基于SIP協議的IP電話系統設計具有投資小,成本低,方便實用,可靠性強,安全性好等優點。該系統建立在通用的計算機網絡上,可在局域網或Internet上使用,對用戶無特殊要求,另外還可擴展成融文本、視頻會議于一體的網絡交互式多媒體系統;由于終端較多地借助了PC資源,所以系統具備了較高的智能性;系統設計規范,管理模塊集中化,不僅降低了成本,而且更便于系統的操作和維護。由于該系統秉承了TCP/UDP協議族的簡單性,絕大多數功能都能通過軟件實現,且可進行簡單的改進,因此可以滿足不同的應用和需要。
隨著IP技術的發展,傳統電信網絡將逐步向IP網絡發展,NGN是融合多業務的IP網,是電信網絡的發展方向。Asterisk與Linux等開源項目結合,可以在原有網絡基礎上為企業提供IP語音解決方案,具有廣闊的應用前景。Asterisk以其獨特的優勢獲得越來越多企業的青睞。開源項目在通信行業的不斷發展,會給通信業注入無限的活力。
參考文獻
[1]蔡康, 李洪, 朱英軍, 等. 下一代網絡(NGN)業務及運營\\. 北京: 人民郵電出版社, 2004.
[2]Asterisk: 電話未來之路CHN 2.0\\. \\. http: //www. asterisker. cn.
[3]湯卓凡, 欒杰. 基于Asterisk的VoIP解決方案\\. 計算機系統應用, 2005(7): 79-81, 26.
[4]王繼鵬, 張維. 基于Asterisk構架企業通信系統的研究\\. 科學技術與工程, 2007, 7(5): 738-741.
[5]賴鋒. Asterisk on Rails的應用研究\\. 電腦知識與技術, 2006(12): 107, 118.
[6]甘洪波. 基于寬帶智能網平臺的Web電話會議系統\\. 成都: 電子科技大學, 2006.
[7]GOMILLION David, DEMPSTER Barrie. Building Tele-phony Systems with Asterisk\\. UK: Packt Publishing, 2005.