首页 > 其他分享 >FreeSwitch基础知识(一)

FreeSwitch基础知识(一)

时间:2023-06-08 11:46:40浏览次数:30  
标签:XML 核心 接口 基础知识 模块 FreeSwitch mod

       总的来说,FreeSwitch由一个稳定的核心(Core)及一些外围模块组成、这些外围模块根据其功能和用途的不同又分为Endpoint、Codec、Application等不同的类别。        FreeSwitch内部使用线程模型来处理并发请求,每个连接都在单独的线程中进行处理,不同的线程间通过Mutex互斥访问共享资源,并通过消息和异步事件等方式进行通信。这种架构能处理很高的并发,并且在多核环境中运算能均匀分布到多颗CPU或单CUP的多个核心上。FreeSwitch的核心非常短小精悍,这也是其保持稳定的关键。绝大部分应用层的功能都在外围的模块中实现。外围模块是可以动态加载(以及卸载)的,在实际应用中可以自加载用到的模块。外围模块通过核心提供的Public API与核心进行通信,而核心则通过回调(或称钩子)机制执行外围模块中的代码。         外围模块:XML Interface(XMT接口)、Codec(音视频编解码)、Endpoint(终点)、Event Consumer(事件消费者)、Say(分词短语)、Timer(定时器)、Embeded Language(嵌入式语言)、DB(数据库)、Format(格式)、Logger(日志)、FSAPI(命令接口)、Application(应用程序)、Chatplan(聊天计划)、Dialplan(拨号计划)、ASR/TTS(符合识别)   *****接口实现********* 接口都是抽象的,其中只有少量在核心中有具体实现,大部分最终由外部的模块来实现。 1、 终点( EndPoint), Endpoint是终结FreeSwitch的地方,也就是说再往外走就超出FreeSwitch的控制了。 它主要包含了不同呼叫控制协议的接口。这使得FreeSwitch可以与众多不同的电话系统进行通信。 2、 拨号计划( Dialplan),  Dialplan主要提供查找电话路由功能。 系统默认的Dialplan由mod_dialplan_xml提供,它是以XML描述的。 3、 聊天计划( Chatplan), 类似于Diaplan,不同的是ChatPlan主要对文本消息进行路由,他是在mod_sms中实现的。 4、 应用程序( Application,APP), FreeSwitch提供了许多APP使复杂的任务变得异常简单, 如mod_voicemail模块可以很简单的实现语音留言, 而mod_conference模块则可以高质量的实现多方会议。 5、 命令接口( FSAPI), FSAPI简称API,他是一种对外的命令接口,他的原理非常简单----输入简单的字符串( 以空格隔开), 该字符串由模块的内部函数处理,然后得到一个输出。输出可以是一个简单的字符串、一大串文本、XML或JSON文本。 通过使用FSAPI一个模块可以通过命令字符串的方式调用另一个模块提供的功能, 而不用连接其他模块的函数(实际上FreeSwitch不鼓励也不支持模块间的互相连接)。系统中的大部分的API都是由mod_commands模块提供的,有的模块实现了一些与本模块相关的API。 6、 XML接口( XML Interface), XML接口支持多种获取XML的方式, 它可以从本地的配置文件或数据库中的读取, 甚至可以从一个能动态返回XML的远程HTTP服务器中读取。对XML的解析和访问时在核心中实现的,当对XML的应用和扩展都是在外部模块中完成的。 7、 编解码器( Codec), FreeSwitch支持最广泛的Codec,它可以同时桥接不同采样频率的电话以及电话会议等。 8、 语音识别及语音合成(ASR/TTS), 支持语音自动识别(ASR) 及文本/语音转换(TTS)。 以通过本地模块实现也可以通过MRCP协议与其他语音产品对接实现。 9、 格式、文本接口( Formate,File Interface)。 支持不同格式的声音文件回访、录音、如WAV、MP3等。 mod_sndfile模块通过libsndfile库提供了对大部分音频文件格式的支持。 MP3格式是在mod_shout中实现的。FreeSwitch基础知识(1) 10、 日志( Logger), 日志可以写到控制台、日志文件、系统日志以及远程的日志服务器。实现日志功能的模块有mod_console、mod_logfile、mod_syslog等。 11、 定时器( Timer), 实时的语音通话需要非常准确的定时器。在FreeSwitch中可以使用软时钟或内核提供的时钟来定时。FreeSwitch最理想的工作时钟频率是1000Hz。 12、 嵌入式语言( Embeded Language), 通过swig可支持多种嵌入式语言进而控制呼叫流程,如Lua、Perl等。 13、 事件套接字( Event Socket), 通过Event Socket可以使用任何其他语言(只要支持socket),通过TCP Socket可控制呼叫流程、扩展FreeSwitch的功能。 (1) 核心         FreeSwitch的核心是Core,它包含了关键的数据结构和复杂的代码、状态机、数据库等,这些代码只出现在核心中,并保持了最大限度的抽象和重用。外围模块只能通过核心代码提供的公共应用程序接口(Public API)调用核心的功能,因而核心运行在一个受保护的环境中。 (2) 数据库        FreeSwitch的核心除了使用内部的队列、哈希表存储数据外,也可以使用关系型数据库存储数据。FreeSwitch默认使用额数据库类型是SQLite,是一种嵌入式数据库。由于SQLite会进行读锁定,因此在使用SQLite时不建议通过外部应用直接读取核心数据库。        除SQLite外系统也支持通过使用ODBC方式连接其他数据库,路MySQL、Oracle、SqlServer(需要改动一些代码)等。 (3) 公共应用程序接口       FreeSwitch在核心层实现了一些Public API。这些Public API可以被外围的模块调用。核心的代码是任何模块都可以调用的。 (4) 接口         FreeSwitch在核心中处了实现了大量的Public API供外围模块调用外,还提供了很多抽象的接口。这些接口对同类型的逻辑或功能实体进行了抽象,但没有具体的实现。具体的实现一般由外围的模块负责,核心层通过回调(钩子)方式调用具体的实现代码或函数。 (5) 事件         除了使用Public API及接口回调方式执行内部逻辑和通信外,FreeSwitch在内部也使用消息和事件机制进行进程间和模块间通信。消息机制是完全内部的。事件机制既可以是内部使用也可以外部使用。当FreeSwitch内部状态发生变化或收到一些新的消息时,会产生一些事件。事件机制是一种“生产者—消费者”模型。事件的产生和处理是异步的,是一松耦合的关系。这些事件可以在FreeSwitch内部通过绑定一定的回调函数进行捕获,即FreeSwitch的核心事件系统会依次回调这些回调函数,完成相应的功能,另外在嵌入式脚本(如lua)中也可以订阅相关的事件并进行处理。         在FreeSwitch外部也可以通过Event Socket等接口订阅相关的事件,通过这种方式可了解FreeSwitch内部发生了什么,如当前的呼叫状态。           

标签:XML,核心,接口,基础知识,模块,FreeSwitch,mod
From: https://www.cnblogs.com/lyfily-p-7439305/p/17465726.html

相关文章

  • 软测5班数据库基础知识
    函数:字符串函数charindex('查找内容','源字符串'[,起始位置]),返回值为查找到的内容首字母所在的位置,如果未找到返回0。len('字符串'),返回字符串长度。lower('字符串'),返回小写字母。upper('字符串'),返回大写字母。ltrim('字符串'),返回去除字符串左边空格。rtrim('字符串'),返......
  • TypeScript 的基础知识(跟着ChartGpt学习)
    以下都是我的ChartGpt老师教学的内容哦,(若想知道怎么用ChartGpt学习,或者想知道我的问答方式,可以点这个查看我的学习记录)一:TypeScript的基本数据类型TypeScript支持JavaScript的基本数据类型,包括number、string、boolean、null、undefined和symbol。其中,number表示数......
  • jvm中类和对象定义存储基础知识 | 京东云技术团队
    1类文件数据结构类型Class文件结构主要有两种数据结构:无符号数和表•无符号数:用来表述数字,索引引用、数量值以及字符串等,比如图1中类型为u1,u2,u4,u8分别代表1个字节,2个字节,4个字节,8个字节的无符号数•表:表是有由多个无符号数以及其它的表组成的复合结构,比如图1中类型以_info结尾......
  • JAVA基础知识总结系列:JAVA封装
    封装(面向对象特征之一):是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。好处:将变化隔离;便于使用;提高重用性;安全性。封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。this:代表对象。就是所在函数所属对象的引用。this到底代表什么呢?哪个对象......
  • Web安全-渗透测试-基础知识04
    Web源码WEB源码在安全测试中是非常重要的信息来源,可以用来代码审计漏洞也可以用来做信息突破口,其中WEB源码有很多技术需要简明分析。比如:获取某ASP源码后可以采用默认数据库下载为突破,获取某其他脚本源码漏洞可以进行代码审计挖掘或分析其业务逻辑等,总之源码的获取将为后期的安......
  • GaN 基础知识总结
    1、简介GaN是未来电力电子设计的趋势,知名电源大厂也在抢夺高频市场。由于GaN是通过AlGaN和GaN在交界面的压电效应形成的二维电子气来导电,意味着GaN是常开器件。然而电力电子电路常需要常关的器件作为开关管,因此,市面上主要有两种方式将常开的GaN器件变成常关......
  • windows编译freeswitch-1.8.5
    我的windows环境是WIN10编译器是vs2022下载好freeswitch-1.8.5代码解压后直接打开sln文件,开始编译。报错如下:6>libsrtp.lib(crypto_kernel.obj):errorLNK2005:SocketNotificationRetrieveEvents已经在libsrtp.lib(srtp.obj)中定义6>libsrtp.lib(alloc.obj):errorL......
  • 年计算机硬件基础知识大全
    1、了解电脑的基本组成一般我们看到的电脑都是由:主机(主要部分)、输出设备(显示器)、输入设备(键盘和鼠标)三大件组成。而主机是电脑的主体,在主机箱中有:主板、CPU、内存、电源、显卡、声卡、网卡、硬盘、软驱、光驱等硬件。从基本结构上来讲,电脑可以分为五大部分:运算器、......
  • Web安全-渗透测试-基础知识02
    数据包通信过程无代理服务器Request 请求数据包Reponse 相应数据包有代理服务器Requeset 请求数据包Proxy 代理服务器Reponse 相应数据包代理的出现在接受数据包和发送数据包的时候提供了修改数据包的机会总结:建立连接——>发送请求数据包——>返回响应数据包—......
  • Web安全-渗透测试-基础知识02
    数据包通信过程无代理服务器Request 请求数据包Reponse 相应数据包有代理服务器Requeset 请求数据包Proxy 代理服务器Reponse 相应数据包代理的出现在接受数据包和发送数据包的时候提供了修改数据包的机会总结:建立连接——>发送请求数据包——>返回响应数据包—......