【1】FreeSWITCH学习笔记
1、Windows安装包下载地址:
http://files.freeswitch.org/windows/installer/
2、源码下载地址:
http://files.freeswitch.org/freeswitch-1.2.10.tar.gz
3、FreeSWITCH后台模式启动
命令:freeswitch -nc(即No Console)
后台模式没有控制台
4、windows平台默认密码已修改为:liu1234
5、windows平台客户端分别为:X-Lite 和 EyeBeam
6、freeswitch默认使用UDP的5060端口。如果先启动客户端,会占用这个端口,所以,建议先启动freeswitch,再启动客户端。
7、如果运行freeswitch出现以下错误,是因为端口被占用了。
Cannot lock pid file /usr/local/freeswitch/run/freeswitch.pid.
8、如果输入fs_cli,提示如下类似错误:
[ERROR] fs_cli.c:1610 main() Error Connecting [Socket Connection Error]
说明FreeSWITCH没有启动 或 mod_event_socket没有正确加载,请检查TCP的8021端口是否处于监听状态或被其他进程占用。
9、freeswitch -nonat
freeSWITCH启动时默认会启用uPnP(或NAT_PMP)协议试图查找你的路由器是否支持并在你的路由器上“打洞”,如果你的路由器不支持该协议,这一步可能耗时比较长,因而影响启动速度。
所以,如果你只是在内网测试并且一天启动很多次的话,建议关掉这个选项。
组合参数(后台模式启动),启动命令:freeswitch -nc -nonat
10、修改配置XML文件后,必须先使用命令使之生效:reloadxml
11、客户端注册错误:
(1)提示408:Request Timeout
一般都是由于防火墙引起的。关闭防火墙(本地CentOS系统):
临时关闭:service iptables stop
永久关闭:chkconfig iptables off
(2)提示408:forbidden
一般都是由于账号密码配置错误,鉴权没有通过而被禁止注册。
12、可以在freeswitch中使用originate命令发起一次呼叫。假设1000已经注册,那么命令:
originate user/1000 &echo
originate是freeswitch内部的一个命令,它用于控制freeswitch发起一个呼叫。
13、打印变量值。命令global_getvar 与 eval
global_getvar sound_prefix
eval ${sound_prefix}
global_getvar local_ip_v4
eval ${local_ip_v4}
14、自动加载模块的配置文件位置:
/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml文件
15、用户目录默认配置文件在conf/directory/下,系统自带的配置文件为default.xml.
dial-string 一个至关重要的参数。
16、CentOS 系统让所有用户显示行号
输入命令:vim /etc/vimrc
在vimrc文件的最后添加:set nu
保存:wq
手动加载配置:source /etc/bashrc
这样不管是哪个用户在vim下都显示行号
17、FreeSWITCH启动后,在执行命令reloadxml时,错误提示:
+OK [[error near line 6290]: unexpected closing tag </condition>]
表示最近编辑过的xml文件格式有问题,标签形式不完整缺个“/”
18、reloadxml命令可以直接用快捷键F6执行。
console loglevel 7命令可以直接用快捷键F8执行
19、FreeSWITCH命令:查询已注册用户
sofia status profile internal (REGISTRATIONS值:显示多少用户已注册)
具体谁是否注册?可以使用如下命令:
sofia status profile internal reg XXXX
20、默认快捷键集
<cli-keybindings>
<key name="1" value="help"/>
<key name="2" value="status"/>
<key name="3" value="show channels"/>
<key name="4" value="show calls"/>
<key name="5" value="sofia status"/>
<key name="6" value="reloadxml"/>
<key name="7" value="console loglevel 0"/>
<key name="8" value="console loglevel 7"/>
<key name="9" value="sofia status profile internal"/>
<key name="10" value="sofia profile internal siptrace on"/>
<key name="11" value="sofia profile internal siptrace off"/>
<key name="12" value="version"/>
</cli-keybindings>
21、dialplan中的测试条件可以迭加,但是不可以嵌套。
eg: 如下无效条件
<extension name="***">
<condition field="***" expression="***">
<condition field="***" expression="***">
<action application="***"/>
</condition>
</condition>
</extension>
正确:
<extension name="***">
<condition field="***" expression="***"/>
<condition field="***" expression="***">
<action application="***"/>
</condition>
</extension>
22、xml dialplan支持非常丰富的功能。
但在测试或编写程序时,经常用到一些临时的或很简单的dialplan,如果每次都需要修改xml,不仅麻烦,而且执行效率低。
所以,一种短小、轻便的dialplan便因此而生了。
23、App的参数中可能会有逗号,因而会与默认的App间的逗号分隔符相冲突,以下的m语法形式将默认的逗号改为^分隔。
originate user/1000 ‘m:^playback/tmp/beep.wav^bridge:{ignore_early_media=true,originate_caller_id_number=1000}user/1001’inline
24、FreeSWITCH命令:show dialplan 命令?????系统默认支持的Dialplan
25、一般来说,运营商都把应答时间作为计费的开始时间。
26、bridge操作是阻塞的,它会一直等到b-leg释放后才继续往下走。
27、常用的Dialplan App: play_and_get_digits与read类似,但它比read更高级。
28、在Dialplan中使用API命令。
<action application="set" data="api_result=${expr(1+1)}"/>
expr类似于UNIX中的expr命令,它计算一个表达式并输出结果,如:
freeswitch> expr 1+1
29、set 与 export的区别:
set程序仅仅会作用于当前的Channel(a-leg)
export程序可以将变量设置到两个Channel(a-leg和b-leg)上, 如果当时b-leg还没有创建,则会在创建时进行设置。
另外,export也可以通过nolocal参数将变量值限制仅仅设置到b-leg上:
<action application="export" data="nolocal:my_var=my_value">
更重要的是set也具有能往b-leg上赋值的能力:
<action application="set" data="export_vars=var1, var2, var3"/>
30、取消某些通道变量的定义。对它赋一个特殊的值(_undef_)或使用unset App,代码如下:
<action application="set" data="var1=_undef_"/>
<action application="unset" data="var1"/>
31、在实际应用中,可以截取变量值的部分操作。使用格式:“${var:位置:长度}”。
32、execute_extension与transfer类似,都需要Dialplan的“三要素”作为参数,但不同的是:
前者是临时执行一些Dialplan制定的App,它不会重新进入ROUTING阶段。
33、获取SIP消息的方法:
在freeswitch命令上上执行:sofia global siptrace on
如果想关闭trace,可执行命令:sofia global siptrace off
34、FreeSWITCH相关协议
SIP:会话发起协议
SDP:会话描述协议
RTP:实时传输协议
RTCP:实时传输控制协议
35、SIPProfile相当于一个SIPUA,通过各种不同的配置参数可以配置一个UA的行为。一个系统中可以有多个SIPProfile,