【1】FreeSWITCH 是什么?

FreeSWITCH是一个开源的电话交换平台。

世界上第一个跨平台的、伸缩性极好的、免费的、多协议的电话软交换平台。

从技术上讲,FreeSWITCH是一个B2BUA。

FreeSWITCH是一个背靠背的用户代理,用来帮助通信的双方进行实时的语音视频通信。

【2】FreeSWITCH背靠背用户代理

(1)代理服务器(Proxy Server)

设想Bob和Alice是经人介绍认识的,而他们还不熟悉,Bob想请Alice吃饭就需要一个中间人(M)传话,而这个中间人就叫代理服务器。

(2)重定向服务器(Redirect Server)

它以类似于这样的方式工作──中间人M告诉Bob,我也不知道Alice在哪里,但我爱人知道,要不然我告诉你我爱人的电话,你直接问她吧,我爱人叫W。

这样,M就成了一个重定向服务器(把Bob对他的请求重定向到他的爱人,这样Bob接下来要直接联系他的爱人),而他的爱人W是真正的代理服务器。

这两种服务器都是UAS,它们主要是提供一对欲通话的UA之间的路由选择功能。

(3)注册服务器(Register Server)

试想这样一种情况:Alice还是个学生,没有自己的手机,但它又希望Bob能随时找到她。于是,

当她在学校时就告诉中间人M说她在学校,如果有事找她可以打宿舍的固定电话;

如果她要回家,也通知M说有事打家里电话;

或许某一天她要去姥姥家,也要把她姥姥家的电话告诉M。

总之,只要Alice换一个新的位置,它就要向M重新“注册”,以让M能随时找到她,这时候M就相当于一个注册服务器。

(4)背靠背用户代理(Back-to-Back UA,B2BUA)。

需要指出,其实RFC 3261并没有定义B2BUA的功能,它只是一对UAS和UAC的串联。

FreeSWITCH就是一个典型的B2BUA,为了理解B2BUA,我们来看上述故事的另一个版本。M和W是一对恩爱夫妻。M认识Bob而W认识Alice。

M和W有意撮合两个年轻人,但见面时由于两人太腼腆而互相没留电话号码。

事后Bob想知道Alice对他感觉如何,于是打电话问M,M不认识Alice,就转身问爱人W(注意这次M没有直接把W的电话给Bob)。

W紧接着打电话给Alice,Alice说印象还不错,W就把这句话告诉M,M又转过身告诉Bob。

这样,M和W一个面向Bob,一个对着Alice,他们两个合在一起,称为B2BUA。

其实这里UAC和UAS的概念也不是那么重要,重要的是要理解这个背靠背的用户代理。

因为事情还没有完,Bob一听说Alice对他印象还不错,开心得不得了,便想请抽空请Alice吃饭,他将这一想法告诉M,M告诉W,W又告诉Alice。

然后Alice问去哪里吃啊,W又只好问M,M再问Bob……在这对年轻人挂断电话之前,M和W只能“背对背”不停地工作。

从图B2BUA可以看出,四个人其实全是UA。

当然,虽然FreeSWITCH是B2BUA,但也可以经过特殊的配置,实现一些代理服务器和重定向服务器的功能,甚至也可以从中间劈开,两边分别作为一个普通的UA来工作。

这没有什么奇怪的,在SIP世界中,所有UA都是平等的。具体到实物,则M和W就组成了实现软交换功能的交换机,它们对外说的语言是SIP,而在内部它们使用自己家的语言沟通。

Bob和Alice就分别成了我们常见的软电话,或者硬件的SIP话机。

Good Good Study, Day Day Up.

顺序 选择 循环 总结

FreeSWITCH 基础的更多相关文章

  1. freeswitch dialplan 基础

    freeswitch dialplan 基础 一.基础概念 dialplan 拨号方案 context 拨号表(块) extension  拨号去向 action  (拨号后执行的)动作 condit ...

  2. SIP协议栈基础笔记

    //------------------SIP基础------------------------// SIP是基于UDP的协议 UA(user Agent)用户代理 UAC(client)发起SIP ...

  3. freeswitch编译安装,初探, 以及联合sipgateway, webrtc server的使用场景。

    本文主要记录freeswitch学习过程. 一 安装freeswitch NOTE 以下两种安装方式,再安装的过程中遇到了不少问题,印象比较深刻的就是lua库找到不到这个问题.这个问题发生在make ...

  4. Nodejs 实现ESL内联FreeSWITCH设定说明

    一.背景说明: SIP Server IP (Centos):192.168.11.61  ,服务器IP(Windows):192.168.11.19 二.目的: 能够从192.168.11.19上通 ...

  5. freeswitch新增模块API

    概述 上一章我们讲解了freeswitch的源码基本结构,以及如何新增一个插件式模块. freeswitch的架构非常适合这种业务开发模式,即以freeswitch的基本功能为开发平台,新增插件式模块 ...

  6. freeswitch的event事件处理

    概述 之前的文章中,我们讲解了freeswitch的源码基本结构,如何新增一个插件式模块,以及如何在模块中新增一个命令式API接口和APP接口. freeswitch本身是事件驱动的,它可以并发响应多 ...

  7. freeswitch的docker构建过程

    概述 Docker是一个开源的应用容器引擎,可以让开发者打包应用以及依赖包到一个轻量级.可移植的容器中,并在任何安装有Docker的机器上运行. Docker 使你能够将应用程序与基础架构分开,从而可 ...

  8. freeswitch APR库

    概述 freeswitch依赖库源代码基本都可以在libs目录下找到. 在freeswitch的官方手册中,可以找到freeswitch的依赖库表格,其中freeswitch的core核心代码依赖库主 ...

  9. freeswitch的话单模块

    概述 最近因为业务需要,在看freeswitch中话单相关的一些模块. 在voip的使用过程中,话单是重要的基础模块,涉及到计费和问题查找. 呼叫话单最重要的一点是稳定,不能有错误或遗漏. 本章对fs ...

随机推荐

  1. C++ 11中几个我比较喜欢的语法(三)

    随着Vsisual Studio 2013 RC版的放出,之前承诺的对C++ 11语法支持已经全部完成,本文是C++ 11中我喜欢的语法系列的最后一部分(一),(二). 非静态成员直接初始化 在C++ ...

  2. Delphi 使用 SPcomm 调试串口程序出现总是在程序断开的时候,才发送指令的问题。

    问题如上, 在与嵌入式程序串口程序通讯的时候, 总是出现如上问题, 造成的原因把下面的True改成false就可以了. 下图Spcomm的属性页,几个True全改成False再试试

  3. JS 随机数字抽签

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...

  4. wildfly配置PostgreSQL数据源

    wildfly配置PostgreSQL数据源 很久以前写过在JBoss AS7上如何配置PostgreSQL数据源,此方法在wildfly上依然有效.不过,通过wildfly的命令行工具可以有更简单的 ...

  5. .NET MVC执行过程 及 生命周期步骤

    1.网址路由比对 2.执行Controller与Action 3.执行View并返回结果 Request 请求到来 IIS 根据请求特征将处理权移交给 ASP.NET UrlRoutingModule ...

  6. PHP empty()函数说明---用了N遍了就是记不住

    从表面上看,很容易误解empty()函数是判断字符串是否为空的函数,其实并不是,我也因此吃了很多亏. empty()函数是用来测试变量是否已经配置.若变量已存在.非空字符串或者非零,则返回 false ...

  7. Visual Studio 2015 Update 1 安装到最后 KB3022398 错误解决方法

    最后一步遇到一个错误的确让人心寒 只是我们还是得一步步解决.别去卸载重装.太费时 首先打开 regedit 注冊表,依次进入: 1:HKEY_LOCAL_MACHINE\SOFTWARE\Micros ...

  8. Android--Handler的用法:在子线程中更新界面

    本文主要介绍Android的Handler的用法.Handler能够发送Messsage和Runnable对象到与其相关联的线程的消息队列. 每一个Handler对象与创建它的线程相关联.而且每一个H ...

  9. 使用 JavaScript开发的跨平台音乐、书籍播放器

    代码地址如下:http://www.demodashi.com/demo/12542.html 演示效果 歌曲推荐界面 歌手搜索界面 歌词预览界面 书籍推荐界面 代码实现过程 首页代码: 'use s ...

  10. 数据文件offline 时oracle 干了那些事?

    SQL> oradebug setmypid Statement processed. SQL> oradebug unlimit Statement processed. SQL> ...