我的项目中,需要视频通话功能,所以PjSip需要配置h264编码器,在编译PjSip前,需要先编译openh264。
一、编译openh264
1)、设置环境变量,Android NDK 编译PjSip 2.6 之 环境准备 (一)中说明了,可以把环境变量保存成env.sh文件。
$export ANDROID_SDK_ROOT=/home/xxx/PJSIP/android-sdk-linux
$export PATH=$ANDROID_SDK_ROOT/tools:$PATH
上面中xxx为我的工作目录。ANDROID_SDK_ROOT变量请根据自己的SDK路径配置。
2)、编译
$make OS=android NDKROOT=/home/xxx/PJSIP/android-ndk-r13b TARGET=android-22 PREFIX=./androidlib install-shared
NDKROOT请根据自己的NDK路径,设置成自己的绝对路径。
TARGET设置成自己需要编译的android的对应的版本,我要在android 5.1上运行,所以设置的是android-22
PREFIX设置openh264编译成功后的安装目录。这个在编译PjSip时,需要使用到,里面包含include头文件夹目录和lib库目录。
二、编译PjSip
1)、新建config_site.h文件,并把文件放入PjSip工程目录:pjproject-2.6/pjlib/include/pj/config_site.h
config_site.h内容如下:
/* Activate Android specific settings in the 'config_site_sample.h' */
#define PJ_CONFIG_ANDROID 1
//To enable video
#define PJMEDIA_HAS_VIDEO 1
//To enable libyuv
#define PJMEDIA_HAS_LIBYUV 1
//To enable TCP transport
#define PJ_HAS_TCP 1
#include
2)、设置NDK环境变量
$export ANDROID_NDK_ROOT=/home/xxx/PJSIP/android-ndk-r13b
请根据自己的NDK目录路径设置。
3)、配置PjSip
$NDK_TOOLCHAIN_VERSION=4.9 TARGET_ABI=armeabi-v7a APP_PLATFORM=android-22 ./configure-android --use-ndk-cflags --with-openh264=/home/xxx/PJSIP/androidlib/
NDK_TOOLCHAIN_VERSION=4.9 这个必须设置,PjSip 2.6编译如果没有设置这个,configure-android无法配置成功
TARGET_ABI根据自己的android机器CPU,设置相应的ABI,目前支持的ABI有: armeabi、armeabi-v7a、arm64-v8a、x86
APP_PLATFORM=android-22设置成自己需要运行的android版本,我的是android5.1所以设置成android-22
--use-ndk-cflags 为系统选项,必须跟上
--with-openh264=/home/xxx/PJSIP/androidlib/ 设置成openh264编译成功后,生成的androidlib目录路径,设置成绝对路径,androidlib目录名称参考openh264编译中PREFIX的目录名称。
4)、编译PjSip
$make dep && make clean && make
5)、使用SWIG编译java接口文件
如果还没有安装SWIG,先安装SWIN
$sudo apt-get install swig
进入pjproject-2.6/pjsip-apps/src/swig目录,执行
$make
会在pjproject-2.6/pjsip-apps/src/swig/java/android/app/src/main/jniLibs目录下生成libpjsua2.so,这个so是给apk使用的。同时在pjproject-2.6/pjsip-apps/src/swig/java/android/app/src/main生成很多java文件。这些文件是给apk开发使用的。
好了,到此,PjSip编译完成。生成了libpjsua2.so和相应的java文件供开发apk使用。