根据官方给的文档,要使用 pjsua2 模块需要先安装好 pjsip 环境。pjsua2 模块是构建于 pjsip 之上的高层次封装 API,借助 SWIG,其它高级语言也可以引用使用 pjsua2 模块。
参照的这个官网教程:https://trac.pjsip.org/repos/wiki/Getting-Started/Autoconf
换源
备份 /etc/apt/sources.list 文件,将其内容替换为阿里源。
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
更新系统
sudo apt update
安装依赖包
此处的命令参考了 Docker Hub 上的构建命令:https://hub.docker.com/r/respoke/pjsip/dockerfile
PS:在编译软件时,如果官网的教程不是很详尽,参考 Docker Hub 上的镜像构建命令往往会有帮助。
sudo apt install -y --no-install-recommends \
build-essential \
ca-certificates \
curl \
libgsm1-dev \
libspeex-dev \
libspeexdsp-dev \
libsrtp0-dev \
libssl-dev \
portaudio19-dev
根据文档上的要求,如果需要 Video 支持,需要安装 SDL,libyuv,OpenH264
安装 SDL2
sudo apt install libsdl2-dev
安装 yuv
有点忘记需不要手动安装,以及怎么安装的了
不过手动编译的方法如下
https://chromium.googlesource.com/libyuv/libyuv 可下载 Tar 包
编译
make -f linux.mk
复制库到指定目录
sudo cp libyuv.a /usr/local/lib/
安装 OpenH264
没找到源提供直接安装,所以手动编译,下载 Github 上的项目 https://github.com/cisco/openh264
下载后执行 make
构建完成 sudo make install
即可。
它会这几个库(libopenh264.a,libopenh264.so,libopenh264.so.2.1.0,libopenh264.so.5)复制到 /usr/local/lib/
目录下。
make
时可能会提示系统没有 nasm,安装一下:
sudo apt install -y nasm
上传 Pjsip 项目代码 pjproject-2.10.zip
# 解压缩
unzip pjproject-2.10.zip
# 进入目录
cd pjproject-2.10
自定义配置
再源码目录编辑这个文件: pjlib/include/pj/config_site.h,添加 VIDEO 支持。
#define PJMEDIA_HAS_VIDEO 1
生成编译配置
--enable-shared
选项是为了后续 pjsua2 库能够被其它高级语言使用。
./configure --enable-shared
配置文件没有错误的话会提示自定义配置文件位置。
编译 pjsip
# 开始编译
make dep
make
# 编译没有错误则进行安装
sudo make install
# 刷新动态链接库
sudo /sbin/ldconfig
从输出得知,这些动态链接库被复制到了 /usr/local/lib/ 目录。
libpjsua2-x86_64-unknown-linux-gnu.a libpjsua-x86_64-unknown-linux-gnu.a libpjsip-ua-x86_64-unknown-linux-gnu.a libpjsip-simple-x86_64-unknown-linux-gnu.a libpjsip-x86_64-unknown-linux-gnu.a libpjmedia-codec-x86_64-unknown-linux-gnu.a libpjmedia-videodev-x86_64-unknown-linux-gnu.a libpjmedia-x86_64-unknown-linux-gnu.a libpjmedia-audiodev-x86_64-unknown-linux-gnu.a libpjnath-x86_64-unknown-linux-gnu.a libpjlib-util-x86_64-unknown-linux-gnu.a libsrtp-x86_64-unknown-linux-gnu.a libsrtp.so.2 libsrtp.so libgsmcodec-x86_64-unknown-linux-gnu.a libgsmcodec.so.2 libgsmcodec.so libspeex-x86_64-unknown-linux-gnu.a libspeex.so.2 libspeex.so libilbccodec-x86_64-unknown-linux-gnu.a libilbccodec.so.2 libilbccodec.so libg7221codec-x86_64-unknown-linux-gnu.a libg7221codec.so.2 libg7221codec.so libwebrtc-x86_64-unknown-linux-gnu.a libwebrtc.so.2 libwebrtc.so libpj-x86_64-unknown-linux-gnu.a libpjsua2.so.2 libpjsua2.so libpjsua.so.2 libpjsua.so libpjsip-ua.so.2 libpjsip-ua.so libpjsip-simple.so.2 libpjsip-simple.so libpjsip.so.2 libpjsip.so libpjmedia-codec.so.2 libpjmedia-codec.so libpjmedia-videodev.so.2 libpjmedia-videodev.so libpjmedia.so.2 libpjmedia.so libpjmedia-audiodev.so.2 libpjmedia-audiodev.so libpjnath.so.2 libpjnath.so libpjlib-util.so.2 libpjlib-util.so libpj.so.2 libpj.so
Pjsip 的动态库有了,接下来编译 pjsua2
编译 pjsua2
官方文档:https://www.pjsip.org/docs/book-latest/html/intro_pjsua2.html
1,安装 SWIG
sudo apt install swig
2,安装 jre,jdk
sudo apt install default-jre
sudo apt install default-jdk
3,安装 python3 开发依赖
sudo apt install python3-dev
4,切换到 SWIG 模块目录
cd pjsip-apps/src/swig/
5,编译
make
6,安装
sudo make install
输出
make -C python install
make[1]: Entering directory '/home/dongdong/proj/pjproject-2.10/pjsip-apps/src/swig/python'
python3 setup.py install --user
running install
running build
running build_py
running build_ext
running install_lib
copying build/lib.linux-x86_64-3.6/_pjsua2.cpython-36m-x86_64-linux-gnu.so -> /home/dongdong/.local/lib/python3.6/site-packages
copying build/lib.linux-x86_64-3.6/pjsua2.py -> /home/dongdong/.local/lib/python3.6/site-packages
byte-compiling /home/dongdong/.local/lib/python3.6/site-packages/pjsua2.py to pjsua2.cpython-36.pyc
running install_egg_info
Writing /home/dongdong/.local/lib/python3.6/site-packages/pjsua2-2.10.egg-info
make[1]: Leaving directory '/home/dongdong/proj/pjproject-2.10/pjsip-apps/src/swig/python'
make -C java install
make[1]: Entering directory '/home/dongdong/proj/pjproject-2.10/pjsip-apps/src/swig/java'
make[1]: Nothing to be done for 'install'.
make[1]: Leaving directory '/home/dongdong/proj/pjproject-2.10/pjsip-apps/src/swig/java'
看输出已经将模块复制到了 site-packages,但是在 python3 的还是不没能导入 pjsua2 模块。
到 swig/python 子目录下执行模块的安装脚本
sudo python3 setup.py install
输出
running install
running build
running build_py
running build_ext
running install_lib
copying build/lib.linux-x86_64-3.6/_pjsua2.cpython-36m-x86_64-linux-gnu.so -> /usr/local/lib/python3.6/dist-packages
copying build/lib.linux-x86_64-3.6/pjsua2.py -> /usr/local/lib/python3.6/dist-packages
byte-compiling /usr/local/lib/python3.6/dist-packages/pjsua2.py to pjsua2.cpython-36.pyc
running install_egg_info
Writing /usr/local/lib/python3.6/dist-packages/pjsua2-2.10.egg-info
之后导入 pjsua2 模块测试,没再报错了
对照输出来看,没成功那次复制到了用户 .local 目录下,不在 Python3 的默认搜索路径内。
最近两天编译 Pjsip / Pjsua2 感触:
1,Windows 下编译很麻烦,网上教程少,浪费了一小天的时间,最后看着飙红的C盘放弃尝试。
2,Debian 系有时候软件包和教程要比 Fedora 多那么一些。
其它补充
1,测试编译一个GB28181-摄像头 测试 DEMO时,系统提示找不到 uuid
动态库,安装 uuid-dev
时提示已经安装,链接一下就可以了。
sudo ln -s /lib/x86_64-linux-gnu/libuuid.so.1 /usr/local/lib/libuuid.so
2,另外 demo 编译后报错,是因为示例中自带的 header 头文件是老版本的,而刚刚编译的库是 2.10 最新版的,不匹配造成的错误,只要把 2.10 源码目录的头文件收集起来放在 DEMO 目录,重新生成 Makefile,再编译就不会有运行时报错了
3,.pro
文件生成 Makefile 命令 qmake -o Makefile test.pro
# 安装 qmake
sudo apt install qtchooser
# Ubuntu 安装 QT5
sudo apt install qt5-default
# 如果需要 QT5 界面
sudo apt install qtcreator