我正在尝试编译FFMPEG以使用我的Android应用程序。我看过:https://github.com/halfninja/android-ffmpeg-x264这几乎是我想要的,但我需要更高版本的FFMPEG(所以我正在尝试使用最新版本的2.2)。
我正在使用那里的大多数脚本,但问题是在我运行compile_make_everything.sh之后,我尝试运行ndk-build但是我得到错误(基本上它找不到ffmpeg.c中的main函数) )。
这是我的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
错误:
包含来自的文件 /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: 致命错误:libavcodec / avcodec.h:没有这样的文件或目录 编译终止。
如何在能够调用主函数的同时包含最新的ffmpeg库?
答案 0 :(得分:2)
IMO - 错误的结束是关于没有找到reqd static lib = libavcodec ...
你的“FFMPEG_LIBS”在哪里?你有“libs = ffmpeg”,但根据我的看法,这可能是null / undef ...
很难将ffmpeg升级到./Project/jni中明确标记的提交之外
他说自己在自述文件的底部“更新子模块”...... 。
这个android make设置了由早期版本的ffmpeg构建的JNI构建的本地静态库。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := avffmpeg
FFMPEG_LIBS := $(addprefix ffmpeg/, \
libavfilter/libavfilter.a \
libavcodec/libavcodec.a \
libavformat/libavformat.a \
libswresample/libswresample.a \
libswscale/libswscale.a \
libavutil/libavutil.a \
libpostproc/libpostproc.a )
LOCAL_CFLAGS += -g -Iffmpeg -Ivideokit -Wno-deprecated-declarations
LOCAL_LDLIBS += -fuse-ld=gold -llog -lz -ldl -landroid $(FFMPEG_LIBS) x264/libx264.a
LOCAL_SRC_FILES := videokit/com_b2bpo_media_VideoBrowser.c ffmpeg/ffmpeg.c ffmpeg/cmdutils.c
include $(BUILD_SHARED_LIBRARY)
# Use to safely invoke ffmpeg multiple times from the same Activity
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeginvoke
LOCAL_CFLAGS += -g -Ivideokit -Wno-deprecated-declarations
LOCAL_LDLIBS += -llog -lz -ldl
LOCAL_SRC_FILES := videokit/ffmpeg_invoke.c
include $(BUILD_SHARED_LIBRARY)
我认为其他人已经成功地获得了ffmpeg 2.0左右,你可能能够了解他们如何设法升级git子模块(x264和ffmpeg)。
我一直在Android上使用旧的ffmpeg并且不会回到有关链接升级后的ffmpeg的问题。太费时间......
答案 1 :(得分:2)
添加LOCAL_C_INCLUDES + = $(LOCAL_PATH)/ ffmpeg可能会有所帮助。
但是,你会遇到更多麻烦。基本上videokit目录中的ffmpeg.c是ffmpeg源代码中原始文件的副本,但它已被修改了一点,不能终止并清理重复使用,以及使用android日志记录功能。当你构建videokit库时,不是在ffmpeg / ffmpeg.c中链接,而是链接修改过的videokit / ffmpeg.c。
您遇到的问题是您已更新ffmpeg目录中的所有来源(以及其下的所有libav *库),但您仍然在尝试链接旧的视频/ffmpeg.c来自0.x对新的2.x来源。你可以想象,它发生了一些变化。
我会建议你在ffmpeg / ffmpeg.c中使用diff videokit / ffmpeg.c,同时检查旧的ffmpeg版本,并查看更改内容。然后,您需要将新的ffmpeg.c复制到videokit目录并执行等效更改。日志记录的东西很简单,清理重复使用而不是终止...这将是一个更多的工作。事情已经发生了很大的变化。
哦,您还需要将新源中的cmdutils.c,ffmpeg_opt.c和ffmpeg_filter.c复制到videokit中,并将其包含在makefile中。他们也可能需要改动。