[英]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的步驟):
ANDROID_NDK_ROOT
環境變量設置為NDK的根文件夾。 pjlib/include/pj/config_site.h
2.x文件夾並創建pjlib/include/pj/config_site.h
config_site_sample.h
( #include <pj/config_site_sample.h>
) ./configure-android
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
但主要步驟如下如下:
pjsua_create
創建UA實例 pj_thread_create
創建工作線程 設置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);
使用pjsua_init
初始化堆棧
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.