PJSIP version 2.7.2 For Android

醉眼笑驚鴻發表於2018-08-09

Pjsip 編譯Android 版本

GitHub 傳送

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
複製程式碼

相關文章