kamailio

安装

安装参考官方文档
开发问题,入门必看必学 cookbook
多看官方的 module 文档

信息参考
https://www.oschina.net/project/tag/252/sip
客户端 jssip, linphone
https://sipjs.com/
https://jssip.net/
其他sip服务
https://www.opensips.org/Documentation/Modules-3-0

kamailio.cfg 文件

1
2
3
4
5
6
7
8
# 启用 nat 加入下面一行(不要忘记#也要加)
#!define WITH_NAT

# 配置自定义域名
alias="114.linlc.cn"

# 允许 header 中没有 content-length 这个参数
tcp_accept_no_cl=yes
编写 websocket 代码

参考文档

注意:在编译安装 kamailio 前,需要添加 websocket 模块
1
2
3
4
5
# 编辑源代码目录下的 modules.lst文件
vi ($KAMAILIO_SRC_PATH)/src/modules.lst

# 修改如下,后重新 make
include_modules=websocket

如果报错 unistr.h 找不到,则需要操作系统安装 libunistring-devel,然后重新编译安装
如果编译报错,通常是操作系统没有安装 module 源文件里面需要导入的库,我们在操作系统安装下就行了

可能遇见的问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 开启 websocket 需用到 nat,与下面模块
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "xhttp.so"
loadmodule "nathelper.so"
loadmodule "websocket.so"


# nathelper 与 registrar 模块需要设置相同的 received_avp
modparam("registrar", "received_avp", "$avp(i:42)")
modparam("nathelper", "received_avp", "$avp(i:42)")


# 如需要 webrtc 传输音视频,需 rtpproxy 模块,并设置参数
loadmodule "rtpproxy.so"
modparam("rtpproxy", "rtpproxy_sock", "udp:192.168.31.199:20000")


# 允许跨域
modparam("websocket", "cors_mode", 1)

# 如果websocket连接不上, event_route[xhttp:request] 里面验证了只能80,443端口,可以把验证关掉

# 在 request_route 第一行添加
add_local_rport();

启动 rtpproxy

1
rtpproxy -l 192.168.31.199 -s udp:192.168.31.199 20000 -F