按照Centos基础开发环境中的openSIPS小节的步骤完成openSIPS的编译和生成基础配置文件,下面开始对openSIPS数据库和配置文件进行详细介绍。
openSIPS数据库
配置数据库凭证
openSIPS 数据库配置文件位于/opt/opensips/etc/opensips
路径下的opensipsctlrc
。关于配置文件的详细说明参见官方文档Database Deployment v2.3。
进入opensipsctlrc
文件目录,打开配置文件,去掉关于DB相关注释,基本内容如下所示:
1 | # this parameter. |
配置完成后的配置文件。
创建数据库
当对数据库凭证配置完成后,使用/opt/opensips/sbin
目录下的opensipsdbctl
工具生成数据库。具体步骤如下:
1 | [root@localhost sbin]# ./opensipsdbctl create |
NOTE:如果出现ERROR 1101 (42000) at line 2: BLOB, TEXT, GEOMETRY or JSON column ‘extra_hdrs’ can’t have a default value这类错误,则在
/etc/my.cnf
文件内的[mysqld]
标签下添加一行 :sql-mode = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
当数据库创建完成后,在MySQL数据库中可以看到名称为opensips
的数据库,包含27张表,对于每张表的描述和字段的含义参考官方文档OpenSIPS database tables。
因为没有自己域名系统,因此使用官方的域名。通过openSIPS提供的管理接口,使用官方的opensips.org
作为整个openSIPS系统的Domain,具体操作如下:
1 | opensipsctl domain add opensips.org |
当添加完成后,在opensips
数据库的domain
能够查看到对应的添加记录信息。当直接使用IP地址作为SIP账号域名时不需要使用该步骤添加域名配置。
管理接口
openSIPS提供了很多管理接口(Manager Interface, MI
),通过这些接口,可以对openSIPS的运行状态进行查询,或者实时更新openSIPS的运行数据。下面列举常见的管理接口:
1 | 运行、重启、停止opensips:opensipsctl start|restart|stop |
更多的管理接口参见官方Management Interface v2.3。
openSIPS配置
将按照小节生成openSIPS配置生成的配置文件重命名为opensips.cfg
,作为openSIPS运行配置。关于配置文件的详细格式参见文档Script Format v2.3,对于各个字段含义参见官方文档Core Parameters v2.3。
对于openSIPS模块功能描述参见openSIPS模块说明文档,对于每个模块支持的配置参数和配置函数参见模块说明文档的Parameters section
。
设置监听端口
定制配置文件中listen
字段值,设置SIP服务器监听地址和端口,设置方式:
1 | listen=tcp:0.0.0.0:5060 # CUSTOMIZE ME |
配置RTPProxy模块
RTPProxy模块指定openSIPS与RTP转发通讯相关信息。下面使用UNIX套接字与RTP进行通讯,该配置需要与RTPProxy运行时的配置保持一致。
1 | loadmodule "rtpproxy.so" |
最后的配置文件参考。
RTPProxy编译和运行
RTPProxy项目
项目主页以及GitHub地址:
1 | 主页:http://www.rtpproxy.org/ |
RTPProxy编译
1 | # mkdir /opt/rtpproxy |
当执行完上述命令时,RTPProxy
将被安装到/opt/rtpproxy
目录下。
对于低版本的git
,由于不支持-C
选项,故执行如下命令:
1 | # cd rtpproxy |
在最新版本的 RTPProxy 中,因为使用了 stdatomic 文件,需要将 GCC 版本升级到 4.9 及以上方可编译。通过查看提交记录,在rtpp_memdeb.c的 3a345c587590600ed9bcd82282f77044e7811ed3
提交中使用了 stdatomic 。如果不需要使用最新的特性,使用如下命令切换到如下版本即可解决:
1 | # git checkout 15786f2f229e241b901636d8c98c4b849317aeca |
因为RTPProxy对每一路会话的流量进行统计,并限制每一路会话流量为100,所以当使用RTPProxy对视频流进行转发时会经常导致花屏现象,具体解决方案如下:H264 frame corrupted when using rtpproxy
1 | What you can do in a short-term, however, is to increase max PPS rate from |
运行RTPProxy
1 | # cd /opt/rtpproxy |
如果需要对 RTPProxy 进行调试,使用如下方式运行 RTPProxy :
1 | # rtpproxy -d DBUG:LOG_MAIL -A 10.0.204.60 -l 10.0.204.60 -s unix:/tmp/rtpproxy.unix -m 2000 -M 2100 -F |
此时,能够在 /var/log/maillog
文件中查看日志输出。
基本功能测试
至此,openSIPS
环境基本配置完毕,可以使用SIP客户端进行基本功能测试。在运行RTPProxy之后,再运行opensips程序。在调式模式下,输出信息中没有错误信息,即可认为opensips
运行成功。
添加测试账号
1 | # ./opensipsctl add zhoulee@10.0.204.60:5060 123456 |
当测试账号添加后,可以在opensips
数据库的subscriber
表中查看到对应的账号信息。
linphone
使用linphone作为SIP客户端,对部署的opensips环境进行基本功能测试。在linphone界面选择USE A SIP ACCOUNT
,在如下界面中输入添加测试账号时的账号和SIP服务器信息,具体配置如下所示:
1 | # ./opensipsctl ul show |
tcpdump调试
在测试过程中,可以使用tcpdump
工具获取SIP协议交互报文。
1 | # tcpdump -i ens192 -nn -s0 -SvX port 5060 -w opensips_register.pcap |
查看是否接收到RTP数据包,10.0.22.40
为手机客户端IP地址
1 | # tcpdump -i ens192 -nn -s0 udp and host 10.0.22.40 |
同时,使用如下命令查看rtpproxy打开的端口情形:
1 | # netstat -anp | grep rtpproxy |
可以看出,2062
的端口号已经被udp协议占用。