第1章 简介与核心概念

发布时间:2026/7/11 15:05:06
第1章 简介与核心概念 一、 FreeSWITCH 概述 (Overview)定义FreeSWITCH 是一个用于语音、视频和文本通信的软件交换平台 (Software Switching Platform)。它负责连接通信端点并对它们之间的呼叫应用逻辑。核心特性基于配置驱动系统的行为几乎完全由配置决定。通过编辑 XML 配置文件来定制系统而不是修改代码。香草配置 (Vanilla Configuration)默认安装附带一套完整且可用的基础配置可直接作为 SIP PBX专用交换机运行。版本区别开源版免费使用。企业版 (FreeSWITCH Enterprise)由 SignalWire 提供商业支持和服务的专业版本。二、 核心术语 (Core Terminology)在 FreeSWITCH 中以下术语贯穿始终英文术语中文翻译含义解释Endpoint端点发起或接收呼叫的协议接口。每个端点都是一个模块例如处理 SIP 的mod_sofia或处理 WebRTC 的mod_verto。Channel通道FreeSWITCH 与单个端点之间的一条通信链路即一“腿”。它承载呼叫状态、媒体流和一组通道变量 (Channel Variables)。Call呼叫一个或多个关联在一起的通道。典型的双向呼叫是由桥接 (Bridge)连接的两个通道。Bridge桥接将两个通道关联起来的机制使它们的媒体流 (Media)能够在彼此之间流动。Session会话通道及其上运行的应用状态的运行时容器 (Runtime Container)。Channel Variables通道变量保存呼叫状态和控制行为的命名值。由目录、拨号计划和应用设置引用格式为${variable_name}。三、 三大配置域 (The Three Configuration Domains)FreeSWITCH 将配置划分为三个独立的域理解它们的区别是掌握该系统的关键配置域 (Domain)解决的问题存储位置Directory (目录)谁被允许连接他们的属性是什么directory/Dialplan (拨号计划)当呼叫到达时它去哪里发生什么dialplan/Configuration (配置)每个模块和核心如何运行autoload_configs/三者交互逻辑目录 (Directory) 中定义的用户向 SIP Profile 进行认证。认证成功后用户的user_context变量会决定路由其呼叫的拨号计划上下文 (Dialplan Context)。拨号计划随后运行各种应用而这些应用的行为则受其模块配置 (Module Configuration)的控制。四、 呼叫流程剖析 (Anatomy of a Call)以“香草配置”下分机 1000 呼叫分机 1001 为例呼叫经历以下 5 个步骤步骤 1分机 1000 注册 (Registers)1000 发送SIP REGISTER。Sofia Profile 开启auth-calls挑战请求并向 Directory 验证密码。成功后记录绑定信息Contact URI并加载用户变量如user_context default、主叫 ID 等。步骤 2分机 1000 发起 INVITE1000 向 1001 发送SIP INVITE。认证通过后系统使用该用户在 Directory 中定义的user_context如 “default”进入对应的 Dialplan 上下文而不是 Profile 默认的 “public” 上下文。步骤 3拨号计划匹配 (Dialplan Matches)在 “default” 上下文中正则表达式^(10[01][0-9])$匹配目标号码 1001。设置关键通道变量call_timeout(响铃超时)、hangup_after_bridge(桥接结束后挂断)、continue_on_fail(桥接失败时继续执行用于转语音邮件)。步骤 4桥接应用连接呼叫 (Bridge Application)执行action applicationbridge datauser/1001${domain_name}/。user/前缀指示 FreeSWITCH 在 Directory 中查找 1001 的注册 Contact URI并向其发送出站 SIP INVITE即建立B 腿 / B-leg。如果桥接失败且continue_on_failtrue则转入语音邮件 (Voicemail)。步骤 5媒体协商与流 (Media Negotiation and Flow)开启inbound-late-negotiation延迟协商直到 B 腿的 SDP 可用。两腿独立协商兼容的编解码器。一旦 B 腿应答SIP 200 OK两通道桥接RTP 媒体流直接在两端点间透传。五、 模块系统 (Modules)几乎所有功能都由启动时加载的模块 (Modules)提供加载行为由modules.conf.xml控制。模块按接口类型分类端点 (Endpoints)呼叫协议如mod_sofia,mod_verto应用 (Applications)拨号计划应用和 API 命令如mod_dptools,mod_conference,mod_voicemail编解码器 (Codecs)音视频编码如mod_opus,mod_g729,mod_av文件格式 (File formats)读写媒体文件如mod_sndfile,mod_local_stream拨号计划 (Dialplans)拨号计划解释器如mod_dialplan_xml事件处理器 (Event handlers)外部事件和 CDR呼叫详细记录接口如mod_event_socket,mod_cdr_csv日志记录器 (Loggers)日志输出如mod_console,mod_logfile语言 (Languages)嵌入式脚本如mod_luaSay 和 ASR/TTS短语渲染和语音识别/合成如mod_say_en,mod_flite六、 单一 XML 文档模型 (The Single XML Document)在运行时FreeSWITCH 通过预处理器 (Preprocessor)将磁盘上的多个小文件组装起来将整个配置呈现为一个单一的 XML 文档。该文档包含以下固定的顶级节点 (Top-level sections)configuration来自autoload_configs/的每个模块和核心配置。dialplan呼叫路由上下文 (Call routing contexts)。chatplan文本消息路由上下文 (Text-message routing contexts)。directory域、用户和组 (Domains, users, and groups)。languages短语和语言定义 (Phrase and language definitions)。