【网络通信 -- 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

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

  1. 流媒体通信开发系列索引 -- SIP 电话项目实战系列

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

  2. 【网络通信 -- WebRTC】项目实战记录 -- Chrome 启动参数总结

    [网络通信 -- WebRTC]项目实战记录 -- Chrome 启动参数总结 1 -- 报告伪分配跟踪.伪跟踪从当前活动的跟踪事件派生. 2 --/prefetch:1 /prefetch:启动各种 ...

  3. 【网络通信 -- 直播】项目实战记录 -- 弱网模拟工具

    [网络通信 -- 直播]项目实战记录 -- 弱网模拟工具 [1]Windows 系统中弱网模拟工具 Windows 系统中可以使用 Clumsy 工具模拟弱网环境 Lag(延迟),把数据包缓存一段时间 ...

  4. 【网络通信 -- WebRTC】项目实战记录 -- WebRTC Native SDP 协商没有 H264 载荷问题

    [网络通信 -- WebRTC]项目实战记录 -- WebRTC Native SDP 协商没有 H264 载荷问题 [1]原因分析 webrtc h264 的 supportedHwCodecPro ...

  5. 【网络通信 -- 直播】SRS 实战记录 -- SRS 部署与直播效果测试

    [网络通信 -- 直播]SRS 实战记录 -- SRS 部署与直播效果测试 [1]SRS(Simple Realtime Server) 部署 SRS 代码下载 git clone https://g ...

  6. Web基础之Servlet+JDBC+JSP项目实战记录(一)

    Web基础之Servlet+JDBC+JSP项目实战记录(一) 一.项目说明: 通过前面的学习,我们已经对Servlet有了一定的了解:接下来我们要结合数据库和JSP技术一步一步完成一个小型的动态we ...

  7. python数据分析与挖掘项目实战记录

    python数据挖掘项目实战记录 取自<Python数据分析与挖掘实战>一书,整理各个项目中用到的数据处理方法: 数据预处理方法 建立模型方法 绘制图形 对于分类问题:用模型分类:混淆矩阵 ...

  8. (B站云e办)SpringBoot开发项目实战记录(七)(员工管理(分页知识))

    (B站云e办)SpringBoot开发项目实战记录(七) 一.员工管理 1.1 准备工作(分页配置类.日期格式化类) 1. mybatisplus配置类分页 2. 日期格式化类(converter) ...

  9. (B站云e办)SpringBoot开发项目实战记录(八)(Easy poi 完成excel导出导入)

    (B站云e办)SpringBoot开发项目实战记录(八) 一. pom依赖 二. 下载文件 2.1 jopo注释注解@Excel与@ExcelEntry 2.2 controller层 (完成exce ...

最新文章

  1. springboot 项目将本地引用打进jar包
  2. shell安装mysql,连接数据库,创建数据库
  3. cocos2dx xcode5 创建项目
  4. vbs读取服务器上的txt文件,VBS读写txt文件常用方法
  5. CSS基础必备知识点01
  6. arduino openmv 显示图像_6 个芯片打造复古经典计算机:215 色显示,能编程能玩小游戏...
  7. ubuntu 更新python2.7 ssl 错误解决
  8. 模板模式 php,PHP设计模式5-模板模式
  9. 什么是 Token 令牌
  10. 微信公共平台开发接口(一)
  11. 华为u8500 刷到2.2再刷回2.1后WIFI无法启动的解决办法 无法启动无线局域网
  12. 关于destoon系统遇到的一些问题总结
  13. 3d打印英语文献_多材料的增材制造(3D打印)
  14. 房产|9月全国70城房价出炉!快来看看你的城市房价变化
  15. Python如何判断一个数据的小数点后面首个非零数字位于小数点后面第几位
  16. 3的n次方在c语言中如何表示真和假,C程序作业答案
  17. java float类型是否为空_java – 如何使float类型的变量为null
  18. 解决Direct local .aar file dependencies are not supported when building an AAR. The resulting AAR woul
  19. 图神经网络(三):数学基础
  20. 都是自动挡,AT/CVT/AMT双离合究竟谁最强?

热门文章

  1. 解决无法使用IMAP将Gmail帐户添加到Outlook的问题
  2. 关于Android app 国际化 中英文翻译的细节处理
  3. 三人行SEO教程免费公开下载-学点啥收集整理
  4. numpy入门详细代码
  5. 即时聊天APP(一)
  6. unity-动画状态机Animator
  7. 2022广东省安全员A证第三批(主要负责人)考试题库模拟考试平台操作
  8. 菜鸟学exchange之五:监控exchange 邮件系统和队列查看器
  9. android 电池监测工具,Battery Monitor Widget Pro(电池监测器)
  10. [全网最细]接口测试一般怎么测?接口测试的流程和详细步骤