【问题标题】:How to use G729 of CSipSimple in android如何在android中使用CSipSimple的G729
【发布时间】:2013-11-22 11:31:19
【问题描述】:

我从 here 获得了一些G729CSipSimple 的来源

现在我想将它添加到我的 android 应用程序中,以添加对 G729 音频编解码器的支持。

我怎样才能做到这一点?

【问题讨论】:

  • 你在和pjsip一起工作吗?

标签: android sip rtp codec


【解决方案1】:

如果您不打算使用 pjsip,那么您需要生成一个可以在您自己的项目中使用的共享库。为此,我建议您创建一个jni 文件夹并添加一个类似于以下内容的Android.mk 文件:

LOCAL_PATH := $(call my-dir)

### Glue for pjsip codec ###
include $(CLEAR_VARS)
LOCAL_MODULE := g729_codec

G729_PATH := $(LOCAL_PATH)/../sources

# g729
LOCAL_C_INCLUDES += $(G729_PATH)/include
G729_FILES := $(wildcard $(G729_PATH)/src/*.c)
LOCAL_SRC_FILES += $(G729_FILES:$(LOCAL_PATH)/%=%) 

LOCAL_ALLOW_UNDEFIND_SYMBOLS    := false
LOCAL_CFLAGS := -frtti -fexceptions

include $(BUILD_SHARED_LIBRARY)

这只是对android_toolchain/Android.mk 的修改。 您将在文件 sources/include/g729a.h 中找到正确管理此 g729 实现所需的所有功能,并在文件 pj_sources/pj_g729.c 中找到有关如何使用它们的一个很好的示例

另一方面,如果您打算使用 pjsip,您唯一应该做的就是将 CSipSimple 的实现注册为外部编解码器(Regis 已经完成了几乎所有工作),即在您的项目:

status = pjmedia_codec_g729_init(pjsua_var.med_endpt);
if (status != PJ_SUCCESS)
{   
    PJ_LOG(1,(THIS_FILE, "Error: Failed to init G729 codec"));
}

并使用android_toolchain/Android.mk 构建一个可以与您的解决方案链接的库。

【讨论】:

  • 感谢这么好的回答,唯一的问题是我的项目在 jni 文件夹中已经有 Android.mk。所以添加新的 onr 或编辑现有的可能会停止当前的功能。而且我对这一切都很陌生,以至于我无法通过“如果您打算使用 pjsip,您唯一应该做的就是将 CSipSimple 的实现注册为外部编解码器”来弄清楚我必须做什么?如果是的话,我是否只需要使用这些代码行?以及哪些文件要包含在我的文件夹中?抱歉问了太多问题,但我真的不知道。
  • @I-droid 从您之前的评论中,我了解到您在当前项目中根本不使用pjsip,我的建议只有在您已经配置并运行@987654331 后才有效@ UA(这将是一个需要新的完整部分/请求,甚至更多的主题)。那么,我了解您正在使用不同的 SIP 堆栈并且只想集成 G729,我错了吗?
  • 你能告诉我更多细节我应该怎么做吗?如果我说我只想使用 PJSIP,那么我要遵循的完整步骤是什么??
  • @I-droid 哇,这真是一个巨大的主题。也许你可以打开一个新请求,我可以在那里回答你(以避免在这个请求中搞砸)
  • 正如你所说,这里是链接:stackoverflow.com/questions/20193956/…。用完整的细节帮我解决这个问题。
【解决方案2】:

下载 CSipSimpleCodecG729 来自 svn checkout http://csipsimple.googlecode.com/svn/trunk/ CSipSimple-trunk 并将其构建为库,然后将此库插入到 sipHome 项目中

您还必须在 Manifest 文件中编写此代码

<!--G729 codec -->
		<receiver
            android:name="com.csipsimple.plugins.codecs.ReceiverG729"
            android:exported="false" >
            <meta-data
                android:name="lib_name"
                android:value="libpj_g729_codec.so" />
            <meta-data
                android:name="init_factory"
                android:value="pjmedia_codec_g729_init" />

            <intent-filter>
                <action android:name="com.csipsimple.codecs.action.REGISTER_CODEC" />
            </intent-filter>
        </receiver>

【讨论】:

  • 您将.jar 文件作为库?
  • 我从您的链接下载编解码器并制作了.jar 文件,将它们添加为库,更新了清单文件,但没有任何改变。如何在应用程序中添加/使用编解码器?
  • 请进入媒体设置和编解码器列表,您可以找到 G729 编解码器。检查编解码器并设置优先级.....希望它能正常工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多