Android NDK 編譯PjSip 2.6 之 PjSip編譯 (二)

NO IMAGE

     我的專案中,需要視訊通話功能,所以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 <pj/config_site_sample.h>

       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使用。