如何在安卓设备上使用pjsip以实现G.729编解码器功能。

3
我想在我的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.mk文件放在这里吗,这样我们就可以参考一下。 - Rohit
2个回答

6

首先,需要为Android构建pjsip源代码(Ubuntu Linux的步骤):

  1. ANDROID_NDK_ROOT环境变量设置为您的NDK根文件夹。
  2. 进入pjsip 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实例。
您可以在pjsip/include/pjsua-lib/pjsua.h中找到有关初始化和启动pjsip UA(pjsua)的说明,但是要遵循的主要步骤是:
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应用程序中的android项目时,您可能会面临问题,因为默认情况下不生成pjsua-app(更具体地说,在pjsip-apps/build/Makefile的all: target中未包含pjsua:目标)。要解决此问题,只需转到pjsip-apps/build并运行:
make pjsua
这将在pjsip-apps/build/output/pjsua-arm-unknown-linux-androideabi/中创建正确的对象文件(构建android示例时需要)。
一旦您拥有所有对应的对象文件,您就可以再次运行pjsip-apps/src/pjsua/android中的ndk-build。

1
这些步骤在 Mac 机器上是否保持不变? - uniruddh
1
在第四步得到了这个:编译终止。 make[2]: *** [output/pjmedia-audiodev-arm-unknown-linux-androideabi/errno.o] 错误 1 make[1]: *** [libpjmedia-audiodev-arm-unknown-linux-androideabi.a] 错误 2 make: *** [全部] 错误 1 - uniruddh
我已经成功完成了 LOCAL_STATIC_LIBRARIES 步骤。之后,我不清楚接下来该做什么,以及如何在我的应用程序中使用 pjsip。你能提供任何教程或示例吗? - uniruddh
1
@jcm 我正在使用Windows XP操作系统。无法运行./configure-android命令。命令提示符显示没有这样的命令。我该如何在Windows平台上构建它? - Fer
1
@jcm 你曾经在Android Studio中使用Gradle构建pjsip吗? - Erdinc Ay
显示剩余14条评论

3

要将G.729编解码器集成到您的PJSIP项目中,您只需要获取来自英特尔的Intel IPP编译器,并将其轻松集成到您的项目中。

请按照此链接操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接