type
status
date
slug
summary
tags
category
icon
password
notion image

绪论

该实验需要用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
直接下载并安装即可
日常脑洞——尺规作图计算机安全总结
  • Twikoo