android - FFMPEG + Android 包装器使用 FFMPEG 的最新版本

标签 android android-ndk ffmpeg

我正在尝试编译 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/

相关文章:

memory-leaks - Libav - 如何使用 av_write_frame 正确释放内存泄漏

java - Android:我想从 google map api 以 json 格式提取地址

android - TextView.setAllCaps() 等同于 14 岁以上的 API?

使用 ffmpeg 进行 Android 视频编辑

php - 如何获取上传视频的时长?

android - 在 Android 中通过 OpenMAX 访问相机

android - Select with union all 语句抛出异常: no such column : borrow

java - Android 中的 HSVToColor 有点奇怪

android-ndk - 使用 Gradle 和 Android Studio 在 Android 库项目中开发 NDK Dev

android - 仅在 NDK 中读取文件时出现问题,写入文件时没有错误