我正在尝试编译 FFMPEG 以与我的 Android 应用程序一起使用。我看过:https://github.com/halfninja/android-ffmpeg-x264这几乎是我想要的,但我需要更高版本的 FFMPEG(所以我正在尝试使用最新的 2.2)。
我正在使用那里的大部分脚本,但问题是在我运行 compile_make_everything.sh 之后,我尝试运行 ndk-build 但出现错误(基本上它无法在 ffmpeg.c 中找到主函数).
这是我的 Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
LOCAL_MODULE := videokit
LOCAL_SRC_FILES := videokit/com_myapp_example_FFMpegService.c
LOCAL_LDLIBS := -llog -ljnigraphics -lz -landroid
LOCAL_STATIC_LIBRARIES :=ffmpeg
include $(BUILD_SHARED_LIBRARY)
$(call import-module,ffmpeg-2.0.1/android/arm)
如果我修改我的 LOCAL_SRC_FILES 以包含 ffmpeg.c,当我试图找到它需要的一些帮助程序库时它会失败: LOCAL_SRC_FILES := videokit/com_myapp_example_FFMpegService.c ffmpeg/ffmpeg.c ffmpeg/cmdutils.c
错误:
In file included from /home/me/ffmpeg/new-android-ffmpeg/Project/jni/ffmpeg/ffmpeg.c:44:0: /home/me/ffmpeg/new-android-ffmpeg/Project/jni/ffmpeg/libavformat/avformat.h:255:32: fatal error: libavcodec/avcodec.h: No such file or directory compilation terminated.
如何在仍然能够调用主函数的同时包含最新的 ffmpeg 库?
最佳答案
添加 LOCAL_C_INCLUDES += $(LOCAL_PATH)/ffmpeg 可能会有所帮助。
但是,你会遇到更多的麻烦。基本上 videokit 目录中的 ffmpeg.c 是 ffmpeg 源中原始文件的副本,但它被修改了一点以不终止和清理重复使用,以及使用 android 日志记录功能。当您构建 videokit 库时,您不是在 ffmpeg/ffmpeg.c 中链接,而是在链接修改后的 videokit/ffmpeg.c。
你面临的问题是你已经更新了 ffmpeg 目录中的所有源代码(以及它下面的所有 libav* 库),但你仍然试图从 0 链接那个旧的 videokit/ffmpeg.c .x 反对那些新的 2.x 来源。可以想象,它发生了一些变化。
我建议您在检查旧的 ffmpeg 版本时将 videokit/ffmpeg.c 与 ffmpeg/ffmpeg.c 进行比较,看看有什么变化。然后您需要将新的 ffmpeg.c 复制到 videokit 目录并执行等效更改。日志记录的东西很简单,清理以重复使用而不是终止……那将是更多的工作。事情发生了一些变化。
哦,您还需要将新源中的 cmdutils.c、ffmpeg_opt.c 和 ffmpeg_filter.c 复制到 videokit 中,并将它们包含在您的 makefile 中。他们可能也需要改变。
关于android - FFMPEG + Android 包装器使用 FFMPEG 的最新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22871297/