【问题标题】:How to use pjsip on android device in order to have G.729 codec functionality如何在 android 设备上使用 pjsip 以获得 G.729 编解码器功能
【发布时间】:2013-11-25 13:10:20
【问题描述】:

我想在我的 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文件放在这里,以便我们参考

标签: android sip voip codec pjsip


【解决方案1】:

第一步是为 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 ...

这会将pjsip 引用包含到您的JNI 库中。现在,您需要配置一个pjsip UA 实例。

你有一个关于 init 的解释,并在 pjsip/include/pjsua-lib/pjsua.h 中启动 pjsip 的 UA (pjsua),但要遵循的主要步骤是:

  1. pjsua_create创建一个UA实例
  2. 使用pj_thread_create 创建工作线程
  3. 为 UA 实例设置默认配置:

    pjsua_config 配置文件; 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 开始堆栈

从这里开始,您有很多配置选项(日志、媒体、传输等)

您可以在here 找到基本的 PJSIP 教程,并且在 pjsip 的源根路径中,您有一个基本的(但对于基本的 SIP 使用来说足够完整):pjsip-apps/src/samples/simple_pjsua.c

编辑: 在 pjsip-apps 中构建 android 项目时,您可能会遇到问题,因为在一般构建中默认不生成 pjsua-app(更具体地说,pjsua:target 不包含在全部:目标在 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

【讨论】:

  • 这些步骤在mac机器上会保持不变吗?
  • 我已经从pjsip的“svn.pjsip.org/repos/pjproject/trunk”下载了源码。但 configure-android 文件没有 BUILD_MACHINE 属性。
  • 在第四步得到这个:编译终止。 make[2]: *** [output/pjmedia-audiodev-arm-unknown-linux-androideabi/errno.o] 错误 1 ​​make[1]: *** [libpjmedia-audiodev-arm-unknown-linux-androideabi. a] 错误 2 make: *** [all] 错误 1
  • @jcm 我使用的是 Windows XP。 ./configure-android 命令无法运行。命令提示符说没有这样的命令。如何在 Windows 平台上构建它?
  • @jcm 你曾经用 Gradle 在 Android Studio 上构建过 pjsip 吗?
【解决方案2】:

要将 G.729 编解码器集成到您的 PJSIP 项目中,您只需从英特尔获取 Intel IPP 编译器,您可以轻松地将它们集成到您的项目中。

关注this link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 2011-07-12
    • 2016-10-10
    相关资源
    最近更新 更多