《FreeSWITCH权威指南》前言


我们已经步入了一个崭新的时代。当前,VoIP已开始成为包括语音和视频在内的多媒体通信的主导并将在全世界范围内引领一场新的革命,而SIP(Session Initiation Protocol,会话初始协议)正是这场革命的核心。

试想一下我们常用的电子邮件,它仅能用于文字通信。从电子邮件诞生开始,经过三十几年的发展,到现在几乎人人都有了一个Email地址(有的人还有多个)。随着实时多媒体通信需求的增加及技术的发展,笔者相信在不久的将来,每个人都将会拥有一个用于多媒体通信的SIP地址。当前,因为互联网技术高速发展,使得数据流量的成本越来越低,而且随着3G、4G无线网络的不断发展与优化,以及各种智能移动终端的出现,网络更将无处不在,这就为SIP的进一步普及营造了必要的环境。在这种环境下,各种新型的SIP电话及可以运行在各种移动设备上的SIP客户端可以让用户以极低的成本与世界上任何一个角落的人通信。

为什么写这本书

大多数关于操作系统的图书均重理论而轻实践,而本书则在这两者之间进行了较好的折中

                            —— Andrew S. Tanenbaum

从第一次读Tanenbaum的《操作系统设计与实现》到现在已经十多年了,可这句写在那本书前言里的话到现在还让我记忆犹新。上大学时,我也曾学习过“程控交换网”、“移动通信”之类的专业知识,但那时只有肤浅的认识,理解不深。毕业后,我到烟台电信工作,负责程控交换机的维护。在工作中,我学到了电信网络传输与交换的各种技术,掌握了七号信令系统(SS7),算是做到了理论与实践相结合吧。那时候,VoIP还是很新的东西,由于网络条件的限制,国内也少有人用。2007年年底,我开始接触Asterisk。阅读了《Asterisk,电话未来之路》,并买了一个单口的语音卡,实现了VoiceMail、PSTN网关、SIP中继等各种功能。能在自己电脑上实现这些有趣的东西,令我非常兴奋。后来,我加入Idapted Inc.,开发一种一对一的网络教学平台。最初的后台语音交换系统也使用Asterisk,但不久后便转到了FreeSWITCH。那时我就深切意识到,FreeSWITCH必将成为Asterisk之后的通信领域的又一宠儿。于是便怀着无比的热情开始学习FreeSWITCH。

在学习和探索FreeSWITCH的过程中,我逐渐融入了FreeSWITCH社区,与全世界的开发者讨论各种VoIP技术、交流使用经验,这让我学到了许多知识。同时,在开发和使用FreeSWITCH的过程中我也积累了大量的使用和开发经验,并将这些知识和经验不时地更新到FreeSWITCH官方的Wiki上。Wiki是FreeSWITH文档的大本营,内容来自众多FreeSWITCH爱好者和实践者的奉献。不过,对于初学者来说,Wiki上的内容读起来还不是很系统,因此我就萌生了写一本书的想法。

本书面向的读者

本书作为国内第一本介绍FreeSWITCH的书,内容全面又不失深度,因此适合从事FreeSWITCH相关工作的各层次的读者阅读—对于初学者来说,本书是很好的入门教材;对于有一定经验的读者来说,本书可以提供更深入的指导和案例分析,帮助他们深入理清各功能点的来龙去脉;对于高级用户和开发者来说,本书也有详细的开发指导和最佳实战经验。

FreeSWITCH爱好者:对于FreeSWITCH爱好者来说,本书是最直接的需求。本书内容全面、介绍细腻和深度适当,是其他资料或同类书籍所没有的。

以FreeSWITCH为基础进行二次开发的人员:以FreeSWITCH为基础,可以进行呼叫中心、指挥调度、IP-PBX、互联网音频或视频等系统的开发。本书可以提供详尽、丰富的参考资料和实践经验,使这类读者少走弯路,甚至达到事半功倍的效果。

VoIP系统、软交换系统、电信设备开发人员:FreeSWITCH是开源领域的典范,又是同类系统中的佼佼者。本书对FreeSWITCH的原理、实现都做了深入探讨,还对源代码进行了导读和深入分析,可以带领读者很快了解现代软件的架构、逻辑及算法实现,因而很有借鉴意义。FreeSWITCH使用MPL许可证发布,完全不限制商业应用,因而广大开发者也可以完全站在巨人肩膀上,不重复发明轮子,迅速做出新的产品。

Asterisk开发者:跟大多数Asterisk开发者一样,我也是读着《Asterisk,电话未来之路》、《Trixbox不相信眼泪》一路走过来的。FreeSWITCH作为后起之秀,在许可证、系统架构和性能方面都有很好的优势。了解FreeSWITCH可以开拓读者的眼界和思路,不管是否转到FreeSWITCH,相信本书都会对你的职业生涯有所帮助。

FreeSWITCH系统实施、维护人员:对于FreeSWITCH相关呼叫中心、IP-PBX等系统的实施和维护人员来说,本书也是不可或缺的教材。事实上,本书第3章介绍了一个完整的FreeSWITCH IP-PBX搭建方案,通过对这一章的学习,企业的系统管理员可以很容易地用FreeSWITCH打造一个企业电话系统。

电信企业的维护人员、技术决策人员:广大电信企业的人员在以往的工作中积累了大量的工作经验,但往往依赖于华为、中兴等设备厂家提供的解决方案和技术架构。技术瞬息万变,在市场竞争日益激烈,国内电信政策调整并逐渐宽松之际(如虚拟运营商牌照的发放),只有了解另一种解题思路,并掌握了新技术,才能更好地把握市场方向,为客户提供更好的服务。

呼叫中心从业人员:可以预见,在不远的将来,将有很多呼叫中心是基于FreeSWITCH开发的。而本书中丰富的基础知识和详尽的功能介绍将对呼叫中心系统的使用、管理和决策起到很好的指导作用。

相关专业在校师生:笔者看过一些学校的教材,大部分只是讲VoIP原理及SIP协议等,很枯燥;而且,老师总是教育学生“要理论与实践相结合”,而本书正是理论与实战的最佳结合点。同时我也注意到,有一些学校的导师和研究生已经在围绕这个主题进行研究了。

与FreeSWITCH相关的开发经理、技术决策人员:FreeSWITCH是VoIP软交换软件的典范,但本书所讲的不仅仅是FreeSWITCH。书中以FreeSWITCH为例将枯燥的(包括通信、互联网以及软件开发)专业知识以浅显、直观、生动的语言呈现在读者面前;同时,对软件开发的模型、模式、架构、流程、状态机、接口设计等进行了普及和深入剖析。了解本书所讲的知识有助于技术选型和决策。

总之,FreeSWITCH是一个电话系统。我们人人都离不开电话,可以说,它将来可能出现在任何企业、部门及要使用电话的所有角落。进一步讲,FreeSWITCH完全超越了一个简单的电话系统,其应是一个更通用的通信系统平台,它可以完美地与互联网及移动互联网结合,创建前所未有的通信应用。古人云“开卷有益”,或云“他山之石,可以攻玉”。所以,即使你不使用FreeSWITCH,但只要从事与通信相关的工作,本书都会在扩充基础知识、开阔思路等方面对你有所帮助。

本书的内容及特色

作为专门介绍FreeSWITCH的第一本中文书,笔者对内容做了精心安排。为了照顾各种背景、各种水平的读者,也为了让读者更多地了解FreeSWITCH的方方面面,本书尽量选择了不同语言、不同场景、不同技术、不同实现方法的例子,力求使大家通过本书,对FreeSWITCH有一个全面而又深入的认识。

本书内容基于最新的FreeSWITCH 1.4版(功能和特性截止到2014年1月份的最新开发版本),从总体上分为三个部分:

第一部分 基础篇:作为本书的开篇,这部分首先介绍一些基本概念及背景知识,这部分内容主要针对没有电信背景的人。对从电路交换转到VoIP来的读者来说也会很有帮助。此外,这部分也详尽讲解了学习FreeSWITCH应该具备的基础知识,如基本的概念和术语、FreeSWITCH的基本架构、模块的组织、配置文件的组织、拨号计划和电话路由、SIP协议、媒体处理与媒体协商、NAT穿越,以及FreeSWITCH中的SIP模块(mod_sofia)等,并在第3章带领大家进行了完整的IP-PBX配置和体验。

读完本部分,读者就能具备独立使用和维护基本的FreeSWITCH系统的能力了。

第二部分 实战篇:要想学好FreeSWITCH,就必须做到理论与实践相结合,所以反复练习是必须的。这部分结合我在实际工作中的一些实际例子,介绍了在解决问题的过程中积累的经验。如第10章介绍了调试与排错的一般技巧、检查及分析系统日志的方法,并详细解释了呼叫是如何工作的。在后面的章节中还讲了一些基本功能的配置实例,如创建用户、IVR、录放音、TTS、呼叫排队、视频通话、多人电话会议、话单、计费、FreeSWITCH对接以及生产环境中的应用、系统的部署方式、拓扑结构、参数配置、安全性考虑及系统优化指南等。

通过这些内容,读者可以深入理解基础篇介绍的概念和理论,并且可以仿照这里的例子做出各种各样的应用。另外,这部分中有些例子甚至可以直接套用。

第三部分 高级篇:这部分主是面对开发者的。不过,即使不从事开发工作,学习一下本部分的内容也是很有帮助的。这部分除了讲开发之外,还对整个系统架构及内部实现进行了深入剖析。读完后你会觉得:噢,原来是这样的!

具体来讲,这部分讲了嵌入式脚本、Event Socket开发的基础知识以及通过这些开发技术实现的IVR、呼叫中心应用之类的各种例子。此外,还讲解了源代码阅读、编译的方法,并对源代码进行了深入分析。最后给出了一个在FreeSWITCH代码上进行源代码级二次开发的实例。读者可以通过自己动手实现各种呼叫功能和流程,进一步理解和巩固所学的知识,以便从根本上了解FreeSWITCH中的一切秘密。

排版及约定

  • 本书部分插图由XMind、Keynote、Graphviz、mscgen等工具生成。
  • 程序代码、系统的输入输出等大部分有行号。强调部分使用粗体字。
  • 有些程序代码行较长,为适应版面,进行了人工排版。
  • 提示符。对于命令行的输入输出来说,在Linux及Mac等UNIX类平台上,前面的“$”(或“#”,如果为root用户的话)符为操作系统命令提示符;在Windows系统上使用“C:\”作为操作系统命令提示符;“freeswitch>”作为FreeSWITCH(控制台以及fs_cli)系统提示符。在不至于引起混淆的情况下,可能会省略系统提示符。

除非有特别说明,本书中的Wiki一般指wiki.freeswitch.org ,Jira一般指jira.freeswitch.org 。

如何阅读本书

本书对内容和学习路线做了精心安排,对于大部分读者而言,适合顺序阅读(唯一例外的就是你可以先读后记部分)。当然,由于各种概念和理论都是相互联系的,因此,在读后面一些章节时回过头来复习和印证一下某些基本概念也是很有必要的。

对于刚进入通信领域的开发者来说,前面的通信历史和基础知识是非常有用的。只有了解了这些基础知识,才能更好地理解通信网中各个不同组成部分所发挥的作用以及它们之间的交互流程。对于有了通信基础却不熟悉FreeSWITCH的读者来说,可以简单浏览前面的通信基础知识,并通过第3章的FreeSWITCH体验对FreeSWITCH有一个直观的认识。对于比较熟悉FreeSWITCH的读者来说,本书的第4章到第9章也会帮助他们使以前零散的知识更加系统化。对于基于FreeSWITCH进行开发的普通开发者来说,在熟练掌握基础知识之后,再阅读本书第二部分,并同步做一些练习,会取得较好的效果。如果想直接在FreeSWITCH内部开发模块或修改FreeSWITCH的源代码,可接着顺序阅读第三部分的内容。

当然,笔者鼓励所有人都通读全书的内容,即使不做开发,后面有关开发的相关内容也有助于理解前面的基础知识。在通读本书一遍以后,根据自己的情况挑选相关的章节进行反复阅读和实验,以便将所有知识都融会贯通,从而使自己的水平更上一层楼。

此外,FreeSWITCH一直处于很活跃的开发中,所以某些章节中描述的内容可能与最新的版本有所出入,我将在本书相关的网站上进行跟踪说明。

实验环境及软、硬件设备选择

本书涉及的软件绝大部分都是开源软件(非开源的软件,笔者都进行了特殊说明),因此读者可以根据书中的指导自行安装和实验。

为了使书中的案例更真实,同时也为了方便大家在真实的硬件环境中进行实践,书中的实验我们均使用真实的硬件设备或软件产品进行。

作为一本技术书籍,我们在书中只讨论各种设备互连的技术性问题,而对于各厂商的设备好坏则不做评论。有条件的读者可以自行研究和比较。不过,如果读者在学习过程中想拿硬件设备做实验,但是不知道该选择哪款产品,我建议可以从本书中提到的设备中选择。推荐的理由有二:其一,这些设备我都亲自测试过;其二,书中的硬件都是现在市场上比较流行、口碑和质量都比较好的,这类硬件不容易出错,即使出错也容易找到技术支持。初学者往往对FreeSWITCH和硬件都不是很熟悉,因而在遇到问题时很难定位是硬件原因还是软件原因,以至于浪费宝贵的学习时间。至于在生产环境中大规模的应用,相信各公司都有专门的人研究,我在此就不敢妄言了。

资源和勘误

  • book.dujinfang.com 是本书的在线站点,提供本书的代码下载及勘误等。
  • freeswitch@dujinfang.com 是专门为本书设立的电子邮箱,如果您对本书有任何意见、建议或批评请发到该邮箱。
  • http://weibo.com/dujinfang 是我的微博,我很乐意与您进行交流。
  • FreeSWITCH-CN是FreeSWITCH中文社区的微信公共账号,您也可以关注该账号获取本书最新的情况,以及与本书作者进行交流。
  • www.freeswitch.org.cn是FreeSWITCH-CN中文社区的官方网站,经常关注该网站的更新,这样可以获取中文社区的最新信息。
  • www.hzbook.com 是华章公司的官网,您也可以到这里下载相关代码。

由于笔者水平所限,书中存在错误和疏漏在所难免,欢迎广大读者批评指正。

致谢

FreeSWITCHTM是OSTAG的注册商标。感谢Anthony Minessale及他的团队给我们提供了如此优秀的软件,也感谢他在本书写作时提供的耐心指导和答疑;同时感谢FreeSWITCH社区所有成员的热心帮助,使我在学习FreeSWITCH的道路上一帆风顺。本书的一些资料和例子来自FreeSWITCH Wiki及邮件列表,因不能一一查证原作者,故在此一并致谢。

感谢机械工业出版社华章公司。华章公司对中文原创计算机图书的信任让我倍感温馨。感谢杨福川策划,他对图书出版的理念带给我许多启发和写作的动力。感谢孙海亮和姜影编辑,他们的耐心和细致保证了本书的质量和写作进度。感谢方舟先生,他给了我许多写书的建议,并介绍我认识杨福川先生。感谢刘光大老师,是他帮我策划并将我带上了出版之路。

感谢我的妻子吕佳娉,她是本书的第一读者,常常帮我修订文字错误;偶尔,在我埋头写作时,悄悄地在我案头放一个削好的苹果;多少次,在我挑灯夜战的翌日清晨,做好早餐,冲好茶,自己悄悄去上班。感谢我的儿子杜昱凝,他很聪明,还不到4岁就会经常帮我测试电话了。在我写作时,他清脆的声音“喂,爸爸吗?……”经常萦绕在我的耳畔,鼓励我继续写下去。我也很内疚写书占用了好多本应该陪他玩耍的时间。

感谢Jonathan Palley先生,是他指导我走上了FreeSWITCH之路。感谢崔钢先生跟我一起创业,因为有了他管理公司的方方面面,才使我有更多的时间专注于FreeSWITCH;此外,他还写了本书第2章中有关呼叫中心的部分内容。感谢滨州公路工程总公司机械工程师张令考先生,他与笔者合作编写了第2章、第12章及第14章的部分内容。感谢高超、李洋、杨小金、景朝阳、李雪梅,他们或者写了一些例子,或者帮我进行了校对、测试、编辑和排版等。感谢程祝波,他维护着FreeSWITCH-CN QQ群,从而为大家提供了一个实时交流的平台,同时他也对本书的写作提了很多很好的意见。感谢Tim Yang先生,是他提供了本书自写作以来的第一笔捐款。感谢网友flyingnn及其他热心读者,他们对本书给予了积极的反馈并帮助我勘误,没有他们,便没有本书。

特别鸣谢

在本书写作时,得到了国内外一些硬件和设备厂商的赞助和支持,在此表示由衷地感谢。这些公司有(排名不分先后):Yealink(亿联)、Grandstream(潮流)、Newrock(迅时)、Dinstar(鼎信通达)、Sangoma(加拿大,及中国总代星昊通)、Vestec(加拿大)等。

                            杜金房




微信公众账号
FreeSWITCH-CN