FreeSWITCH入门到精通系列(四):FreeSWITCH模块介绍与使用
FreeSWITCH模块介绍与使用
FreeSWITCH 是一个模块化的开源通信平台,支持语音、视频、即时消息和 WebRTC。其灵活性主要来源于模块化架构,允许用户根据需求加载不同的功能模块。本文将详细介绍 FreeSWITCH 的模块体系、核心模块、如何加载/卸载模块,并举例说明如何配置和使用它们。
1. FreeSWITCH 模块体系
在 FreeSWITCH 中,模块分为以下几类:
模块类型 | 作用 |
---|---|
核心模块 (Core Modules) | FreeSWITCH 内部运行所必须的模块,例如 mod_sofia (SIP 处理)、mod_dptools (拨号计划工具) 等 |
应用模块 (Application Modules) | 用于扩展拨号计划功能,例如 mod_conference (会议)、mod_fifo (队列) |
协议模块 (Endpoint Modules) | 处理不同的通信协议,例如 mod_sofia (SIP)、mod_verto (WebRTC) |
编解码器模块 (Codec Modules) | 提供语音和视频编解码器,如 mod_opus (Opus)、mod_h264 (H.264) |
数据库模块 (Database Modules) | 允许 FreeSWITCH 访问数据库,如 mod_pgsql (PostgreSQL) |
事件处理模块 (Event Handling Modules) | 提供事件驱动能力,如 mod_esl (Event Socket Library) |
脚本语言模块 (Scripting Modules) | 允许使用 Lua、Python、Perl 进行脚本编写,如 mod_lua 、mod_python |
媒体处理模块 (Media Processing Modules) | 提供音频处理、录音、TTS 等功能,如 mod_av (视频处理) |
2. FreeSWITCH 模块管理
2.1 查看已加载模块
在 FreeSWITCH 控制台输入:
fs_cli -x "show modules"
示例输出:
name type description
mod_sofia endpoint SIP Endpoint Module
mod_conference application Conference Module
mod_opus codec Opus Codec
...
其中:
- name:模块名称
- type:模块类型(endpoint, application, codec, etc.)
- description:模块说明
2.2 加载模块
在 FreeSWITCH 控制台执行:
fs_cli -x "load mod_sofia"
2.3 卸载模块
fs_cli -x "unload mod_sofia"
2.4 重新加载模块
fs_cli -x "reload mod_sofia"
2.5 在配置文件中启用模块
打开 /etc/freeswitch/autoload_configs/modules.conf.xml
,找到 <modules>
部分,添加需要加载的模块:
<modules>
<load module="mod_sofia"/>
<load module="mod_conference"/>
<load module="mod_opus"/>
</modules>
然后重启 FreeSWITCH:
systemctl restart freeswitch
3. 重要 FreeSWITCH 模块介绍
3.1 mod_sofia (SIP 处理)
mod_sofia
是 FreeSWITCH 的 SIP 处理模块,支持 SIP 终端和中继。
启用配置:
<configuration name="sofia.conf" description="Sofia SIP">
<profiles>
<profile name="internal">
<gateway name="my_sip_provider">
<param name="username" value="1001"/>
<param name="password" value="password"/>
<param name="proxy" value="sip.example.com"/>
</gateway>
</profile>
</profiles>
</configuration>
常见命令:
fs_cli -x "sofia status"
fs_cli -x "sofia profile internal restart"
3.2 mod_conference (会议)
用于创建音频/视频会议室。
配置示例 (conference.conf.xml
):
<configuration name="conference.conf" description="Conference Settings">
<profiles>
<profile name="default">
<param name="energy-level" value="30"/>
<param name="comfort-noise" value="true"/>
</profile>
</profiles>
</configuration>
拨号计划 (dialplan/default.xml
):
<extension name="Conference">
<condition field="destination_number" expression="^3000$">
<action application="conference" data="3000@default"/>
</condition>
</extension>
进入会议室:
fs_cli -x "conference 3000 list"
3.3 mod_fifo (队列)
用于创建呼叫队列,实现简单的呼叫中心功能。
配置示例 (fifo.conf.xml
):
<configuration name="fifo.conf" description="FIFO Queues">
<fifos>
<fifo name="support_queue@default">
<param name="announce" value="support-queue.wav"/>
</fifo>
</fifos>
</configuration>
拨号计划 (dialplan/default.xml
):
<extension name="Enter FIFO Queue">
<condition field="destination_number" expression="^4000$">
<action application="fifo" data="support_queue@default in"/>
</condition>
</extension>
3.4 mod_esl (事件处理)
用于外部应用控制 FreeSWITCH,可以通过 Python、Lua 监听事件。
ESL 连接示例 (python
):
import ESL
con = ESL.ESLconnection("127.0.0.1", "8021", "ClueCon")
if con.connected():
con.sendRecv("api status")
print(con.getBody())
3.5 mod_lua (Lua 脚本)
FreeSWITCH 可以使用 Lua 处理自定义逻辑。
示例 (script.lua
):
session:answer()
session:sleep(1000)
session:streamFile("hello.wav")
session:hangup()
拨号计划调用 Lua 脚本:
<extension name="Lua Script">
<condition field="destination_number" expression="^5000$">
<action application="lua" data="script.lua"/>
</condition>
</extension>
4. 结论
- FreeSWITCH 采用模块化架构,可灵活加载不同功能模块。
- 通过
autoload_configs/modules.conf.xml
进行模块管理。 - 关键模块包括
mod_sofia
(SIP)、mod_conference
(会议)、mod_fifo
(队列)、mod_esl
(事件处理) 和mod_lua
(脚本扩展)。 - 结合不同模块可以构建复杂的 VoIP 应用,如呼叫中心、IVR、WebRTC 语音系统等。
希望这篇文章能帮助你掌握 FreeSWITCH 模块的基本使用。如果有任何问题,欢迎交流!🚀