XML FREESWITCH APPLICATION 实现

本文深入探讨了FreeSwitch(FS)中XML应用与数据关联的执行流程,包括如何将XML语句转化为实际操作,具体实现细节以及相关函数的运作方式。

XML

XMLFSFreeSwitch)中进行了大量的使用,其中dialplan就是其中非常主要的一快内容。通过下面的描述,我们可以知道在执行XML中的语句:

<action application="set" data="$1" />

如何关联到其实现?可以在哪里看到其实现?其具体实现是什么?

下面让我们来看看FS是如何做的!以上面的XML语句为例子。

1、如何关联到其实现

FSchannel处于EXCUTE状态时:根据在XML上读取的applicationdata并调用回调函数进行执行。以上面例子为例:applicationsetdata$1(1234,这里传入的解析后的结果)

调用过程为:

switch_core_standard_on_execute ->

switch_core_session_execute_application->

switch_core_session_execute_application_get_flags->

switch_core_session_exec  此函数里面执行: application_interface->application_function(session, expanded);

Application_function为回调函数。

具体的执行函数为在系统初始化加载各个模块时,会加载的各个application,并赋值给函数指针。所以当执行上面的蓝色标记的回调函数时,在FS的各个module上对应的application就会被执行。

2、具体实现

也以上述的例子为例,set是在mod_dptool上注册的。(我们如何知道在哪里注册?当启动FS的时候,在窗口打印的信息里面就有application的注册信息,就可以知道在那个模块实现。)

Set的实现为:

SWITCH_STANDARD_APP(set_function) //这个为宏定义

{

base_set(session, data, SWITCH_STACK_BOTTOM);

}

打开DEBUG日志就可以看到以下日志信息:

2013-07-03 01:29:55.013184 [DEBUG] mod_dptools.c:1373  sofia/internal/1001@192.168.152.129 SET [1234]=[UNDEF]

3、实现功能

根据上面的分析就可以得出每个application的实现都是不一样的。所以具体实现请查看具体的代码。这里不再分析。

注:xml里面的application名字和函数名字的换算关系为:application_function,具体的调用情况不再进行讲述。

<think>我们正在查找FreeSWITCHdialplan支持的Application列表。根据提供的引用,我们知道Dialplan配置在conf/dialplan目录下,通过freeswitch.xml中的预处理指令包含。Dialplan的基本结构如引用[2]和[3]所示,其中<action>标签的application属性指定要执行的应用程序。但是,提供的引用并没有直接给出Application列表。因此,我们需要结合FreeSWITCH的官方文档和常见知识来回答。在FreeSWITCH中,DialplanApplication是可以在拨号计划中执行的操作,例如播放声音、录音、桥接呼叫等。这些应用程序通常由模块提供,例如mod_dptools、mod_av等。要获取完整的Application列表,可以通过以下方法:1.在FreeSWITCH控制台中运行命令:`showapplications`2.查看官方文档:https://freeswitch.org/confluence/display/FREESWITCH/Mod_dptools3.查看模块文档,因为大多数应用程序由模块提供。由于我们无法直接运行命令,这里列出一些常用的DialplanApplication(非完整列表):常用应用程序(主要来自mod_dptools):-answer:应答呼叫-bridge:桥接到另一个端点-playback:播放音频文件-record_session:录制音频-hangup:挂断呼叫-sleep:休眠-set:设置通道变量-echo:回声测试-transfer:转接-conference:加入会议室-speak:文本转语音-detect_speech:语音检测-record:录制音频(旧版)其他模块提供的应用程序:-mod_av:av_record(音频/视频录制)等-mod_sofia:sofia_*系列应用-mod_lua:lua执行Lua脚本注意:每个应用程序都有特定的参数和数据格式。由于列表非常长,建议用户通过FreeSWITCH命令行或文档获取完整列表。在回答中,我们按照格式要求,将应用程序名称用$包围(因为它们是代码或命令),例如:$answer$。同时,我们生成相关问题。引用说明:引用[1][2][3]提供了Dialplan的基本配置结构,但没有提供应用程序列表,因此我们主要依据通用知识回答。</think>### FreeSWITCH Dialplan 支持的 Application 列表 FreeSWITCH Dialplan 中的 Application 是在 `<action>` 标签中执行的命令,用于控制呼叫流程。以下是主要分类和常用 Application(基于 mod_dptools 等核心模块): #### 🎯 呼叫控制类 1. **`$answer$`** 应答呼叫[^2][^3] ```xml <action application="answer"/> ``` 2. **`$bridge$`** 桥接到另一个端点/用户 ```xml <action application="bridge" data="user/1001@domain"/> ``` 3. **`$hangup$`** 挂断呼叫 ```xml <action application="hangup" data="USER_BUSY"/> ``` #### 🔊 媒体处理类 4. **`$playback$`** 播放音频文件 ```xml <action application="playback" data="/path/to/audio.wav"/> ``` 5. **`$record_session$`** 录制音频 ```xml <action application="record_session" data="/tmp/recording.wav"/> ``` 6. **`$speak$`** 文本转语音(TTS) ```xml <action application="speak" data="flite|kal|Hello World"/> ``` #### ⚙️ 变量与逻辑类 7. **`$set$`** 设置通道变量 ```xml <action application="set" data="my_var=123"/> ``` 8. **`$condition$`** 条件分支(常与 `${}` 变量配合) ```xml <condition field="${my_var}" expression="^123$"> <action application="playback" data="success.wav"/> </condition> ``` 9. **`$sleep$`** 暂停执行(毫秒) ```xml <action application="sleep" data="1000"/> ``` #### 📡 网络与协议类 10. **`$sip_transfer$`** SIP 协议转移呼叫 ```xml <action application="sip_transfer" data="user@domain.com"/> ``` 11. **`$curl$`** 发起 HTTP 请求 ```xml <action application="curl" data="http://api.example.com"/> ``` #### 🧩 特殊功能类 12. **`$conference$`** 加入会议室 ```xml <action application="conference" data="room123@default"/> ``` 13. **`$lua$`** 执行 Lua 脚本 ```xml <action application="lua" data="myscript.lua"/> ``` 14. **`$av_record$`** 音视频录制(需加载 mod_av) ```xml <action application="av_record" data="/tmp/video.mp4 30"/> ``` --- ### 查看完整列表的方法 1. **FreeSWITCH 控制台** ```bash fs_cli -x "show applications" ``` 2. **按模块查看** ```bash # 查看 mod_dptools 提供的应用 fs_cli -x "show application as xml mod_dptools" ``` 3. **官方文档** [FreeSWITCH 官方 Application 列表](https://freeswitch.org/confluence/display/FREESWITCH/Application+List) --- ### 典型 Dialplan 结构示例 ```xml <context name="public"> <extension name="test_apps"> <condition field="destination_number" expression="^1234$"> <action application="answer"/> <action application="set" data="my_var=test"/> <action application="playback" data="/sounds/welcome.wav"/> <action application="bridge" data="user/1001@domain"/> </condition> </extension> </context> ``` [^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值