IM音视频通信开发(1)

最近在做的一个项目是从头开始的一个音视频开发,由于以前大家完全没有相关的经验,做出来花了不少功夫,记录一下流程

大体框架:

客户端使用的是开源的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 

IM音视频通信开发(1)_第1张图片

按q键返回上一级,选择—> Configure Install Prefix,输入/usr/local/opensips_proxy后按回车表示安装在/usr/local/opensips_proxy目录下。(这个目录自己需要先建立)

 

IM音视频通信开发(1)_第2张图片

 

选择 —> 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,保存设置。

IM音视频通信开发(1)_第3张图片

再选择:Generate Residential Script,生成脚本。

IM音视频通信开发(1)_第4张图片

这里一定生成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

修改下面的代码:

  1. /* uncomment the next line to enable IPv6 lookup after IPv4 dns
  2. lookup failures (default disabled) */
  3. #dns_try_ipv6=yes
  4.  
  5. /* comment the next line to enable the auto discovery of local aliases
  6. based on revers DNS on IPs */
  7. auto_aliases=no
  8.  
  9. listen=tcp:127.0.0.1:5060 # CUSTOMIZE ME
  10. listen=udp:127.0.0.1:5060 # CUSTOMIZE ME
  11.  
  12. ####### Modules Section ########
  13.  
  14. #set module path
  15. mpath="/usr/opensips//lib64/opensips/modules/"

修改红p为服务器的IP地址,tcp和udp都要修改,端口号为需要监听的socket端口号,保存退出。

3、配置opensipsctlrc脚本

编辑脚本文件:opensipsctlrc(脚本文件还是在/usr/local/opensips/etc/opensips目录)

$ sudo vi opensipsctlrc

修改SIP_DOMAIN为服务器的ip地址:

  1. ## your SIP domain
  2. SIP_DOMAIN=xxx.xxx.xxx.xxx

去除下面代码的注释:

  1. DBENGINE=MYSQL
  2. DBHOST=localhost
  3. DBNAME=opensips
  4. DB_PATH="/usr/local/etc/opensips/dbtext"
  5. DBRWUSER=opensips
  6. DBRWPW="opensipsrw"
  7. DBROOTUSER="root"
  8. USERCOL="username"

保存退出

这边的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、

 

IM音视频通信开发(1)_第5张图片

通过日志查看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'@'%'问题:

一·解决办法 

  •     第一步:停服务
  • 命令行:
  • /etc/init.d/mysql stop
  • 如果不行,就执行下一行:
  • service mysqld stop
  • 报:
  • Stopping mysqld:  [  OK  ]
  •  
  •  
  • 第二步:跳过密码验证
  • 执行命令行:
  • # /usr/bin/mysqld_safe --skip-grant-tables
  • 报:
  • 151104 09:07:56 mysqld_safe Logging to '/var/lib/mysql/iZ23dq2wm0jZ.err'.
  • 151104 09:07:56 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
  •  
  •  
  • 第三步:无密码登录
  • 执行命令行:
  • mysql -u root 
  •  
  •  
  • 第四步:授权
  • mysql>
  • grant all privileges on *.* to 'root'@'localhost' identified by 'root' with grant option;
  • 关键词解释:
  • root'@'localhost:是用户
  • root:是密码
  •  
  •  
  • 问题一:发现无密码条件下,没有授权的写权限
  • The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
  • 解决方法:
  • mysql> set global read_only=0;//(关掉新主库的只读属性)
  • mysql>flush privileges;
  • grant all privileges on *.* to 'root'@'localhost' identified by 'root' with grant option;#再次重新授权
  • mysql>set global read_only=1;//(读写属性)
  • mysql>flush privileges;
  • mysql>exit;
  • (注意刷新是必须项)
  •  
  •  
  • 第五步:重启数据库
  • service mysqld stop
  • 报:
  • Stopping mysqld:  [  OK  ]
  •  
  •  
  • service mysqld start
  • 报:
  • Starting mysqld:  [  OK  ]
  • 或者
  • service mysqld restart

以上的坑都是我安装的时候遇到的,其中大部分都比较分散,在这边我集中一波

你可能感兴趣的:(IM音视频相关)