《FreeSWITCH:VoIP實戰<前言>》

Seven Du發表於2013-03-11

我們已經步入了一個新的時代。當前,VoIP已開始成為語音通訊的主導並將在全世界範圍內引領一場革命,而SIP(Session Initiation Protocal,會話初始協議)必將是這場革命的核心。

試想一下我們常用的電子郵件,它用於文字通訊,經過三十幾年的發展,到現在幾乎是人人都有一個Email地址了。而在不久的將來,每個人也將會擁有一個用於語音及視訊通訊的SIP地址。隨著網際網路的高速發展,資料流量的成本會越來越低。而且,隨著3G、4G及WiMax無線網路的發展,網路更將無處不在,各種新型的SIP電話及可以執行在各種移動裝置上的SIP客戶端可以讓你以極低的成本與世界上任何一個角落的人通訊。

為什麼寫一本書?

“大多數關於作業系統的圖書均重理論而輕實踐,而本書則在這兩者之間進行了較好的折中。”                             --- Andrew S. Tanenbaum

從第一次讀Tanenbaum的《作業系統設計與實現》到現在已經好多年了,可這句寫在前言裡的話到現在我還記憶猶新。在學校裡,也曾學習過《程控交換網》、《行動通訊》之類的知識,但那時只有膚淺的認識,理解不深。畢業後,我應聘到電信局(這個名字也許太老了。中國電信業在短短的幾年內經過了數次重組改制,我離開時叫網通,電信局是我剛參加工作時的名字)工作,負責程控交換機的維護。在工作中我學到了PSTN網路交換的各種技術,掌握了七號信令系統(SS7),算是做到了理論與實踐相結合吧。那時候,VoIP還是很新的東西,由於網路條件的限制,國內也少有人用。2007年底,我開始接觸Asterisk。閱讀了《Asterisk, 電話未來之路》,並買了一個單口的語音卡,實現了VoiceMail,PSTN閘道器,SIP中繼等各種功能。能在自己電腦上實現這些有趣的東西,令我感到非常興奮。後來,我加入Idapted Inc.,做一種一對一的網路教學平臺。最初的後臺語音系統也使用Asterisk,但不久後便轉到FreeSWITCH。雖然當時FreeSWITCH還是不到1.0的Beta版,但已經顯出了比Asterisk高几倍的效能,並且相當穩定。

FreeSWITCH的主要作者Anthony Minessal曾有多年的Asterisk開發經驗,後來由於他提的一些設想未得到社群管理者的支援,便獨立開發了FreeSWITCH,並以開源軟體釋出。FreeSWITCH主要使用C、C++開發。為避免“重複發明輪子”,它使用了大量的成熟的第三方軟體庫。FreeSWITCH功能豐富,可伸縮性強,並可以使用Lua、Javascript、Perl等多種嵌入式語言控制呼叫流程。除此之外,它還提供Evetn Socket介面,可以使用任何語言進行二次開發或與其它系統進行整合。最重要的是,它有一個非常友好、活躍的社群支援。我不止一次遇到這樣的情況---某天想到一項新功能,可能過幾天就被實現了;發現一個Bug,提交給開發者,一覺醒來就修好了(我睡覺的時候正好美國是白天)。FreeSWITCH是極少數的git master分支程式碼比最新的發行版更穩定的專案之一。而與此相對的很多商業系統如果發現問題卻常常需要很長的修復週期。

當然,我們在使用過程中也遇到不少問題,除了向開發者報告漏洞(BUG)外,我們也提交一些補丁(Patch),這不僅能在一定程度上能讓FreeSWITCH按我們期望的方式工作,而且,也可以為開源事業做一點點貢獻,從而也可以獲得一些成就感。而這也正是我們最喜歡開源軟體的原因。

FreeSWITH的文件^1非常豐富,它採用wiki系統,內容都是來自眾多FreeSWITCH愛好者和實踐者的奉獻。不過,對於初學者來說,查閱起來還不是很方便。因此freeswitch-users郵件列表中也多次有人提到希望能有一本能系統地介紹FreeSWITCH的書。FreeSWITCH官方後來響應了這個寫書的計劃,但是進展不快。

FreeSWITCH在美國及歐洲其它國家已有很多的應用,但國內的使用者還很少。2009年下半年,我創辦了FreeSWITCH-CN ^2,希望能跟更多說中文的朋友一起學習和交流。我曾經設想能找一些志同道合者把所有wiki資料都翻譯成中文的。但由於種種原因一直未能實現。隨著中文社群的日益發展壯大,越來越多的人向我提問問題,而我也沒有太多的時間一一作答。與此同時,我在學習和使用的過程中積累了好多經驗,因此,便有了自己寫一本書的計劃。當時想,如果能在官方的書出版之前寫出一些東西,該有多酷啊。

我相信我這麼做不是在重複發明輪子。因為我發現,好多人問問題時,並不是因為不懂FreeSWITCH,而是對一些基本理論、概念或邏輯理解不是很清楚。當然,我不會像教科書上那樣照本宣科的講理論,事實上,我也講不了。我只是希望能結合多年的工作經驗,用一些比較通俗的語言講一些解決實際問題的思路,讓與我遇到同樣問題的朋友少走彎路。

後來,FreeSWITCH官方曾在2010年和2012年分別出版了《FreeSWITCH 1.0.6》以及《FreeSWITCH Cookbook》,而我的進度卻一直遲遲不前。我的書不僅沒趕在官方第一本書前面,也沒趕在第二本前面。這都是後話。

章節與內容安排

以什麼風格來寫呢?曾聽人說過,“寫作的難處不是考慮該寫些什麼,而是需要決定什麼不應該寫進書裡。”我對此深有感觸。FreeSWITCH官方Wiki上有幾百頁的資料,該從何寫起呢? 如果只是盲目照抄的話,只不過是相當於做了些翻譯工作,也沒什麼意思;如果只是將一些功能及引數機械地羅列出來,那也不過相當於一箇中文版的Wiki。所以,我最後決定寫成一個由淺入深步步推進的教程,並搭配一些我在工作中用到的實際的例子。

在最初幾章,我介紹了一些基本概念及背景知識,這主要是給沒有電信背景的人看的,另外,對從電路交換轉到VoIP來的讀者也會很有幫助。這些內容是不能捨棄的。

接下來應該是安裝和配置。筆者看到有不少的圖書,在講一個軟體時,將整個的安裝過程都會用圖一步一步的列出來。比如有些講Linux的書,甚至從如何安裝Linux 起,所有的步驟都抓了圖。竊以為那真是太沒必要,事實上,這幾年在FreeSWITCH郵件列表中看到大家問得比較多的問題是“我裝上了 FreeSWITCH,該怎麼用啊?”,而不是“誰能告訴我怎麼安裝FreeSWITCH啊?” 所以,如何取捨就顯而易見了。本書僅在第二章中提到了如何安裝,或許以後如果覺得不夠,可以加一個附錄,但絕對不會把如何安裝FreeSWITCH單獨作為一章。

實戰部分,則以實際的例子講配置,穿插講解或複習一些基本概念。如果有需要羅列的命令參考,則在附錄中給出。

附錄也很重要。除重要的參考資料,背景知識等,還收集了一些我所知道的奇聞軼事。

另外,FreeSWITCH一直處於很活躍的開發中,所以,某些章節可能剛寫完就過時了,最新、最權威的參考還是官方的Wiki。但是,無論如何,本書所闡述的基本架構、理念,尤其是歷史永遠不會過時。

鑑於本書的內容安排,本書適合順序閱讀(唯一例外的就是---你可以先讀後記部分)。

誰適合閱讀本書?

  • 學生:我看過一些學校的教材,大部分只是講VoIP原理及SIP協議等,很枯燥;
  • 教師:顯而易見,老師總是教育學生“要理論與實踐相結合”;
  • FreeSWITCH初學者:本書肯定對你有幫助;
  • FreeSWITCH高階使用者、開發人員:如果你喜歡FreeSWITCH,也一定會喜歡這本書;
  • VoIP愛好者、開發人員:他山之石,可以攻玉。即使你不使用FreeSWITCH,本書也會對你有幫助;
  • 電信企業的維護人員、銷售人員、決策人員:相信本書能使你瞭解新技術,更瞭解客戶需求,以及如何才能為客戶提供更好的服務;
  • 其它企業管理人員:如果你知道電信業務其實還可以提供許多你所不知道的功能和業務,你肯定能很好地加以利用,帶來的是效率、節省的是成本;
  • 其它人員:開卷有益,而且,你會對你天天離不開的電話、手機,以及新興的網路電話、即時通訊工具等有一個更好的瞭解,進而增加工作效率。

排版約定

  • 本書使用Latex^3排版。
  • 部分插圖由yed、XMind、keynote等生成,呼叫流程圖就直接使用了純文字。
  • 程式程式碼、系統的輸入、輸出等均使用等寬字型,大部分有行號。強調部分使用粗體字,某些英文專有名詞、特殊符號等則使用斜體字。
  • 有些程式程式碼行較長,為適應版面,進行了人工換行,一般都會標有“人工換行”標記。有些無關緊要的程式碼則任其超出版面。
  • 本書中所稱Wiki一般指 wiki.freeswitch.org,除非有特別說明。

為方便讀者,書中術語首次出現時儘量給出英文及中文全稱,如:SIP(Session Initiation Protocal,會話初始協議)。

由於水平所限,存在錯誤和疏漏在所難免,歡迎廣大讀者朋友批評指正。

本書現在只是一個草稿,會不定期做改動,即使大的改動也不一定釋出通知。

版權宣告

本書版權歸作者杜金房^dujinfang所有,保留所有權利。

致謝

FreeSWITCH^TM^是http://www.freeswitch.org的註冊商標。 感謝Anthony Minessal及他的團隊給我們提供瞭如此優秀的軟體;同時感謝FreeSWITCH社群所有成員的熱心幫助。 本書的一些資料和例子來自FreeSWITCHWiki郵件列表,不能一一查證原作者,在此一併致謝。

感謝我的妻子呂佳娉,她不僅幫我修訂文字錯誤,還時常在我埋頭寫作時在我案頭放一個削好的蘋果。感謝Jonathan Palley先生,是他指導我走上了FreeSWITCH之路。感謝崔鋼先生跟我一起創業,他管理公司的方方面面,使我有更多的時間專注於FreeSWITCH。感謝高超,他校對了本書前面一些章節。感謝Kenny Bloom,他幫我設計了本書封面。感謝程祝波,他維護著FreeSWITCH-CN QQ群,給大家提供一個實時交流的平臺。感謝Tim Yang先生,他提供了本書寫作以來的第一筆捐贈。感謝網友flyingnn及其它熱心讀者,他們對本書給予了積極的反饋並幫助我刊誤。沒有他們,便沒有此書。

                                 杜金房                               2012年6月於北京和園國際青年旅舍

相關文章