簡體   English   中英

如何在Android設備上使用pjsip以獲得G.729編解碼器功能

[英]How to use pjsip on android device in order to have G.729 codec functionality

我想在我的Android應用程序上使用G.729音頻編解碼器。 我對此做了很多研究,並且知道pjsip是最有希望的解決方案。 但我對這一切並不太了解。 有人可以為我提供在現有Android應用程序中使用pjsip完整步驟,以及如何通過pjsip包含對G729編解碼器的支持。

任何幫助將不勝感激。

編輯:

這是我的android.mk文件。 我想知道,我做對了嗎? 以及如何在我的java代碼中使用這些C函數???

include $(CLEAR_VARS)
LOCAL_MODULE := pjsua-arm-unknown-linux-androideabi
LOCAL_SRC_FILES := $(MY_PJLIB_PATH)/libpjsua-arm-unknown-linux-androideabi.a

 PJSIP_LIBS := $(addprefix pjsip_libs/, \
 libg7221codec-arm-unknown-linux-androideabi.a \
 libg7221codec-i686-apple-darwin9.a \
 libgsmcodec-arm-unknown-linux-androideabi.a \
 libgsmcodec-i686-apple-darwin9.a \
 libilbccodec-arm-unknown-linux-androideabi.a \
 libmilenage-arm-unknown-linux-androideabi.a \
 libmilenage-i686-apple-darwin9.a \
 libpj-arm-unknown-linux-androideabi.a \
 libpj-i686-apple-darwin9.a \
 libpjlib-util-arm-unknown-linux-androideabi.a \
 libpjlib-util-i686-apple-darwin9.a \
 libpjmedia-audiodev-i686-apple-darwin9.a \
 libpjmedia-codec-i686-apple-darwin9.a \
 libpjmedia-i686-apple-darwin9.a \
 libpjmedia-videodev-i686-apple-darwin9.a \
 libpjnath-arm-unknown-linux-androideabi.a \
 libpjnath-i686-apple-darwin9.a \
 libpjsdp-i686-apple-darwin9.a \
 libpjsip-i686-apple-darwin9.a \
 libpjsip-simple-i686-apple-darwin9.a \
 libpjsip-ua-i686-apple-darwin9.a \
 libpjsua-i686-apple-darwin9.a \
 libportaudio-i686-apple-darwin9.a \
 libresample-arm-unknown-linux-androideabi.a \
 libresample-i686-apple-darwin9.a \
 libspeex-arm-unknown-linux-androideabi.a \
 libsrtp-arm-unknown-linux-androideabi.a \
 libsrtp-i686-apple-darwin9.a )

 LOCAL_STATIC_LIBRARIES := $(PJSIP_LIBS) 
 include $(PREBUILT_STATIC_LIBRARY)

第一步是為Android構建pjsip源代碼(Ubuntu Linux的步驟):

  1. ANDROID_NDK_ROOT環境變量設置為NDK的根文件夾。
  2. 轉到pjlib/include/pj/config_site.h 2.x文件夾並創建pjlib/include/pj/config_site.h config_site_sample.h#include <pj/config_site_sample.h>
  3. 運行./configure-android
  4. 運行make clean && make depend && make

完成這些步驟后,您將在多個文件夾中擁有多個靜態庫。 我建議將它們分組到同一個文件夾中(在項目中更好):

mkdir <your_project_path>/pjsip_libs
find . -name *.a | xargs -I % cp % <your_project_path>/pjsip_libs/

一旦有了所有庫,就需要將這些庫添加到項目的Android.mk文件中,這可以通過在每個庫中包含一個新的模塊部分來完成。 這個模塊部分應該是這樣的:

include $(CLEAR_VARS)
LOCAL_MODULE := pjsua-arm-unknown-linux-androideabi
LOCAL_SRC_FILES := $(MY_PJLIB_PATH)/libpjsua-arm-unknown-linux-androideabi.a
include $(PREBUILT_STATIC_LIBRARY)

並且,在您實際構建JNI項目源代碼的部分中,將所有模塊添加到靜態庫引用中:

 LOCAL_STATIC_LIBRARIES := pjsua-arm-unknown-linux-androideabi ...

這將包括對您的JNI庫的pjsip引用。 現在,您需要配置pjsip UA實例。

你已經一個有關init的解釋,並開始pjsip中的UA(pjsua) pjsip/include/pjsua-lib/pjsua.h但主要步驟如下如下:

  1. 使用pjsua_create創建UA實例
  2. 使用pj_thread_create創建工作線程
  3. 設置UA實例的默認配置:

    pjsua_config cfg; pjsua_logging_config log_cfg; pjsua_media_config media_cfg;

    pj_cli_cfg_default(&app_config.cli_cfg.cfg); pjsua_logging_config_default(&log_cfg); pjsua_media_config_default(&media_cfg);

  4. 使用pjsua_init初始化堆棧

  5. 使用pjsua_start啟動堆棧

從這里,您有很多配置選項(日志,媒體,傳輸等)

你可以在這里找到一個基本的PJSIP教程,在pjsip的源根路徑中,你有一個基本的(但對於基本的SIP使用來說足夠完整): pjsip-apps/src/samples/simple_pjsua.c

編輯:在pjsip-apps中構建android項目時,你可能會面臨一個問題,因為普通版本默認情況下不會生成pjsua-app(更具體地說,pjsua:target不包含在所有:target at pjsip-apps / build / Makefile文件)。 要解決這個問題,只需轉到pjsip-apps / build並運行:

制作pjsua

這將在以下位置創建正確的目標文件:pjsip-apps / build / output / pjsua-arm-unknown-linux-androideabi /(構建android示例時需要)。

一旦你有了所有相應的目標文件,就可以在pjsip-apps / src / pjsua / android上再次運行ndk-build

要將G.729編解碼器集成到您的PJSIP項目中,您只需要從英特爾獲得英特爾IPP編譯器,您就可以輕松地將它們集成到您的項目中。

點擊此鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM