macOS虚拟机+Qt编译pjsip以及运行环境的配置
初来乍到mac平台,对mac上的依赖库格式完全不了解,而网上基于macOS的教程绝大多数都是基于iOS系统的。于是只能一点点摸索,搞了三天多,终于把pjsip工程编译通过,并且QT工程成功引用,也可以编译通过并运行。
编译版本:PJSIP2.9+Qt5.10.1
先附上官方说明:
https://www.pjsip.org/using.htm
https://trac.pjsip.org/repos/wiki/Getting-Started/Autoconf
环境准备
1.通过App Store安装Xcode,可以直接按以下教程,这样接下来的几个就都包含了
2.安装Xcode的命令行工具
3.安装make
4.安装gcc
5.安装binutils
brew install binutils
安装这个之前,需要先保证电脑里安装了brew……
由于我的电脑死活安不上brew,我选择了直接用源码编译
https://ftp.gnu.org/gnu/binutils/
6.下载SDL2安装
http://www.libsdl.org/download-2.0.php
7.下载FFmpeg源码包
我用的是3.4.7版本
http://ffmpeg.org/download.html#releases
8.下载PJSIP源码包
https://www.pjsip.org/download.htm
开始编译
编译并安装FFmpeg
双击ffmpeg压缩包,解压,打开终端,将目录定位到解压后的文件夹内
执行命令,进行配置,并且指定生成动态库和静态库
./configure --enable-shared --enable-static
编译&安装
make && make install
然后就是漫长的等待,安装完成之后,通过命令ffmpeg -v查看是否安装成功,出现版本号即为安装成功
编译PJSIP
1. 解压PJSIP源码包,使用终端进入目录
打开目录pjlib/include/pj/,建立文件config_site.h,输入以下内容,打开视频的支持,并指定使用Mac平台下的编解码工具VideoToolBox,保存关闭
#define PJMEDIA_HAS_VIDEO 1 #define PJMEDIA_HAS_VID_TOOLBOX_CODEC 1
2. 返回PJSIP根目录
如果需要使用VP8解码,则参见文章最后的内容
执行命令
./configure --enable-shared --enable-static
一开始FFmpeg和PISIP都没有指定生成动态库和静态库,就怎么都编译不过去,指定之后就好了
3. 编译&安装
make && make install
按照上面的方法进行配置的话,基本就可以直接安装成功了,接下来是调用。
Qt工程调用
1.新建qt工程
在工程文件夹内创建文件夹lib,里面再建立几个文件夹,分别命名为third_party,ffmpeg,sdl2,pjsip
下一步将把依赖的库都考进来
2.拷贝依赖库
third_party
打开pjproject/third_party/lib,将里面所有.a结尾的库,都拷到上一步建立的third_party文件夹
打开finder,使用快捷键⌘+shift+G打开/usr/local/lib目录,因为都进行了安装,我们需要的后三个库都在这里面
ffmpeg
将ffmpeg相关的,以dylib结尾的库拷贝到上一步建立的ffmpeg文件夹
尝试一开始通过依赖.a的库来编译,但是.a为后缀的库里没有libpostproc这个库,于是改为依赖dylib
sdl2
将sdl2相关的以下库也拷到对应文件夹
pjsip
pjsip同理,拷.a结尾的文件
3.配置Qt工程
库配置
项目上右键-添加库-外部库-选择依赖的库文件,再将windows和linux的勾去掉
添加成功后,pro文件会出现以下形式的内容,作为一个有追求的程序猿,通常我都会把后几条删掉,只保留第一条,更简洁
macx: LIBS += -L$$PWD/../lib/third_party/ -lg7221codec-x86_64-apple-darwin19.2.0 INCLUDEPATH += $$PWD/../lib/third_party DEPENDPATH += $$PWD/../lib/third_party macx: PRE_TARGETDEPS += $$PWD/../lib/third_party/libg7221codec-x86_64-apple-darwin19.2.0.a
其他的库同理,不过比起一条条这样加,直接在pro文件里改会更快
头文件配置
头文件依赖路径也需要添加,如下面的格式
INCLUDEPATH += ../../include\ ../include/pjsip/pjsip\ ../include/pjsip/pjlib\ ../include/pjsip/pjlib-util\ ../include/pjsip/pjmedia\ ../include/pjsip/pjnath\ ../include/sdl
到这里,qt工程里就可以调用pjsip的函数,进行编译了!
使用VP8解码
VP8解码需要安装额外的内容,否则编出来的pjsip库用不了VP8
参考文章
http://www.linuxfromscratch.org/blfs/view/svn/multimedia/libvpx.html