admin 管理员组

文章数量: 887021

【网络通信

【网络通信 -- SIP 电话】项目实战记录 -- SIP 服务器 OPENSIPS 搭建测试与 SIP 客户端 PJSIP 编译安装测试

【1】SIP 服务器 OPENSIPS 搭建

1.1 安装环境准备

sudo apt-get install gcc make m4
sudo apt-get install flex bison ncurses libncurses-dev ncurses-devel
sudo apt-get install mysql mysql-server mysql-client libmysqlclient-devsudo apt-get install bison gperf libxml2-utils make zip libxml2-dev
sudo apt-get install libncurses5-dev libncursesw5-dev flex

1.2 安装配置 OPENSIPS

下载地址 : opensips 各个版本下载地址

OPENSIPS 软件包获取 : 

将安装包拷贝到 /usr/local/src 并解压 tar -xzvf opensips-2.3.1.tar.gz
安装后的配置文件放在 /usr/local/etc/opensips/ 目录下,运行文件放在  /usr/local/sbin/ 目录下

OPENSIPS 安装 :

cd opensips-2.3.1
make menuconfig

依次选择Configure Compile Options --->Configure Excluded Modules--->db_mysql

空格键选择 db_mysql
按q 键返回上一级,选择 Configure Install Prefix 
回车输入安装路径 /usr/local/
再依次按回车

选择 ---> Save Changes 保存修改
按 q 返回,选择 ---> Compile And Install OpenSIPS ,回车安装
安装后的配置文件放在 /usr/local/etc/opensips/ 目录下,
运行文件放在 /usr/local/sbin/ 目录下

OPENSIPS 配置 :

进入 /usr/local/sbin/ 目录,cd /usr/local/sbin/
运行 osipsconfig 命令,./ osipsconfig

依次选择 Generate OpenSIPS Script ---> Residential Script ---> Configure Residential Script

按 q 退出,选择 ---> Generate Residential Script 回车,
在目录 /usr/local/etc/opensips/ 下回生成新的配置文件(带有时间)
例如 : opensips_residential_2020-3-3_10:16:4.cfg
进入配置文件目录 cd /usr/local/etc/opensips/,
修改配置文件 vim opensips_residential_2020-3-3_10:16:4.cfg, 修改内容如下log_facility=LOG_LOCAL1listen=udp:192.168.241.129:5060   # CUSTOMIZE ME
listen=tcp:192.168.241.129:5060   # CUSTOMIZE MEmpath="/usr/local/lib64/opensips/modules/"#### URI module
loadmodule "uri.so"
modparam("uri", "use_uri_table", 0)
modparam("uri", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")
修改 opensipsctlrc 文件, vim opensipsctlrc释放其中关于 DB 的注释,并修改 IP 地址SIP_DOMAIN=192.168.241.129
DBENGINE=MYSQL
DBPORT=3306
DBHOST=localhost
DBNAME=opensips
DBRWPW="opensipsrw"
DBROOTUSER="root"
USERCOL="username"
创建数据库
cd /usr/local/sbin/
开启数据库也是这个命令
./opensipsdbctl create
出现的选项全部 n登录 mysql 数据库
mysql -u root -p 这里要输入前面安装数据库时输入的密码查询 mysql 中的数据库           : mysql>show databases;
选定 mysql 中的 opensips 数据库 : mysql>use opensips;
查询 opensips 数据库中的表      : mysql>show tables;
查询表中的数据 : chaumysql>select * from subscriber; 该表中存放了注册进入 opensips 的用户信息
退出数据库 : mysql>quit;
添加 sip 用户
./opensipsctl add username password
例如 :
./opensipsctl add 1000 111
删除用户 :
./opensipsctl rm 1000如果出现 ERROR: domain unknown: use usernames with domain or set default domain in SIP_DOMAIN
说明环境变量未配置,
解决 : vim /etc/environment,在里面写入 SIP_DOMAIN="你的IP Domain", 而后再source 下即可
默认的数据库用户为 opensips,密码为 opensipsrw
同样可以直接在 /usr/local/opensips_proxy/etc/opensips 的配置文件修改对应的 DBRWUSER, DBRWPW
cd /usr/local/src/opensips-2.3.1/packaging/debian/common/
cp opensips.init /etc/init.d/opensips
chmod +x /etc/init.d/opensips
vim /etc/init.d/opensips修改如下 :
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/opensips
NAME=opensips
DESC=opensips
CFGFILE=/etc/opensips/opensips.cfgOPTIONS="-P $PIDFILE -m $S_MEMORY -M $P_MEMORY -u $USER -g $GROUP -f 
/usr/local/etc/opensips/opensips_residential_2020-3-3_10:16:4.cfg"
同样在目录 /usr/local/src/opensips-2.3.1/packaging/debian/common/ 下
cp opensips.default /etc/default/
cd /etc/default/
mv opensips.default opensips
vim opensips修改如下 :
RUN_OPENSIPS=yes
USER=root
GROUP=root
S_MEMORY=128
设置日志文件
touch /var/log/opensips.log,建立 opensips 日志文件
chmod 777 /var/log/opensips.log
vim /etc/rsyslog.d/50-default.conf 
(根据不同的系统或者 opensips 版本不同,文件名可能不同)
在最后增加如下内容
local0.* -/var/log/opensips.log
重启 syslog 服务,启动 opensips
service rsyslog restart在目录/usr/local/sbin/ 下
执行
./opensipsctl start (restart为重启  stop为关闭)在所有的安装配置中如果遇到错误用命令 tail –n 20 /var/log/syslog 或者 tail –f /var/log/syslog

【2】SIP 客户端 PJSIP 编译安装

2.1 安装 SDL 开发库

下载安装 SDL2 的开发库, apt-get install libsdl2-dev下载安装 SDL1.2 的开发库, apt-get install libsdl1.2-dev

2.2 编译安装 FFMPEG 开发库

安装依赖库
apt-get install build-essential git-core checkinstall yasm texi2html libvorbis-dev 
apt-get install libx11-dev libvpx-dev libxfixes-dev zlib1g-dev 
pkg-config netcat libncurses5-devapt-get install nasm libx264-dev libx265-dev Libmp3lame-dev libopus-dev libfdk-aac-dev编译安装 libvpx
./configure --enable-pic --disable-static --enable-shared
make
make install
注意 : 编译时有可能存在部分文件没有执行权限的问题, chmod -R +x /libvpx编译安装 libyuv
make -f linux.mk CXXFLAGS="-fPIC -O2 -fomit-frame-pointer -Iinclude/"
make install编译安装 ffmpeg2.8.10
/configure --enable-shared --enable-static --enable-memalign-hack --enable-gpl --enable-version3 \ 
--enable-postproc --enablelibvorbis --enable-libvpx --enable-libx264
make
make installffmpeg -version 报如下错误
ffmpeg: error while loading shared libraries: libavdevice.so.56:cannot open shared object file: 
No such file or directory
解决方法 :
vi /etc/ld.so.conf
加入 ffmpeg 安装路径 : /usr/local/lib
执行, ldconfig

2.3 编译安装 pjsip

编译安装 opencore-amr-0.1.3
./configure
make
make install编译安装 openh264-1.0.0
make
make install编译安装 vo-amrwbenc-0.1.3
./configure
make
make install安装 v4l2
sudo apt-get install libv4l-dev编译安装 pjsip
./configure
make dep
make
make install

【3】SIP 通话测试

3.1 Windows 端 Linphone

1. 填写自己的显示名称;
2. 填写自己 sip 服务器上已经注册的账户;
3. 添加 sip 代理账户;
4. 按格式填写,IP 为 PC 机 IP 地址,5060 默认端口;
5. 按格式填写,IP 为 SIP 服务器地址,5060 默认端口;

1. 点击添加 Linphone 联系人;
2. 填写联系人名称;
3. 按格式填写,IP 为 SIP 服务器地址,5060 默认端口;
4. 自动识别,不用改;

3.2 Linux 端 PJSUA

启动 PJSUA :./pjsua-x86_64-unknown-linux-gnu --play-file ./wavfiles/sa1.wav --auto-answer 200 \ 
--auto-play --auto-loop --max-calls 32 --local-port=5061 --log-file=./log/pjsua.log

3.3 通话测试

【4】基于 PJSIP 协议栈的 API 学习整理与客户端开发

详见 :

【Linux 网络通信】PJSUA API 学习与客户端开发 -- 实现简单的通话功能

【5】常见问题总结

5.1 编译安装 libvpx 问题

vpx_scale/generic/vpx_scale.c: In function `Scale2D': 
vpx_scale/generic/vpx_scale.c:291: 
error: `vp8_horizontal_line_5_4_scale' undeclared (first use in this function) 
vpx_scale/generic/vpx_scale.c:291: 
error: (Each undeclared identifier is reported only once 
vpx_scale/generic/vpx_scale.c:291: 
error: for each function it appears in.) 
vpx_scale/generic/vpx_scale.c:295: 
error: `vp8_horizontal_line_5_3_scale' undeclared (first use in this function) 
vpx_scale/generic/vpx_scale.c:299: 
error: `vp8_horizontal_line_2_1_scale' undeclared (first use in this function) 
vpx_scale/generic/vpx_scale.c:311: 
error: `vp8_vertical_band_5_4_scale' undeclared (first use in this function) 
vpx_scale/generic/vpx_scale.c:317: 
error: `vp8_vertical_band_5_3_scale' undeclared (first use in this function) 
vpx_scale/generic/vpx_scale.c:326: 
error: `vp8_vertical_band_2_1_scale' undeclared (first use in this function) 
vpx_scale/generic/vpx_scale.c:331: 
error: `vp8_vertical_band_2_1_scale_i' undeclared (first use in this function) 原因 :
It seems to me the header file vpx_rtcd.h that is supposed to include 
these functions is generated on the fly (libsrc/libvpx/vp8/common/rtcd_defs.sh)
也就是说有些文件是 script 自动生成的,但是这些文件现在生成有问题vpx_scale/vpx_scale_rtcd.sh 这个 shell 没有执行成功,应该也是 dos 和 unix 格式的问题可以尝试升级 make 工具解决

 

参考与致谢

本博客为博主的学习实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。

【1】Sip服务器搭建全过程(Linphone拨号)

【2】Ubuntu下opensips服务器搭建测试最新完整版

【3】ubuntu16.04 配置opensips服务器并编译pjsip测试

【4】Google WEBM project -VP9

【5】linux下不能执行/bin/sh脚本的原因:command not found

【6】pjsua Manual Page

【7】pjsua Manual Page (PJSUA 使用指南)

文档资料与软件包

【1】PJSIP开发指南中文版

【2】Ubuntu 16.04编译支持视频的pjsip

本文标签: 网络通信