Pjsip 編譯Android 版本
1. 編譯環境:
win7 MYSM
Android相關
-
sdk 路徑 D:\Android\sdk
-
ndk 路徑 D:\Android\sdk\ndk-bundle 版本號:source.properties--> Pkg.Revision = 15.1.4119039
pjproject-2.7.2
bcg729 - 1.0.4
2. 安裝MSYS2
3. 單獨編譯Pjsip
官方編譯指導點選開啟
增加標頭檔案 pjproject-2.7.2\pjlib\include\pj\config_site.h
// 內容
/* Activate Android specific settings in the 'config_site_sample.h' */
#define PJ_CONFIG_ANDROID 1
#include <pj/config_site_sample.h>
複製程式碼
// 匯入Andorid ndk 路徑
export ANDROID_NDK_ROOT=/d/Android/sdk/ndk-bundle
cd pjproject-2.7.2
// 編譯 pjsip
./configure-android
make dep && make clean && make
// 編譯 Android 靜態庫
cd pjsip-apps/src/swig/
make
複製程式碼
4. 增加 G729 編碼支援
官方編譯指導點選開啟
linphone bcg729原始碼 比GitHub BelledonneCommunications bcg729 新
4.1 編譯 bcg729
4.1.1 檢視build_bcg729.sh 檔案,並修改相關配置
在以下路徑存在build_bcg729.sh 檔案
- AndroidPractice/pjsip_source/bcg729/android/build_bcg729.sh
$ pwd
/d/Android/work2018/my/AndroidPractice/pjsip_source/bcg729/android
$ ls
build_bcg729.sh
複製程式碼
build_bcg729.sh 檔案內容
# 1. 匯入 Android 環境變數
# * 此處需要根據您的 sdk ndk 路徑進行修改
export PATH=/d/Android/sdk/cmake/3.6.4111459/bin/:$PATH
export ANDROID_NDK_ROOT=/d/Android/sdk/ndk-bundle
# 2. cmake 命令,
# 注意:
# * CMAKE_TOOLCHAIN_FILE ,此處需要根據您的 ndk 路徑進行修改
# * CMAKE_MAKE_PROGRAM ,此處需要根據您的 sdk 路徑進行修改
# * CMAKE_GENERATOR="Ninja" , 使用 Ninja,特別此處存在雙引號
# * CMAKE_SYSTEM_NAME=Android, 使用 Android
# * CMAKE_SYSTEM_VERSION ,Android 版本
# * CMAKE_ANDROID_ARCH_ABI ,生成的 靜態庫 型別
# * 從此處開始到 cmake end ,不能存在註釋分割命令列
cmake ../ \
-DCMAKE_TOOLCHAIN_FILE=/d/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake \
-DCMAKE_MAKE_PROGRAM=/d/Android/sdk/cmake/3.6.4111459/bin/ninja.exe \
-DANDROID_TOOLCHAIN=clang \
-DCMAKE_GENERATOR="Ninja" \
-DCMAKE_SYSTEM_NAME=Android \
-DCMAKE_SYSTEM_VERSION=17 \
-DCMAKE_ANDROID_ARCH_ABI=armeabi \
-DCMAKE_ANDROID_NDK=/d/Android/sdk/ndk-bundle \
-DCMAKE_ANDROID_STL_TYPE=gnustl_static \
-DENABLE_STATIC=ON \
-DENABLE_SHARED=ON \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_TESTS=OFF \
-DCMAKE_SKIP_INSTALL_RPATH=ON \
# cmake end
# 3. 使用 ninja 進行編譯
ninja
複製程式碼
4.1.2 執行 build_bcg729.sh,進行編譯
$ ./build_bcg729.sh
-- Android: Targeting API '14' with architecture 'arm', ABI 'armeabi-v7a', and processor 'armv7-a'
-- Android: Selected Clang toolchain 'arm-linux-androideabi-clang' with GCC toolchain 'arm-linux-androideabi-4.9'
-- Check for working C compiler: D:/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe
-- Check for working C compiler: D:/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Package file name is bcg729-1.0.4
-- Configuring done
-- Generating done
-- Build files have been written to: .../../.../AndroidPractice/pjsip_source/bcg729/android
.......
[51/54] Building C object src/CMakeFiles/bcg729.dir/cng.c.o
[52/54] Building C object src/CMakeFiles/bcg729.dir/dtx.c.o
[53/54] Building C object src/CMakeFiles/bcg729.dir/vad.c.o
[54/54] Linking C shared library src\libbcg729.so
複製程式碼
4.1.3 最終生成的靜態庫路徑
D:\Android\work2018\my\AndroidPractice\pjsip_source\bcg729\android\src\libbcg729.so
複製程式碼
4.2 根據pjsip 編譯檔案,修改bcg729相關路徑
4.2.1 分析 pjsip 編譯檔案
- AndroidPractice\pjsip_source\pjproject-2.7.2\aconfigure
if test "x$with_bcg729" != "xno" -a "x$with_bcg729" != "x"; then
BCG729_PREFIX=$with_bcg729
BCG729_CFLAGS="-I$BCG729_PREFIX/include"
BCG729_LDFLAGS="-L$BCG729_PREFIX/lib"
複製程式碼
可知 pjsip 編譯過程中,會查詢對應的 “BCG729_PREFIX/include”、“BCG729_PREFIX/lib”
因此,在修改 bcg729檔案目錄
bcg729
|-- include
|-- bcg729
|-- decoder.h
|-- encoder.h
|-- lib
|-- libbcg729.so
複製程式碼
4.2.2 編譯pjsip
4.2.2.1 執行以下命令,檢視控制檯輸出
cd pjproject-2.7.2
export ANDROID_NDK_ROOT=/d/Android/sdk/ndk-bundle
./configure-android --with-bcg729=/d/Android/work2018/my/AndroidPractice/pjsip_source/bcg729
複製程式碼
錯誤結果:
Using bcg729 prefix... ./bcg729
checking bcg729 usability... no
Checking if libyuv is disabled...no
這是由於 上一步 bcg729檔案目錄 ,未正確配置, 需要修改 bcg729檔案目錄
複製程式碼
正確結果:
Using bcg729 prefix... ./bcg729
checking bcg729 usability... ok
複製程式碼
4.2.2.2 第二步
make dep && make clean && make
// 編譯 Android 靜態庫
cd pjsip-apps/src/swig/
make clean && make
複製程式碼
錯誤:
d:/android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld.exe: error: cannot find -lbcg729
collect2.exe: error: ld returned 1 exit status
make[2]: *** [/d/Android/work2018/my/AndroidPractice/pjsip_source/pjproject-2.7.2/build/rules.mak:125:../bin/pjlib-test-arm-unknown-linux-androideabi] 錯誤 1
make[2]: 離開目錄“/d/Android/work2018/my/AndroidPractice/pjsip_source/pjproject-2.7.2/pjlib/build”
make[1]: *** [Makefile:112:pjlib-test-arm-unknown-linux-androideabi] 錯誤 2
make[1]: 離開目錄“/d/Android/work2018/my/AndroidPractice/pjsip_source/pjproject-2.7.2/pjlib/build”
make: *** [Makefile:14:all] 錯誤 1
原因 無法找到 libbcg729.so
修正 ./configure-android --with-bcg729=[完整全路徑]
複製程式碼
大功告成,獲取 pjsip 靜態庫、 bcg729 靜態庫
AndroidPractice\pjsip_source\pjproject-2.7.2\pjsip-apps\src\swig\java\android\app\src\main\jniLibs\armeabi\libpjua2.so
AndroidPractice\pjsip_source\bcg729\lib\libbcg729.so
複製程式碼