logo资料库

FreeSwitch-Voip实战.pdf

第1页 / 共120页
第2页 / 共120页
第3页 / 共120页
第4页 / 共120页
第5页 / 共120页
第6页 / 共120页
第7页 / 共120页
第8页 / 共120页
资料共120页,剩余部分请下载后查看
FreeSWITCH:VoIP实战
目录
FreeSWITCHbook:前言
为什么写一本书?
章节与内容安排
谁适合阅读本书?
排版约定
第一章PSTN与VoIP
PSTN起源
模拟与数字信号
PCM
我国电话网结构
时分复用与局间中继
时分复用
局间中继
信令
用户线信令
局间信令
七号信令
电路交换与分组交换
VoIP
FreeSWITCH初步
第二章FreeSWITCH初步
什么是FreeSWITCH?
快速体验
安装FreeSWITCH基本系统
解压缩源码包安装:
从SVN仓库安装:
最快安装(推荐)
安装声音文件
连接SIP软电话
配置简介
添加一个新的SIP用户
FreeSWITCH用作软电话
配置SIP网关拨打外部电话
从某一分机上呼出
呼入电话处理。
小结
第三章PSTN与PBX业务
PSTN业务
POTS
商务业务
模拟中继线
数字中继线
虚拟网
立即计费
VPN
其它增值业务
PBX业务
中继线
第四章SIP
SIP的概念和相关元素
SIP注册
SIP呼叫流程
UA间直接呼叫
通过B2BUA呼叫
再论SIPURI
第五章FreeSWITCH架构
总体结构
核心
数据库
模块
终点
拨号计划
XML接口
编解码器
语音识别
文件格式
日志
嵌入式语言
事件套接字
目录结构
配置文件
目录结构
freeswitch.xml
vars.xml
autoload_configs目录
dialplan目录
directory目录
sip_profiles
XML用户目录
呼叫流程及相关概念
Session与Channel
回铃音与EarlyMedia
ChannelVariable
$${var}与${var}
$variable_xxxx
给Variable赋值
取消Variable定义
截取Variable的一部分
小结
第六章运行FreeSWITCH
命令行参数
系统启动脚本
控制台与命令客户端
发起呼叫
呼叫字符串
API与APP
命令行帮助
小结
第七章SIP模块-mod_sofia
配置文件
internal.xml
external.xml
gateway
NAT问题
认识拨号计划-Dialplan
XMLDialplan
配置文件的结构
默认的配置文件结构
正则表达式
信道变量-ChannelVariables
测试条件-Conditions
动作与反动作-Action&Anti-Action
工作机制进阶
实例解析
Local_Extension
回声
延迟回声
内连拨号计划-InlineDialplan
FreeSWITCH背后的故事(译)
FreeSWITCH与Asterisk
FreeSWITCH中文FAQ
基本问题
啊,你们提供了一个如此强大的系统,那你们有什么心愿吗?
在sofia呼叫字符串中,%和@有何不同?
${var}与$${var}有何不同?
set和export程序有何区别?
PBX与软交换的区别是什么?只是语义问题吗?
FreeSWITCH™是用什么语言写的?
你怎么评价你已前做过的Asterisk开发?
FreeSWITCH能做什么?
什么?你刚才说它还可以也GoogleTalk通信?
有人将FreeSWITCH用于生产环境吗?
它同时支持多少路通话?有基准测试吗?
你们做该项目多久了?
什么时候才有第一个真正的发行版?
什么是ClueCon?
什么电话能在FreeSWITCH下工作?
FreeSWITCH一定要以root用户运行吗?
获取帮助
有帮助文档吗?
你们支持IRC吗?Q:DoyouguyssupportIRC?
是否有一个电话会议系统我可以参与有关FreeSWITCH的讨论呢?
是否有邮件列表?
调试与排错
有没有关于排错与汇报BUG的指南?我该从哪里开始呢?
当我从FreeSWITCH呼叫Snome电话时,在控制台上看到"a=cryptoinR
我的FreeSWITCH不影响任何SIP请求,我也用tcpdump检查了,发送端的正常的
我刚装好了FreeSWITCH,但在启动的时候显示错误:SQLERR[nosuchtable
showchannels、conferencelist、以及其它控制台命令什么也显示不出来。
我在Win32上装了FreeSWITCH但是不能启动,我应该检查什么?
如何调试SIP?
如何带debug符号编译FreeSWITCH?
我收到“InvalidApplication”是什么意思?
mod_spidermonkey_odbc出错:::ErrorSQLConnect=-1err
ICMPerror是什么错误?
在Ubuntu64-bit(gutsy/intrepid)上启动时出现:segmentati
运行在后台
FreeSWITCH运行在后台时,我如何停止它呢?
如何让FreeSWITCH以更高的优先级运行?
如何将FreeSWITCH注册为一个Win32服务?
如何在一台服务器上运行多个FreeSWITCH实例?
硬件兼容性
它是否能运行在AmazonElasticCloud上?
它能运行在Xen虚拟机里吗?
它能运行在没有MMU的机器上吗?比方说Blackfin?
编译
我是否需要下载所有外部的程序库(libs)?
我不想安装到/usr/local/freeswitch/,如何更改安装路径?
我如何选择编译哪些模块?
如何使用MicrosoftVisualC++2008ExpressEdition编译
我在CentOS(可能其它发行版也会有)上遇到一个问题,提示"/lib/cpp"failing
运行makemegaclean时出错
SIP
如何设置SIP客户端认证?
如何设置
在长时间收不到RTP后可以自动挂断电话吗?
如果在FS控制台上看到SIP用户的注册情况?
IAX2
FreeSWITCH支持模块线路(FXS/FSO)吗?
FreeSWITCH支持ISDNBRI/BRA线路吗(S0BasicRateInte
FreeSWITCH是否支持PRI(E1/J1/T1)?
程序
如何在拨号计划中使用JavaScript(ECMAScript)?
如何让FreeSWITCH在没有控制台的情况下运行?
如何在FreeSWITCH中发起一个呼叫?
reloadxml能重载所有XML文件吗?
呼叫路由
我如何把endpoints放到不同的context中,而不同的context又有不同的
如何在整个服务器上使用单一的domain?
配置FreeSWITCH
是否有一个配置FreeSWITCH的图形界面?
XML糟透了,还有其它选择吗?
http://www.freeswitch.org.cn/document FreeSWITCH 官方文档请参见:英文 wiki FreeSWITCH: VoIP 实战 关键词:FreeSWITCH 电子书,FreeSWITCH 中文书,VoIP -- The First FreeSWITCH Book 作者: 杜金房 (Seven Du) 目录 • 前 言 • 第一章 PSTN 与 VoIP • 第二章 初识 FreeSWITCH • 第三章 PSTN 与 PBX 服务 • 第四章 SIP 协议 • 第五章 FreeSWITCH 架构 • 第六章 运 行 FreeSWITCH • 第七章 SIP 模块 - mod_sofia • 第八章 拨 号计划 - Dialplan • 模块介绍 • 嵌入式脚本 • • • 源代码阅读 • 开发指南 • 社区指南 • 附录 Event Socket FreeSWITCH 实战 FreeSWITCH 背后的故事 FreeSWTICH 与 Asterisk 比较 FreeSWITCH FAQ
Mod_command 参考 Mod_dptools 参考 FreeSWITCH book: 前言 Book Fri May 07 07:46:27 -0700 2010 我们已经步入了一个新的时代。当前,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 友批评指正。 本书现在只是一个草稿,会不定期做改动,即使大的改动也不一定发布通知。 第一章 PSTN 与 VoIP Book Fri Apr 30 11:00:43 -0700 2010 说起 VoIP,也许大家对网络电话更熟悉一些。其英文原意是 Voice Over IP,即 承载于 IP 网上的语音通信。大家熟悉家庭用来上网的 ADSL 吧,也许有些人还记 得前些年用过的吱吱叫的老“猫”。技术日新月异,前面的技术都是用 电话线 上网,现在,VoIP 技术使我们可以在网上打电话,生活就是这样。 所谓温故而知新,在了解任何东西以前,我们都最好了解一下其历史,以做到心 中有数。在了解 VoIP 之前,我们需要先看一下 PSTN,那在 PSTN 之 前呢? PSTN 起源 PSTN(Public Switched Telephone Network)的全称是公共交换电话网,就是我 们现在打电话所使用的电话网络。 第一次语音传输是亚历山大·贝尔(Alexander Granham Bell)在 1876 年用振铃 电路实现的。在那之前,普遍认为烽火台是最早的远程通信方式。其实峰火台不 仅具备通信的完整要素(通信双方,通信线路及中继 器),而且还是无线通信。 当时的没有电话号码,相互通话的用户之间必须有物理线路连接;并且,在同一 时间只有一个用户可以讲话(半双工)。发话方通过话音 的振动激励电炭精麦克 风而转换成电信号,电信号传到远端后通过振动对方的扬声器发声,从而传到对 方的耳朵里。 由于每对通话的个体之间都需要单独的物理线路,如果整个电话网上有 10 个人, 而你想要与另个 9 个人通话,你家就需要铺设 9 对电话线。同时整个电话网 上 就需要 10 x (10-1) / 2 = 45 对电话线。 当电话用户数量增加的时候,为每对通话的家庭之间铺设电话线是不可能的。因 此一种称为交换机(Switch)的设备诞生了。它位于整个电话网的中间 用于连
接每个用户,用户想打电话时先拿起电话连接到管理交换机的接线员,由接线员 负责接通到对方的线路。这便是最早的电话交换网。 由于技术的进步,电子交换机替代了人工交换机,便出现了现代意义的 PSTN。 随着通信网络的进一步扩大,便出现了许许多多的交换机。交换机间通过中 继 线(Trunk)相连。有时一个用户与另一个用户通话需要穿越多台交换机。 后来出现了移动电话(当移动电话小到可以拿在手里的时候就开始叫“手机”), 专门用于对移动电话进行交换的通信网络称移动网,而原来的程控交换网则 叫 固定电话网,简称固网。简单来说,移动网就是在普通固网的基础上增加了许多 基站(Base Station,可以简单理解为天线),并增加了归属位置寄存器(HLR, Home Location Register)和拜访位置寄存器(VLR,Visitor Location Register), 以用户记录用户的位置(在哪个天线的覆盖范围内)、支持异地漫游等。移动交 换中心称之为 MSC(Mobile Switch Center)。 模拟与数字信号 现实中的一切都是模拟的。模拟量(Analog)是连续的变化的,如温度、声音等。 早期的电话网是基于模拟交换的。模拟信号对于人类交流来讲非常理 想,但它 很容易引入噪声。如果通话双方距离很远的话,由于信号的衰减,需要对信号进 行放大。问题是信号中经常混入线路的噪音,放大信号的同时也放大的噪 音, 导致信噪比(信号量与噪声的比例)下降,严重时会难以分辨。 数字(Digital)信号是不连续的(离散的)。它是按一定的时间间隔(单位时 间内抽样的次数称为频率)对模拟信号进行抽样得出的一些离散值。根 据抽样 定理,当抽样频率是最高模拟信号频率的两倍时,就能够完全还原原来的模拟信 号。 PCM PCM(Pulse Code Modulattion)的全称是脉冲编码调制。它是一种通用的将模 拟信号转换成以 0 和 1 表示的数字信号的方法。 一般来说,人的声音频率范围在 300Hz ~ 3400Hz 之间, 通过滤波器对超过 4000Hz 的频率过滤出去,便得到 4000Hz 内的模拟信号。然后根据抽样定理, 使用 8000Hz 进行抽样,便得到离散的数字信号。 通过使用压缩算法(实际为压扩法,因为有的部分压缩有的是扩张的。目的是给 小信号更多的比特位数以提高语音质量),可以将每一个抽样值压缩到 8 个比 特。这样就得到 8 x 8000 = 64000bit (通常称为 64kbit/s。注意,通常来说, 对于二进制数,1kbit=1024bit,但此处的 k=1000)的信号。通常我们就简称为 64k。
PCM 通常有两种压缩方式:A 律和μ律。其中北美使用μ律,我国和欧洲使用 A 律。这两种压缩方法很相似,都采用 8bit 的编码获得 12bit 到 13bit 的语音质 量。但在低信噪比的情况下,μ律比 A 律略好。 我国电话网结构 图中主体部分为一地市级电话网的结构。通常,话机(如 c)通过一对电话线连 接到距离最近的交换机上,该交换机称为端局交换机(一般以区或县为单 位)。 端局交换机通过局间中继线连接到汇接局。为了保证安全,汇接局通常会成对出 现,平常实行负荷分担,一台汇接局出现故障时与之配对的汇接局承担所有话 务。长途电话需要通过长途局与其它长途局相连。但根据话务量要求,汇接局也 可以直接与其它长途局开通高速直达中继。为节省用户线,在一些人口比较集中 的地 方(如学校、小区),端局下会再设模块局或接入网,用户则就近接入的 模块局上。 智能网一般用于实现电话卡、预付费或 400/800 类业务,而近几年新布署的 NGN (Next Generation Network,下一代网络,一般指软交换。)则支持更灵活、 更复杂的业务。 时分复用与局间中继 时分复用 通过将多个信道以时分复用的方式合并到一条电路上,可以减少局间中继线的数 量。通过将 32 个 64k 的信道利用时分复用合并到一条 2M( 64kx32=2.048M , 通俗来说就直接叫一个 2M)电路上,称为一个 E1(在北美和日本,是 24 个 64k 复用,称为 T1,速率是 1.544M)。在 E1 中,每一个信道称作一个 时隙。其中,
除 0 时隙固定传同步时钟,其它 31 个时隙最多可以同时支持 31 路电话(如果使 用隨路信令,则使用第 16 时隙传送,这时最多支持 30 路电话)。 局间中继 这些连接交换机(局)的 2M 电路就称为局间中继。随着话务量的增加,交换机之 间的电路越开越多,目前通常的做法是将 63 个 2M 合并到一个 155M( 2 x 63 + P = 155,其中 P 是电路复用的开销)的光路(光纤)上。 信令 用户设备(如话机)与端局交换机之间,以及交换机与交换机之间需要进行通信。 这些通信所包含的信息包括(但不限于)用户、中继线状态,主、被叫号 码, 中继路由的选择等。我们把这些消息称为信令(Signaling)。 用户线信令 用户线信令是从用户话机到端局交换机之间传送的信令。对于普通的话机,线路 上传送的是模拟信号,信令只能在电话线路上传送,这种信令称为带内信令。 话 机通过电压变化来传递摘、挂机信号;通过 DTMF(Dual Tone Multi Frequency, 双音多频。话机上每个数字或字母都可以发送一个低频和一个高频信号相结合的 正弦波,交换机经过解码即可知道对应的话机按键)传送要拨 叫的电话号码。 另外,也可以通过移频键控(FSK,Frequency Shift-keying)技术支持来电显示 (Caller ID 或 CLIP,Caller Line Identification Presentation,主叫线路 识别提示)。 与普通电话不同,ISDN(Integrated Service Digital Network,综合业务数字 网)在用户线上传送的是数字信号。它的基本速率接口使用 144k 的 2B+D 信道-- 两个 64k 的 B 信道及一个 16k 的 D 信 道。由于其信令在话路(B 信道)以外的 D 信道传送,这种信令称为带外信令。 实际上,2B+D 的 ISDN 并没有发挥出它应有的作用,在国内已很少有人使用。 局间信令 局间信令主要在局间中继上传送。一般一条信令链路通常只占用一个 64k 的时 隙。一条信令消息通常只有几十或上百个字节,一条 64k 的电路足矣容纳成 千 上万路电话所需要的信令。但随着技术的进步,话务量的上涨以及更多增值业务 的出现,完成一次通话需要更多的信令消息,因此出现了 2M 速率的信令链路, 即 整个 E1 链路上全部传送信令。
分享到:
收藏