type
status
date
slug
summary
tags
category
icon
password
绪论
该实验需要用PJSIP进行VOIP软件的开发,老师原本的要求比较低,只要编译源码然后打通学校的服务器即可(使用命令行)。我没有采用官方的GUI Demo(那个是用Qt和C++写的,而我讨厌这俩东西)而是用官方源码编译了Python API,然后用Tkinter写了界面(虽然不是很好看),在语音通话的基础上增加了登录、即时聊天、视频通话等功能。老师不要求自己搭建SIP服务器,而我比较闲(没事找事),在阿里云上分别搭建了3种不同的SIP服务器:Asterisk、OpenSips和MiniSipServer进行测试。
客户端安装
Pjproject
安装视频库和编码器:
下载源码:
添加视频支持,修改文件
pjlib/include/pj/config_site.h
, 添加如下内容:编译安装:
编译Python API
pjsua(官方已废弃)
Python版本:2.7.16
修改
pjsip-apps/src/python/Makefile
中的python版本为2编译安装:
make && make install
pjsua2
Python版本:3.6.8
修改
pjsip-apps/src/swig/python/Makefile
文件,将USE_THREADS
的注释取消,否则会导致视频调用产生死锁编译安装:
make && make install
服务端安装
Asterisk
环境:阿里云 Ubuntu 16.04
安装:
apt install asterisk
修改配置文件
/etc/asterisk/sip.conf
修改配置文件
/etc/asterisk/extensions.conf
注意:由于我的阿里云服务器是公网IP,因此如要修改一下NAT配置。虽然asterisk使用SIP协议建立连接,但是语音数据包走的还是RTP协议,因此需要将阿里云的SIP(默认:5060)端口和RTP(默认:10000~20000)端口都开启,否则会没有声音。
OpenSips
安装依赖:
下载:
git clone https://github.com/OpenSIPS/opensips.git -b 2.4 opensips-2.4
进入根目录:
cd opensips-2.4
多核编译:
make menuconfig -j
选中附加模块:
db_mysql
presence
presence_mwi
presence_xml
presence_dialoginfo
xcap
xcap-client
选择
Compile And Install OpenSIPS
编译完成后运行
osipsconfig
,进行配置:选择
Generate OpenSIPS Script
->Residential Script
->Configure Residential Script
ENABLE_TCP
USE_ALIASES
USE_AUTH
USE_DBACC
USE_DBUSRLOC
USE_DIALOG
USE_NAT
选择
Generate Residential Script
并退出将生成后的文件命名为
opensips.cfg
修改
/usr/local/etc/opensips/opensips.cfg
修改
/usr/local/etc/opensips/opensipsctlrc
运行以下命令创建数据库
opensipsdbctl create
运行
rtpproxy -F -l {ip} -s udp:${ip}:12221
运行
opensipsctl start
MiniSipServer
操作系统:Windows 10
直接下载并安装即可
- 作者:PLUS
- 链接:https://tangly1024.com/article/bupt-computer-network
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。