培训1
Asterrisk
C/C++ FreeSWITCH
a-leg
b-leg
bridge
线程池处理 bridge成功后变成一个线程处理
支持linux,windows
部署成容器docker
core+module
支持协议
支持协议
sip协议
sip module: sofia sip
H.323
module: h323
module: opal
load opal gatekeeper 对接FS服务器
gnugk.org
skinny
mod skinny(思科话机)
fs启动
freeswitch.xml
var.xml
autoload_config.xml
module.xml
mod.sofia
sip_profile/*.xml
var.xml
定义全局变量
profile
监听一个IP+PORT monitor
端口设置
全局变量$ 通 道 变 量 {} 通道变量 通道变量{}
- internal.xml
cd conf/sip_profile/internal.xml
<param name="sip-port" >sip-port
<!-- NAT -->
<sip-ip>本机
<rtp-ip>本机
<ext-rtp-ip>上一层的路由地址
<ext-sip-ip>上一层的路由地址
<!--webrtc-->
<ws>打开
<wss>打开
<odbc-dsn>
<trace-call>主备切换,漂移之后下命令Sofia recover 重启recover表,恢复通话
<tls>安全,sip加密,做信令加密;RTP加密,srtp,代价太大
<caller-id-type>不同厂商,主叫显示,不同的profile,抓不同的invite包看有没有类型
抓包
Sofia profile sitrance on
RTP
SDP
dailplan
主叫是内,default
主叫是外,public
/directory/default
<context>区分路由
- default.xml(内)
- directory default
8016 --> 8026
<context name="default">区分文件
<extension>
<condition field=destination_number expression="8026">
# 正则 ^(.*)$,$1 $2区分,根据括号的顺序,对应变量,有效范围是extension路由变量
#
<action application="">
</condition>
</extension>
<X-PRE-PROCESS cmd="include" data=default/*.xml/>
- Outbount
- transfer LocalEctension
- public.xml(外)
<context name="public">区分文件
API 和APP区别
-
application:作用对象是session
一条腿上应用
路由xml文件中的application,应用当条腿的uuid -
api 小三,第三方上来跑的(通道外操作)
利用uuid控制a-leg,b-leg对整个通道做操作,通过uuid找到session,ESL
fs_cli里边应用 -
相互调用
api->app uuid_broudcast
app->api set uuid
mod_distributor
分发
DID
群组
RPC
mod_xml_rpc
ESL:socket接口,TCP/IP
fs_cli:ESL接口
RPC:http接口
下命令
IP:8080/webapi/commands
命令一个空格用问号"?"
cd autoload_config/
xml_rpc.conf.xml
language
通过app支持language
js
lua
perl
csharp
python
.NET