- 论坛徽章:
- 0
|
需要在项目中使用一种适合视频会议和voip的音频编解码器。网上搜索发现,满足这种使用环境的音频编解码器,主要是ITU g7xx。其中 g723.1 编码之后生成的码流占用带宽是最小的,然而基本只适合语音环境,音质较差。而 g729 则比较适中,生成的码流占带宽比较低,音质也不错,是目前网络流媒体中比较合适的音频编码方式。 在网上找了一下,发现了一个可以在 android ndk 环境中编译使用的g722编码器。该编解码器是 android 中的一个应用 sipdroid 中使用的。也是在android ndk 环境中,通过 jni向上层提供接口。现在就是要尝试着将该模块集成进我们的 native 环境中。具体步骤如下: 1、将sipdroid/jni 目录中的 g722_jni.cpp 文件和 spandsp 子目录复制到我们自己项目的jni目录中。 2、修改我们自己项目jni目录中的 android.mk 文件,增加如下内容: LOCAL_C_INCLUDES += $(LOCAL_PATH)/spandsp/
LOCAL_SRC_FILES += g722_jni.cpp \ spandsp/g722.c \ spandsp/vector_int.c
3、尝试编译 1)、 root@vmuser:/opt/ndk-r4/apps/jtmedia/project/jni# ../../../../ndk-build
结果出错,有n多行出错提示,很多符号找不到。分析这些出错信息,发现其中有如下一条:
Compile++ thumb: jtmedia <= /opt/ndk-r4/apps/jtmedia/project/jni/g722_jni.cpp In file included from /opt/ndk-r4/apps/jtmedia/project/jni/g722_jni.cpp:30: /opt/ndk-r4/apps/jtmedia/project/jni/spandsp/spandsp.h:39:24: error: myinttypes.h: No such file or directory
打开 jni/spandsp/spandsp.h 文件,看了一下,第39行的是:
#include "myinttypes.h"
实际搜索了一下,myinttypes.h 文件是在 jni/spandsp/spandsp 目录中,而该目录并没有在头文件搜索路径中,所以才会出现该文件找不到的编译错误。 2)、 采用的方法,将上面的第39行修改为:
#include "spandsp/myinttypes.h"
另外,可以尝试修改android.mk 文件,再增加如下内容: LOCAL_C_INCLUDES += $(LOCAL_PATH)/spandsp/spandsp/ 应该也能解决问题(这样,就不必对源码做修改了)。
继续编译,上面 找不到头文件和一些标识符的编译错误已经没有了。但是提示:
make: *** 没有规则可以创建“/opt/ndk-r4/apps/jtmedia/project/bin/ndk/local/armeabi/libjtmedia.so”需要的目标“/opt/ndk-r4/apps/jtmedia/project/bin/ndk/local/armeabi/libavcodec.a”。 停止。
发现,是因为找不到连接时所需要用到的静态库。采用 make app = xxxx 的方式编译,和采用 ndk-build 的方式编译,需要的中间文件所在的位置是不一样的。将我们编译所需的库复制到上面出错提示中给出的目录中。 再次编译,通过。
|
|