FreeSWITCH book: 前言
我们已经步入了一个新的时代。当前,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++开发。为了不“重复发明轮子”,它使用了大量的成熟的第三方软件库,功能丰富,可伸缩性强,并可以使用Lua、Javascript、Perl等多种嵌入式语言控制呼叫流程。另外,它还提供Socket接口,可以使用任何语言进行二次开发或与其它系统进行集成。最重要的是,它有一个非常友好、活跃的社区支持。如果你想到一项功能,可能过几天就实现了;如果你发现一个Bug,提交给开发者,通常第二天就修好了。FreeSWITCH是极少数的trunk代码比最新的发行版更稳定的项目之一。而与此相对的很多商业系统却常常需要很长的修复周期。
当然,我们在使用过程中也遇到不少问题,除了向开发者提交Bug外,我们也提交一些Patch,这不仅能在一定程度上能让FreeSWITCH按我们期望的方式工作,而且,也可以为开源事业做一点点贡献,从而也可以获得一些成就感。而这也正是我们最喜欢开源软件的原因。
FreeSWITH的文档非常丰富,它采用wiki系统,都是来自众多FreeSWITCH爱好者和实践者的奉献。不过,对于初学者来说,查阅起来还不是很方便。因此freeswitch-users邮件列表中也多次有人提到希望能有一本能系统地介绍FreeSWITCH的书。好像也已经有人在写,只是还没有见到。
FreeSWITCH在美国及其它国家已有很多的应用,但国内的用户还很少。2009年下半年,我创办了FreeSWITCH-CN,希望能跟更多说中文的朋友一起学习和交流。我曾经设想能找一些志同道合者把所有wiki资料都翻译成中文的。但由于各种原因一直未能实现。随着中文社区的日益发展壮大,越来越多的人向我提问问题,而我也没有太多的时间一一作答。与此同时,我在学习和使用的过程中积累了好多经验,因此,便有了自己写一本书的计划。
当然,上面提到,或者有人在写一本英文的书,但我相信我不是在重复发明轮子。我发现,好多人问问题时,并不是因为不懂FreeSWITCH,而是对一些基本理论或概念理解不清。当然,我不会像教科书上那样照本宣科的讲理论,事实上,我也讲不了。我只是希望能结合多年的工作经验,用一些比较通俗的语言把问题解释清楚,让与我遇到同样问题的朋友少走弯路。
章节与内容安排
以什么风格来写呢?曾听人说过,“写作的难处不是考虑该写些什么,而是需要决定什么不应该写进书里。”我深有感触。FreeSWITCH 官方 Wiki 上有几百页的资料,该从何写起呢?如果只是盲目照抄的话,只不过是相当于做了些翻译工作,也没什么意思;如果只是将一些功能及参数机械地罗列出来,那也不过相当于一个中文版的 Wiki。所以,我最后决定写成一个由浅入深步步摔推进的教程。
当然,在最初几章我还是介绍了一些基本概念及背景知识,这主要是给没有电信背景的人看的,另外,对从电路交换转到 VoIP来的读者也会很有帮助。这些内容是不能舍弃的。
接下来应该是安装和配置。笔者看到有不少的图书,在讲一个软件时,将整个的安装过程都会用图一步一步的列出来,有的甚至从如何安装 Linux 起,所有的步骤都抓了图。窃以为那真是太没必要,事实上,这几年在邮件列表中看到大家问得比较多的问题是“我装上了 FreeSWITCH,该怎么用啊?”,而不是“谁能告诉我怎么安装 FreeSWITCH啊?” 所以,如何取舍就显页易见了。本书仅在第二章中提到了如何安装,或许以后如果觉得不够,可以加一个附录,但绝对不会把如何安装 FreeSWITCH 单独作为一章。
实战部分,会以实际的例子讲配置,穿插讲解基本概念。如果有需要罗列的命令参考,在附录中给出。
附录也很重要。除重要的参考资料,背景知识等,还收集了一些我所知道的奇闻轶事。
另外,FreeSWITCH 一直处理很活跃的开发中,所以,某些章节可能刚写完就过时了,最新、最权威的参考还是官方的 Wiki。但是,本书所阐述的基本架构、理念,尤其是历史永远不会进时。
鉴于本书的内容安排,本书适合顺序阅读。
谁适合阅读本书?
- 学生。我看过一些学校的教材,大部分只是讲VoIP原理及SIP协议等,很枯燥。
- 教师。显而易见,你希望你的学生能理论与实践相结合。
- FreeSWITCH 初学者。本书肯定对你有帮助。
- FreeSWTICH 高级用户,开发人员。如果你喜欢 FreeSWITCH,也一定会喜欢这本书。
- VoIP爱好者,开发人员。他山之石,可以攻玉。即使你不使用FreeSWITCH,本书也会对你有帮助。
- 电信企业的维护人员、销售人员、决策人员。相信本书能使你更了解客户需求,以及如何才能为客户提供更好的服务。
- 其它企业管理人员。如果你知道电信业务其实还可以提供许多你所不知道的功能和业务,你肯定能很好地加以利用,带来的是效率、节省的是成本。
- 其它人员。开卷有益,而且,你会对你天天离不开的电话、手机,以及新兴的网络电话、即时通讯工具等有一个更好的了解,从而增加工作效率。
排版约定
本书是使用Markdown标记语言来写的,它比较简单,因此不能像 Latex 那样实现复杂的排版和交叉引用,但作为电子书,也差不多够用了。
命令,程序输出等都使用 HTML 的 PRE 标签。
本书插图由 yed,XMind生成,呼叫流程图就直接用了纯文本。
本书使用Discount转换成HTML。
为方便读者,书中术语首次出现时尽量给出英文及中文全称,如SIP(Session Initiation Protocal,会话初始协议)。
由于水平所限,存在错误在所难免,欢迎广大F友批评指正。
本书现在只是一个草稿,会不定期做改动,即使大的改动也不一定发布通知。
版权声名
本书内容采用 [知识共享 署名-非商业性使用-禁止演绎 2.5 中国大陆(CC-BY-NC-ND)][Licence] 授权.任何形式的转载均需加入本授权协议链接(或文本)以及指向本站的链接。
协议地址:http://creativecommons.org/licenses/by-nc-nd/2.5/cn/legalcode
本文地址:http://www.freeswitch.org.cn/document
致谢
FreeSWITCHTM是https://freeswitch.org的注册商标。 感谢Anthony Minessal及他的团队给我们提供了如此优秀的软件;同时感谢 FreeSWITCH 社区所有成员的热心帮助。本书的一些资料和例子来自FreeSWITCH Wiki及邮件列表,不能一一查证原作者,在此一并致谢。