pjsip编译以及添加opus与webrtc aec模块
pjsip版本2.5.5
1.linux编译
./configure
make dep && make clean && make
2.android编译
!!!记住,NDK千万不要用android studio下的ndk-bundle,坑的很,它那个好像不完整
!!!自己去下个独立的NDK包
//添加环境变量,指定ndk路径和编译的平台level
export ANDROID_NDK_ROOT=~/android_tools/ndk
export APP_PLATFORM=android-16
export TARGET_ABI=armeabi-v7a //定义编译cpu架构
其他选项可通过./configure-android -h查看
//修改pjsip的编译配置pjlib\include\pj\config_site.h,写入以下内容
#define PJ_CONFIG_ANDROID 1
#define PJMEDIA_HAS_OPUS_CODEC 1 //需要添加opus音频编解码器支持时定义该项
#include <pj/config_site_sample.h>
//编译
./configure-android --use-ndk-cflags --with-opus=pjsip路径/thirdparty/opus
make dep && make clean && make
上面的方式是生成了各个模块的静态库,要编译pjsip的动态库,编译完静态库之后还需要安装swig编译动态库和接口。需要swig 2.0.5以上的版本。ubuntu 12.04自带的swig是2.0.4,不符合要求,需要自行编译安装swig的新版本
然后到pjsip-apps/src/pjsua/android目录下面我们要编译android项目所需要的库,
修改jni下的Application.mk,添加下面两项
APP_ABI :=armeabi-v7a
APP_PLATFORM :=android-16
如果有添加webrtc-aec模块,还需在Android.mk文件添加webrtc模块链接路径
LOCAL_LDLIBS+=-L(call host-path,$(LOCAL_PATH)/../../../../../third_party/webrtc-android/armeabi-v7a) -lwebrtc
运行ndk-build,
则会生成pjsip的动态库。
3.添加视频支持
linux下:
pjlib/include/pj/config_site.h添加如下宏定义:
#define PJMEDIA_HAS_VIDEO 1
#define PJMEDIA_HAS_FFMPEG 1
#define PJMEDIA_VIDEO_DEV_HAS_SDL 1
#define PJMEDIA_VIDEO_DEV_HAS_V4L2 1
安装v4l2库:
sudo apt-get install libv4l-dev
安装ffmpeg sdl2
然后重新configure&&make dep&&make
4.添加opus音频编解码器支持
pjlib/include/pj/config_site.h添加如下宏定义:
#define PJMEDIA_HAS_OPUS_CODEC 1
linux下:
从opus官网下载opus库,并编译:
./configure&&make&&make install
重新编译pjsip库
make dep&&make
其他平台:
进入pjsip的thirdparty文件夹下:
cd thirdparty
mkdir opus
cd opus
mkdir include
mkdir lib
cd include
mkdir opus
然后将opus的头文件拷贝到include/opus文件夹下
将交叉编译的opus静态库拷贝到lib文件夹下
重新编译pjsip库,指定opus路径
./configure --with-opus=pjsip路径/thirdparty/opus
make dep
make
5.添加webrtc AEC模块
Android下:
进入pjsip的thirdparty文件夹下:
mkdir webrtc-android
将webrtc-aec.rar解压,并将里面的jni文件夹拷贝到webrtc-android目录下。
进入jni文件夹下,修改Android.mk的最后一行为:include $(BUILD_STATIC_LIBRARY) (修改这里是我想让它生成静态库,后面可以直接链接进pjsua.so里面,不然生成so的话,APP得额外加载一次libwebrtc.so)
执行ndk-build,将生成libwebrtc.so
进入pjsip工程根目录,将里面的user.mak.sample文件修改为user.mak,并添加下面两行:
export CFLAGS += -I"(你的pjsip工程目录)/third_party/webrtc-android/jni/src" -DPJMEDIA_HAS_WEBRTC_AEC=1 -DPJMEDIA_WEBRTC_AEC_USE_MOBILE=1
export LDFLAGS += -L"(你的pjsip工程目录)/third_party/webrtc-android/obj/local/armeabi-v7a" -lwebrtc
重新编译pjsip库即可。
webrtc-aec.rar下载地址:
链接:https://pan.baidu.com/s/1k2Ly6DDUVTp2Mj9HR489cA 密码:v9ad