FreeSWITCH 学习笔记(一)

本文档详细记录了FreeSWITCH的安装、配置和使用过程,包括Windows安装、源码下载、后台启动、密码修改、客户端使用、端口管理、错误排查、CLI命令及模块配置等方面,还涵盖了FreeSWITCH的日志、SIP协议、Dialplan、模块加载、用户注册、端口占用、防火墙设置、呼叫管理、音视频处理等多个关键知识点,是FreeSWITCH初学者的全面学习笔记。
摘要由CSDN通过智能技术生成

【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,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值