新書推薦:
《
跟着渤海小吏读历史:大唐气象(全三册)
》
售價:NT$
989.0
《
心智的构建:大脑如何创造我们的精神世界
》
售價:NT$
352.0
《
美国小史(揭秘“美国何以成为美国”,理解美国的经典入门读物)
》
售價:NT$
352.0
《
中国古代北方民族史丛书——东胡史
》
售價:NT$
576.0
《
巨人传(插图珍藏本)
》
售價:NT$
3289.0
《
地下(村上春树沙林毒气事件的长篇纪实)
》
售價:NT$
332.0
《
偿还:债务与财富的阴暗面
》
售價:NT$
347.0
《
清华大学藏战国竹简校释(壹):《命训》诸篇
》
售價:NT$
408.0
|
編輯推薦: |
中国FreeSWITCH领域“第一人”、全球FreeSWITCH开源社区知名专家撰写,FreeSWITCH之父鼎力推荐,权威性毋庸置疑
内容全面,涵盖FreeSWITCH使用、维护、二次开发、源码分析等各方面;实战性强,包含大量实例,从单个独立应用的实现到集群的部署,应有尽有
|
內容簡介: |
本书是FreeSWITCH领域最为权威的著作之一,在这本书面前,FreeSWITCH了无秘密!
本书由中国FreeSWITCH领域“第一人”、全球FreeSWITCH开源社区知名专家、FreeSWITCH-CN中文社区创始人兼执行主席Seven Du(杜金房)撰写,FreeSWITCH之父Anthony、Minessale鼎力推荐。本书内容极为全面,涵盖FreeSWITCH的方方面面,从它的系统结构、核心概念、各项功能及其使用、维护的方法和要点、系统的调试与排错、系统的性能优化,到脚本开发、基于源代码的二次开发和内部实现原理,深度与广度兼备。实战性极强,从呼叫排队、多人电话会议、话单计费等基本的配置实例到生产环境中的应用实例,从单个的FreeSWITCH应用到FreeSWITCH集群,从脚本开发到基于源代码的二次开发,各种案例应有尽有,很多案例中的参数都可以拿来直接使用。
|
關於作者: |
杜金房(网名:Seven)资深网络通信技术专家,在网络通信领域耕耘近15年,精通VoIP、SIP和FreeSWITCH等各种网络协议和技术,经验十分丰富。有超过6年的FreeSWITCH应用和开发经验,不仅为国内大家大型通信服务厂商提供技术支持和解决方案,而且客户还遍及美国、印度等海外国家。FreeSWITCH-CN中文社区创始人兼执行主席,被誉为国内FreeSWITCH领域的“第一人”;在FreeSWITCH开源社区非常活跃,不仅经常为开源社区提交补丁和新功能、新特性,而且还开发了很多外围模块和外围软件;此外,他经常在FreeSWITCH的Wiki上分享自己的使用心得和经验、在FreeSWITCH IRC及QQ群中热心回答网友提问,并不定期在国内不同城市举行FreeSWITCH技术培训;2011、2012和2013年应邀参加在美国芝加哥举办的ClueCon大会,并发表主题演讲。此外,他还精通C、Erlang、Ruby、Lua等语言相关的技术。
|
目錄:
|
目录
前言
第一部分 基 础 篇
第1章 PSTN与VoIP基础 2
1.1 PSTN起源与发展 2
1.1.1 最早的电话网 2
1.1.2 人工电话交换时代 3
1.1.3 自动电话交换时代 3
1.1.4 半电子交换机时代 6
1.1.5 空分交换机时代 6
1.1.6 数字交换机时代 6
1.1.7 现代PSTN时代 6
1.1.8 下一代网络及VoIP时代 6
1.2 电话实现技术 8
1.2.1 电话号码 8
1.2.2 模拟信号与数字信号 11
1.2.3 PCM 11
1.2.4 局间中继与电路复用技术 12
1.3 我国电话网结构 12
1.4 信令 14
1.4.1 信令分类 14
1.4.2 用户线信令 15
1.4.3 局间信令 15
1.4.4 七号信令 16
1.4.5 H.323与SIP信令 17
1.5 媒体 19
1.6 电路交换与分组交换 20
1.6.1 电路交换 20
1.6.2 分组交换 20
1.7 VoIP 21
1.8 IMS 22
1.8.1 什么是IMS 22
1.8.2 IMS的特点 22
1.8.3 IMS核心网元 23
1.8.4 SIP协议的参考点 26
1.9 小结 27
第2章 PSTN、PBX及呼叫中心业务 28
2.1 PSTN业务 28
2.1.1 POTS 28
2.1.2 商务业务 30
2.1.3 其他增值业务 30
2.2 PBX业务 31
2.2.1 呼叫转移 31
2.2.2 同组代答 31
2.3 PBX与中继线 31
2.4 IP-PBX业务 34
2.5 呼叫中心 35
2.5.1 什么是呼叫中心 35
2.5.2 呼叫中心的历史 36
2.5.3 呼叫中心的分类 37
2.5.4 呼叫中心的主要技术指标 39
2.5.5 CTI中间件 40
2.5.6 FreeSWITCH在呼叫中心的应用 41
2.6 小结 42
第3章 初识FreeSWITCH 43
3.1 什么是FreeSWITCH ? 43
3.1.1 FreeSWITCH的概念 43
3.1.2 FreeSWITCH的功能 45
3.2 快速体验 46
3.2.1 安装基本FreeSWITCH系统 46
3.2.2 连接SIP电话 57
3.3 配置FreeSWITCH 61
3.4 FreeSWITCH用作软电话 63
3.5 配置SIP网关拨打外部电话 64
3.5.1 从某一分机上呼出 65
3.5.2 呼入电话处理 66
3.6 小结 66
第4章 运行FreeSWITCH 67
4.1 命令行参数 67
4.2 系统启动脚本 68
4.3 判断 FreeSWITCH 是否运行 69
4.4 控制台与命令客户端 69
4.5 呼叫 72
4.5.1 发起呼叫 72
4.5.2 呼叫字符串 72
4.6 API 与 App 73
4.7 API命令帮助 75
4.8 小结 76
第5章 FreeSWITCH架构 77
5.1 总体架构 77
5.1.1 核心 77
5.1.2 接口实现 81
5.2 目录结构 83
5.3 配置文件 85
5.3.1 freeswitch.xml 86
5.3.2 vars.xml 88
5.3.3 autoload_configs 目录 89
5.3.4 其他 90
5.4 XML 用户目录 91
5.5 呼叫相关概念 93
5.5.1 来去话、Session 、Channel与Call 93
5.5.2 回铃音与 Early Media 94
5.5.3 全局变量与局部变量 94
5.6 小结 95
第6章 拨号计划 96
6.1 XML Dialplan 96
6.1.1 配置文件的结构 96
6.1.2 默认的配置文件简介 99
6.1.3 正则表达式 100
6.1.4 通道变量 101
6.1.5 测试条件 105
6.1.6 动作与反动作 108
6.1.7 工作机制深入剖析 109
6.1.8 内联执行 111
6.1.9 实例解析 112
6.2 inline Dialplan 118
6.3 其他Dialplan 120
6.4 常用的Dialplan App 120
6.5 在Dialplan中使用API命令 123
6.6 深入理解通道变量及相关操作 124
6.7 小结 125
第7章 SIP协议 126
7.1 SIP协议基础 126
7.1.1 HTTP与SIP协议基础 127
7.1.2 SIP的基本概念和相关元素 129
7.1.3 SIP协议的基本方法和头域简介 131
7.2 SIP注册 132
7.3 SIP呼叫流程 135
7.3.1 UA间直接呼叫 136
7.3.2 通过 B2BUA 呼叫 137
7.4 深入理解SIP 147
7.4.1 SIP URI 147
7.4.2 SDP和SOA 147
7.4.3 3PCC 151
7.4.4 SIP承载 152
7.5 小结 152
第8章 媒体 154
8.1 媒体与媒体处理 154
8.1.1 音频编码 154
8.1.2 媒体工作机理和相关配置 159
8.2 媒体协商 160
8.2.1 协商过程 160
8.2.2 SDP及其在编码协商中的作用 161
8.2.3 协商时机与策略 163
8.3 其他媒体相关的问题 163
8.3.1 RTP和RTCP 163
8.3.2 转码 165
8.3.3 透传、媒体绕过与媒体代理 167
8.3.4 Media Bug 168
8.3.5 视频 168
8.3.6 排错 169
8.4 小结 170
第9章 SIP模块 171
9.1 基本概念 171
9.2 Sofia配置文件 172
9.2.1 Profile配置文件 173
9.2.1 Profile的几个重要参数 175
9.2.2 external.xml 177
9.2.3 Gateway 179
9.3 常用命令 181
9.3.1 状态相关命令 181
9.3.2 Profile相关命令 182
9.3.3 SIP Capture 183
9.3.4 global相关 184
9.3.5 debug相关 184
9.3.6 其他命令 185
9.3.7 其他 186
9.4 NAT穿越 186
9.4.1 NAT的种类 188
9.4.2 FreeSWITCH的拓扑结构 189
9.4.3 NAT是怎么影响SIPRTP通信的 190
9.4.4 NAT的穿越方法 191
9.5 小结 198
第二部分 实 战 篇
第10章 基本技能 200
10.1 调试与排错 200
10.1.1 解决问题的一般方法和流程 200
10.1.2 查看日志 203
10.2 使用外部工具抓包 205
10.2.1 tcpdump 205
10.2.2 tshark 206
10.2.3 ngrep 207
10.2.4 pcapsipdump 208
10.3 使用Wireshark抓包并分析呼叫 208
10.3.1 使用Wireshark抓包 209
10.3.2 使用Wireshark对抓包进行分析 210
10.4 originate命令实例解析 213
10.4.1 使用格式和参数 213
10.4.2 转入Dialplan 214
10.4.3 更改主叫号码 215
10.4.4 处理呼叫超时 215
10.4.5 防止命令阻塞 216
10.4.6 使用通道变量 216
10.4.7 Early Media对呼叫的影响 217
10.4.8 bridge也使用originate 217
10.4.9 bridge中的Early Media 218
10.4.10 bridge中的主叫号码 219
10.5 呼叫是怎样工作的? 220
10.6 FreeSWITCH图形用户界面简介 223
10.6.1 FusionPBX 223
10.6.2 blue.box 223
10.6.3 FreeSWITCH Portal 224
10.7 小结 226
第11章 基本功能与实现 227
11.1 批量创建用户 227
11.2 用FreeSWITCH实现IVR 229
11.2.1 最简单的菜单 229
11.2.2 默认IVR简介 232
11.3 按时间进行路由 233
11.4 配置中文语音提示 234
11.4.1 最简单的实现方案 234
11.4.2 使用sound_prefix 235
11.4.3 使用Phrase 236
11.4.4 使用中文语音提示 238
11.5 录音 239
11.5.1 单腿录音 239
11.5.2 对两条腿的通话进行录音 240
11.5.3 立体声 241
11.5.4 录音相关的通道变量 242
11.5.5 原生格式 243
11.6 放音 244
11.6.1 playback的参数 244
11.6.2 循环播放 248
11.6.3 Say 249
11.7 TTS 251
11.7.1 使用mod_flite 251
11.7.2 mod_tts_commandline 252
11.7.3 MRCP 256
11.7.4 Google Translate 257
11.7.5 TTS小结 258
11.8 在呼叫失败的情况下向主叫用户播放语音提示 259
11.8.1 实现方法 259
11.8.2 进阶 260
11.8.3 使用TTS 261
11.8.4 原理 262
11.9 实现呼叫前转业务 263
11.10 小结 265
第12章 高级功能与配置实例 266
12.1 使用mod_fifo实现简单呼叫队列 266
12.1.1 呼叫停泊与取回 266
12.1.2 配置座席 268
12.1.3 fifo 270
12.2 使用mod_callcenter实现呼叫中心应用 272
12.2.1 mod_callcenter模块简介 273
12.2.2 座席配置与管理 274
12.3 数据库 277
12.3.1 默认数据库中有什么? 277
12.3.2 ODBC 279
12.3.3 使用数据库原生客户端库直接连接数据库 282
12.4 视频通话 283
12.4.1 配置视频通话 283
12.4.2 视频录像与回放 285
12.4.3 视频转码 285
12.5 多人电话会议 286
12.5.1 音频会议 286
12.5.2 视频会议 292
12.6 话单 297
12.6.1 CSV格式的话单 297
12.6.2 直接将话单写入数据库 298
12.6.3 使用HTTP服务器接收话单 299
12.7 计费 300
12.8 小结 302
第13章 FreeSWITCH与FreeSWITCH对接 303
13.1 在同一台主机上启动多个FreeSWITCH实例 303
13.1.1 背景故事 304
13.1.2 练习 305
13.1.3 进阶 306
13.2 FreeSWITCH与FreeSWITCH对接 306
13.2.1 双机对接 306
13.2.2 汇接 308
13.2.3 双归属 309
13.2.4 长途局 311
13.2.5 ACL 311
13.3 FreeSWITCH作为PBX 312
13.3.1 普通的PBX设置 313
13.3.2 DID 315
13.3.3 使用PBX上的网关呼出 319
13.4 小结 319
第14章 FreeSWITCH与其他设备或系统对接 321
14.1 使用Doubango客户端连接 321
14.2 对接IMS 322
14.2.1 网关配置 323
14.2.2 通过IMS呼出 324
14.2.3 通过IMS呼入 324
14.2.4 其他问题 325
14.3 连接模拟话机和模拟中继线 326
14.3.1 FXS和FXO 326
14.3.2 拓扑结构 327
14.3.3 使用潮流网关连接模拟话机 328
14.3.4 使用迅时网关连接模拟话机和模拟中继线 329
14.4 通过E1线路与其他系统对接 335
14.4.1 配置FS1 335
14.4.2 配置E1网关设备 340
14.4.3 配置FS2 342
14.4.4 对接其他厂家的E1网关 345
14.5 对接Asterisk 346
14.5.1 从FreeSWITCH呼叫Asterisk 346
14.5.2 从Asterisk上呼叫FreeSWITCH 347
14.5.3 其他 347
14.6 使用H.323协议对接 348
14.6.1 mod_h323 348
14.6.2 mod_opal 350
14.6.3 其他 351
14.7 小结 351
第15章 其他技巧与实例 353
15.1 转接和代接 353
15.1.1 盲转 353
15.1.2 协商转 356
15.1.3 代接 357
15.2 共享线路呈现 358
15.3 使用组播功能做网络广播 360
15.4 DTMF 361
15.4.1 带内DTMF 361
15.4.2 RFC2833 362
15.4.3 SIP INFO 363
15.5 号码连选 363
15.5.1 注册到运营商服务器 364
15.5.2 通过单个号码呼出 364
15.5.3 使用随机数做号码连选 365
15.5.4 使用mod_distributor进行连选 365
15.5.5 其他 366
15.6 收发传真 367
15.7 多租户 368
15.7.1 Domain简介 368
15.7.2 配置与实例 370
15.7.3 进阶 372
15.7.4 其他 373
15.8 使用loopback Endpoint外呼 373
15.9 在Web浏览器中打电话 375
15.9.1 Flash 376
15.9.2 WebRTC 379
15.10 HA 382
15.10.1 崩溃恢复实验 382
15.10.2 HA简介 383
15.10.3 双机HA实现细节及需要注意的问题 384
15.11 集群及分布式部署 386
15.11.1 大规模集群的总体结构 386
15.11.2 负载均衡配置实例 387
15.12 压力测试 392
15.12.1 参数和指标 392
15.12.2 呼叫测试 393
15.12.3 注册测试 395
15.12.4 编解码测试 396
15.12.5 测试结果 396
15.13 生产环境下的稳定性和安全性 396
15.13.1 稳定性 397
15.13.2 安全性 397
15.14 小结 398
第三部分 高 级 篇
第16章 嵌入式脚本 400
16.1 FreeSWITCH中的嵌入式脚本 400
16.2 Lua 401
16.2.1 Lua语法简介 402
16.2.2 将电话路由到Lua脚本 408
16.2.3 Session 相关函数 408
16.2.4 非Session函数和独立的Lua脚本 412
16.2.5 Event相关函数 412
16.2.6 Chat相关函数 415
16.2.7 LUA拨号计划 416
16.2.8 连接数据库 417
16.3 其他脚本语言 419
16.3.1 JavaScript 419
16.3.2 Python 420
16.4 小结 421
第17章 嵌入式及HTTP开发 423
17.1 用Lua脚本写个小游戏 423
17.2 用Lua实现IVR 425
17.3 在会议中呼出 429
17.4 一个在FreeSWITCH中外呼的脚本 431
17.5 使用Lua脚本通过多个网关循环外呼 433
17.6 在FreeSWITCH中执行长期运行的嵌入式脚本 434
17.7 使用Lua提供XML Binding 436
17.8 语音识别 437
17.8.1 使用Pocket Sphinx进行中文语音识别 438
17.8.2 通过商业语音识别软件进行识别 444
17.9 使用mod_xml_curl提供动态用户管理 446
17.10 使用mod_xml_cdr模块处理话单 448
17.11 小结 450
第18章 Event Socket 452
18.1 架构 452
18.1.1 外连模式 453
18.1.2 内连模式 454
18.2 Event Socket协议 454
18.2.1 外连 455
18.2.2 内连 456
18.2.3 Event Socket命令详解 457
18.3 Event Socket库 465
18.3.1 Event Socket示例 465
18.3.2 ESL函数说明 470
18.4 事件 475
18.4.1 事件的学习方法 475
18.4.2 常用事件简介 476
18.5 小结 478
第19章 使用ESL开发 479
19.1 创建独立的ESL应用 479
19.1.1 创建目录和源文件 479
19.1.2 编译和执行 480
19.1.3 将源代码纳入版本控制 481
19.2 用ESL重写空中充值服务 482
19.3 用ESL写一个ACD 490
19.4 用Inbound模式实现IVR 496
19.5 使用Java连接ESL 501
19.6 使用Erlang控制呼叫流程 502
19.6.1 准备工作 503
19.6.2 将来话交给Erlang处理 504
19.6.3 用Erlang实现空中充值服务 506
19.6.4 用Erlang状态机实现空中充值服务 509
19.6.5 其他 514
19.7 定时呼叫 516
19.8 小结 517
第20章 源代码导读及编译指南 518
20.1 准备FreeSWITCH源代码环境 518
20.2 FreeSWITCH源代码目录结构 519
20.3 FreeSWITCH源代码导读 519
20.3.1 APR 520
20.3.2 SWITCH APR 520
20.3.3 main函数 522
20.3.4 可加载模块 524
20.3.5 模块的结构 530
20.3.6 Session和Channel 531
20.3.7 SWITCH IVR 536
20.3.8 Core IO 537
20.3.9 Core Media 540
20.3.10 Core RTP 541
20.3.11 SWITCH XML 543
20.3.12 SWITCH Event 544
20.3.13 Core Codec 和 Core File 547
20.4 FreeSWITCH源代码的编译 548
20.4.1 首次编译 549
20.4.2 增量编译 550
20.4.3 常见问题及最佳实践 551
20.5 小结 552
第21章 FreeSWITCH源代码分析 553
21.1 mod_dptools 553
21.1.1 echo 553
21.1.2 answer 555
21.1.3 set 557
21.1.4 bridge 559
21.1.5 Endpoint Interface 563
21.1.6 模块框架 564
21.2 mod_commands 566
21.2.1 模块框架 566
21.2.2 originate 566
21.3 mod_sofia 567
21.3.1 模块加载 568
21.3.2 Sofia的加载及通话建立 568
21.4 小结 576
第22章 FreeSWITCH二次开发 577
22.1 给FreeSWITCH汇报Bug和打补丁 577
22.1.1 修复内存泄露问题 577
22.1.2 给中文模块打补丁 578
22.1.3 给FreeSWITCH核心打补丁 579
22.1.4 高手也会犯错误 581
22.1.5 汇报严重的问题 581
22.1.6 给Sofia-SIP打补丁 582
22.1.7 给现有App增加新功能 584
22.1.8 给FreeSWITCH增加一个新的Interface 586
22.2 写一个新的FreeSWITCH编解码模块 587
22.3 从头开始写一个模块 589
22.3.1 初始准备工作 589
22.3.2 写一个简单的Dialplan 590
22.3.3 增加一个App 592
22.3.4 写一个API 593
22.3.5 小结 594
22.4 使用libfreeswitch 594
22.4.1 自己写一个软交换机 594
22.4.2 使用libfreeswitch提供的库函数 595
22.4.3 其他 599
22.5 调试跟踪 600
22.6 小结 601
附录A FreeSWITCH开源软件社区指南 603
附录B 关于FreeSWITCH常用术语翻译的意见 605
附录C 模块列表 607
附录D FreeSWITCH架构详细示意图 614
后记 615
|
內容試閱:
|
第一部分
基 础 篇
自己动手搭建个人的软交换环境是一件激动人心的事。本篇就带领大家一步一步来完成这件事。当然,在这之前我们首先要一起回顾一下电话交换网络和电话交换技术以及相关的历史,并探讨交换网络的现状和未来;同时,学习一些电信领域的基础知识,熟悉一些基础的电信业务;然后,我们再一起体验FreeSWITCH的安装和配置;在对FreeSWITCH有了直观的印象之后,我们再详细解释FreeSWITCH的设计思想和理念、基本概念和理论、运行和维护的方法,以及重要的协议和模块等。
读完本篇,你可以为成为一名合格的FreeSWITCH维护工程师打好坚实的基础。
第1章
PSTN与VoIP基础
一说起VoIP,给人的感觉好像有些抽象,或许大家对“网络电话”这个词更熟悉一些。VoIP的英文原意是Voice Over IP,即承载于IP网上的语音通信。大家熟悉家庭上网所使用的ADSL吧?或许有些人还记得前些年用过的吱吱叫的老“猫”(Modem,调制解调器)。技术日新月异,之前的技术都是用电话线上网,现在VoIP技术使我们可以在网上打电话。
所谓“温故而知新”,在学习任何新东西以前,我们最好都了解一下它的历史,以做到心中有数。所以在了解VoIP之前,我们先来看一下PSTN。
PSTN(Public Switched Telephone Network,公共交换电话网)就是我们日常打电话所使用的电话网络。有时,人们喜欢对新鲜的事物刨根问底,却对司空见惯的东西不求甚解。在此,为了便于读者了解本书所述的技术,我们一起来回顾一下交换机的起源和演变过程、探索一下电话网的现状和发展方向,同时一起学习一些与PSTN有关的基础知识和专业术语等。
1.1 PSTN起源与发展
在漫长的通信历史长河中,PSTN及电话交换技术的发展经历了很多阶段,如从直接控制到间接控制再到公共控制、从人工交换到自动交换、从电子交换到程控交换、从模拟到数字、从电路交换到分组交换、从“硬”交换到软交换等。下面我们分别介绍。
1.1.1 最早的电话网
第一次语音传输是苏格兰人亚历山大?贝尔(Alexander Granham Bell)在1876年用振铃电路实现的。而在那之前,普遍认为烽火台是最好的远程通信方式。
用振铃电路实现通话功能的时代是没有电话号码的,相互通话的用户之间必须由物理线路连接;并且,在同一时间只能有一个用户讲话(半双工)。发话方通过话音振动来激励电炭精麦克风从而产生电信号,电信号传到远端后通过振动对方的扬声器发声,从而传到对方的耳朵里。
由于每对通话的个体之间都需要单独的物理线路,如果整个电话网上有10个人,而某人想与另外9个人通话,他就需要铺设9对电话线。同时整个电话网上就需要10×10–1 2=45对电话线,如图1-1所示。
|
|