最近在做的一个项目是从头开始的一个音视频开发,由于以前大家完全没有相关的经验,做出来花了不少功夫,记录一下流程
大体框架:
客户端使用的是开源的pjsip,服务器用的开源的opensips服务器,nat穿越使用的是restund,其中视频群聊还用到了nginx搭建推拉流服务器。
开发环境:
ubutun 14 AS3.0 android-ndk-r14
软件环境:
pjsip2.7.2 retund0.4.12
首先是服务器opensips的搭建:
一、去opensips官网下载最新版的opensips源码,我这边的版本是opensips2.4.1
二、将以上源码解压至/root
三、安装mysql数据库,通过apt-get直接获取,没有联网的兄弟可以下载mysql安装包手动安装
四、解压源码压缩包,cd opensips-2.4.1/
五、
<1> make all
<2> apt-get install libncurses5-dev(这个是一个界面化的库,主要是为了方便后面去界面安装opensips)
<3> make menuconfig
<4>在menuconfig中选择—>Configure Compile Options—> Configure Excluded Modules
按q键返回上一级,选择—> Configure Install Prefix,输入/usr/local/opensips_proxy后按回车表示安装在/usr/local/opensips_proxy目录下。(这个目录自己需要先建立)
选择 —> Save Changes 保存修改。
按q返回,选择 —> Compile And Install OpenSIPS,回车安装。
至此,opensips安装第一步已经完成
三、配置opensips
进入先前设置的Configure Install Prefix目录(默认是/usr/local/opensips)下的sbin目录。如:/usr/local/opensips/sbin/,此处的目录是你自己事先已经指定的目录,(这是以前版本安装完成后不会自动打开界面的处理流程),2.7中opensips安装完成后会直接打开界面,直接选择Generate OpenSIPS Script --> Residential Script --> Configure Residential Script,
按空格键,选择:
[*] ENABLE_TCP
[*] USE_ALIASES
[*] USE_AUTH
[*] USE_DBACC
[*] USE_DBUSRLOC
[*] USE_DIALOG
[*] USE_NAT
按q退出返回上一级界面,选择:Save Residential Script,保存设置。
再选择:Generate Residential Script,生成脚本。
这里一定生成opensips_XX_XX.cfg,文件,如果没有生成说明执行有问题,必须重新开始
2、配置opensips.cfg脚本
进入/usr/local/opensips_proxy/etc/opensips目录,可以看到刚才生成的脚本文件
运行下面命令,把刚生成的脚本文件覆盖原来的脚本文件:opensips.cfg
mv opensips_residential_xxx.cfg opensips.cfg
编辑脚本文件:opensips.cfg
$sudo vi opensips.cfg
修改下面的代码:
修改红p为服务器的IP地址,tcp和udp都要修改,端口号为需要监听的socket端口号,保存退出。
3、配置opensipsctlrc脚本
编辑脚本文件:opensipsctlrc(脚本文件还是在/usr/local/opensips/etc/opensips目录)
$ sudo vi opensipsctlrc
修改SIP_DOMAIN为服务器的ip地址:
去除下面代码的注释:
保存退出
这边的DBRWPW的密码最好不要修改,因为我们在修改的时候发现在opensips创建库并生成表的时候会生成另外一个临时文件,这个文件中的密码是刚开始生成目录的时候去读的,而登陆数据库的密码默认用的是这个文件中的密码,如果修改了数据库的密码然后起服务的时候回去读opensipsctlrc这个文件中的密码,然后会提示失败access denied。
四、新建opensips数据库
进入/usr/opensips/sbin目录
运行命令:
$ ./ opensipsdbctl create
在创建数据库的过程中,会提示需要设置数据库的密码。
五、创建用户
创建opensips的用户,用于拨打电话使用。
$ opensipsctl add 12345 12345
前面的12345为用户名,后面的12345为密码
六.启动服务并检验
修改日志文件配置,是opensips的日志保存在/var/log/opensips.log
touch /var/log/opensips.log sudo chmod 777 /var/log/opensips.log sudo vi /etc/rsyslog.d/opensips.conf
增加如下内容
local0.* /var/log/opensips.log
重启syslog服务,启动opensips
service rsyslog restart
/usr/local/opensips_proxy/sbin/opensipsctl start
至此,opensips服务启动成功。
异常情况:
1、如果启动失败,查看/var/log/opensips.log文件查找错误.
服务启动后,防火墙开启tcp及udp的端口
iptables -I INPUT -p tcp –dport 5060 -j ACCEPT
iptables -I INPUT -p udp –dport 5060 -j ACCEPT
iptables-save
2、
通过日志查看mysql.sock的路径配置错误,所以需要配置mysql.sock的路径;其中opensips中已经固定死路径(就在/var/lib/mysql/mysql.sock下),所以需要修改mysql中mysql.sock的路径。
修改配置my.cnf文件
============================================
[client]
socket =/var/lib/mysql/mysql.sock
[mysqld]
socket = /var/lib/mysql/mysql.sock
============================================
修改/etc/my.cnf
执行 # chown -R mysql:mysql /var/lib/mysql
3、
如果出现 Jun 4 13:34:36 OpenSIPS /sbin/opensips[53232]: ERROR:db_mysql:db_mysql_connect: driver error(1045): Access denied for user 'opensips'@'localhost' (using password: YES)
解决方法:
mysql> grant all privileges on opensips.* to opensips@localhost identified by 'opensipsrw';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
重新启动OpenSIPS
[root@OpenSIPS ~]# opensipsctl start
4、
还有可能遇到:Access denied for user 'root'@'%'问题:
一·解决办法
以上的坑都是我安装的时候遇到的,其中大部分都比较分散,在这边我集中一波