二十. freeSwitch

2,058 阅读6分钟

1.介绍(以及行业名词)

freeswitch是OSTAG的注册商标.作者Anthony minessale

1.1 PSTN

  • PSTN (Public Switched Telephone Network,公共交换电话网),就是我们日常打电话用的电话网络.
  • 电话网络的发展过程
(0)烽火台,狼烟.
(1)1876年贝尔用振铃电路实现的,每个用户都得用电话线连起来才能通信.
(2)人工接线员交换时代.中间有一部人工手动切换的交换机.(诞生了第一部交换机Exchange).类似于手动切换电闸.
(3)1891年(史端乔)发明了,自动电话交换机,(也是物理触点式的)
(4)半电子交换时代: 控制部分是电子的,也是物理触点.

(5)空分交换时代:19655月第一台存储程序控制的交换机产生.传输的还是模拟信号
(6)数字交换时代:1970年法国开通了第一台程控数字交换机E10. 传输数字信号,(保真抗干扰,增加传输距离,节约线路成本.) 
(模拟信号容易引入噪声,距离远了信号会衰减,因而需要对信号进行放大,噪声也会随之变大.)
(用PCM Pulse Code Modulation脉冲编码调制, 0,1表示数字信号)

(7)现代电话网:无数个交换机用 中继线(trunk) 连起来
(8)未来,下一代网络,人们提出各种下一代网络的解决方案.但最终都统一到了IMS技术(IP Multimedia Subsystem.) IMS运行于IP网络上,使用一种第三方伙伴计划(3GPP).它是一种SIP标准的VoIP实现方式. (最近的3G 4G 5G 技术就是应此要求而生的) 未来要完全取消低效的电路传输和电路交换,全集中到IP通信上来.也就催生一个新的无线通信标准LTE,逐渐实现全IP交换.

1.2 电话实现技术

1.2.1 电话号码

  • 固定电话号码
  • 移动电话号码和专用号段
  • 短号码
  • 400 和 800(手机打不通)
  • 北美号码分类计划
  • 电话号码的书写格式

1.2.2 局间中继与电路复用技术

  • 连接交换机(局) 的E1或T1电路称为局间中继.
  • 传统交换机使用时分复用TDM
  • 光路还可以使用波分复用.

1.3 我国的电话网络结构

  • 我国的电话网由本地网与长途网组成,并通过国际交换中心进入国际电话网.

1.4 信令

  • 用户设备(如话机)与端局交换机之间,以及交换机与交换机之间需要进行通信。这些通信所包含的信息有 (但不限于)用户、中继线状态、主叫号码、被叫号码、中继路由的选择等。我们把这些消息称为信令 (Signaling)

1.4.1 信令分类

1.5 媒体

1.6 电路交换和媒体交换

1.7 VoIP

  • Voice over Internet Protocol 网络电话或称宽带电话, 一种透过互联网来实现的电话通信.

1.8 IMS

2. PSTN,PBX呼叫中心业务

2.1 PSTN业务

2.1.1 POTS普通老式电话业务

2.1.2 商务业务

2.1.3 其他增值业务

2.2 PBX业务,以及中继线

  • Private Branch eXchange 专用小交换机,,一般安在企业内部.

  • 运营商直连几根电话线

  • 运营商和内部的PBX连接,集线比

  • 内部免费通话, 呼叫转移, 同组代答,4进4出,4混

  • 对内直接呼叫(将66666666这个号码接到小交换机上,仍 给老板一个内线电话,同时在小交换机上进行设置,只有老板打出时才走66666666这个端口;而对于打入的电 话,也不播放“欢迎致电XX公司…”,而是直接向老板电话振铃。这种拨入方式叫做DID,即对内直接呼叫 Direct Inbound Dial )

2.3 IP-PBX

  • 传统的PBX是个物理设备实现交换功能. 凡是用纯软件实现PBX交换功能的就叫IP-PBX.
  • 能实现IP-PBX软件交换机功能的有Aetarisk,freeSwitch....

2.4 呼叫中心

3. FreeSwitch

3.1 什么是FreeSwitch

3.2 安装和体验

3.3 配置FreeSwitch

3.4 FreeSwitch 用作软电话

3.5 配置SIP网关拨打外部电话

4. 运行FreeSwitch

4.1 命令行参数

4.2 系统启动脚本

4.3 判断FreeSWITCH是否运行

4.4 控制台与命令客户端

4.5 呼叫

4.6 API与App

4.7 API命令帮助

5. FreeSwitch架构

5.1 总体架构

5.2 目录结构

5.3 配置文件

5.4 XML用户目录

5.5 呼叫相关概念

6. 拨号计划

6.1 XML Dialplan

6.2 inline Dialplan

6.3 其他Dialplan

6.4 常用的Dialplan App

6.5 在Dialplan中使用API命令

6.6 深入理解通道变量及相关操作

7. SIP协议

7.1 SIP协议基础

7.2 SIP注册

7.3 SIP呼叫流程

7.4 深入理解SIP

8.媒体

8.1 媒体与媒体处理

8.2 媒体协商

8.3 其他媒体相关的问题

9. SIP模块

9.1 基本概念

9.2 Sofia配置文件

9.3 常用命令

9.4 NAT穿越

===================================================================

10. 基本技能

10.1 调试与排错

10.2 使用外部工具抓包

10.3 使用Wireshark抓包并分析呼叫

10.4 originate命令实例解析

10.5 呼叫是怎样工作的?

10.6 FreeSWITCH图形用户界面简介

11. 基本功能与实现

11.1 批量创建用户

11.2 用FreeSWITCH实现IVR

11.3 按时间进行路由

11.4 配置中文语音提示

11.5 录音

11.6 放音

11.7 TTS

11.8 在呼叫失败的情况下向主叫用户播放语音提示

11.9 实现呼叫前转业务

12. 高级功能与配置实例

12.1 使用mod_fifo实现简单呼叫队列

12.2 使用mod_callcenter实现呼叫中心应用

12.3 数据库

12.4 视频通话

12.5 多人电话会议

12.6 话单

12.7 计费

13 FreeSWITCH与FreeSWITCH对接

13.1 在同一台主机上启动多个FreeSWITCH实例

13.2 FreeSWITCH与FreeSWITCH对接

13.3 FreeSWITCH作为PBX

14. FreeSWITCH与其他设备或系统对接

14.1 使用Doubango客户端连接

14.2 对接IMS

14.3 连接模拟话机和模拟中继线

14.4 通过E1线路与其他系统对接

14.5 对接Asterisk

14.6 使用H.323协议对接

15. 其他技巧与实例

15.1 转接和代接

15.2 共享线路呈现

15.3 使用组播功能做网络广播

15.4 DTMF

15.5 号码连选

15.6 收发传真

15.7 多租户

15.8 使用loopback Endpoint外呼

15.9 在Web浏览器中打电话

15.10 HA

15.11 集群及分布式部署

15.12 压力测试

15.13 生产环境下的稳定性和安全性

===================================================

16. 嵌入式脚本

16.1 FreeSWITCH中的嵌入式脚本

16.2 Lua

16.3 其他脚本语言

17. 嵌入式及HTTP开发

17.1 用Lua脚本写个小游戏

17.2 用Lua实现IVR

17.3 在会议中呼出

17.4 一个在FreeSWITCH中外呼的脚本

17.5 使用Lua脚本通过多个网关循环外呼

17.6 在FreeSWITCH中执行长期运行的嵌入式脚本

17.7 使用Lua提供XML Binding

17.8 语音识别

17.9 使用mod_xml_curl提供动态用户管理

17.10 使用mod_xml_cdr模块处理话单

18.1 Event Socket

18.1 架构

18.2 Event Socket协议

18.3 Event Socket库

18.4 事件

19. 使用ESL开发

19.1 创建独立的ESL应用

19.2 用ESL重写空中充值服务

19.3 用ESL写一个ACD

19.4 用Inbound模式实现IVR

19.5 使用Java连接ESL

19.6 使用Erlang控制呼叫流程

19.7 定时呼叫

20 源代码导读及编译指南

20.1 准备FreeSWITCH源代码环境

20.2 FreeSWITCH源代码目录结构

20.3 FreeSWITCH源代码导读

20.4 FreeSWITCH源代码的编译

21 FreeSWITCH源代码分析

21.1 mod_dptools

21.2 mod_commands

21.3 mod_sofia

22 FreeSWITCH二次开发

22.1 给FreeSWITCH汇报Bug和打补丁

22.2 写一个新的FreeSWITCH编解码模块

22.3 从头开始写一个模块

22.4 使用libfreeswitch

22.5 调试跟踪