我被困在这个我根本不舒服的领域工作。
这是我到目前为止所做的:
- 制作了一台 Ubuntu VirtualBox 机器
- 下载最新的 ffmpeg 版本,即 2.3.3
- 编译 ffmpeg 以与 armv7-a 兼容,所以最后我得到两个文件夹:include 和 lib。在包含我的头文件和库中 *.so 文件(就像在http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/中一样)
我创建了一个新的 android 项目并创建了一个 jni 文件夹,这就是我走了多远......即使如此,所有的斗争都是 linux 的新手和编译,我花了将近一周的时间才达到。
在 ffmpeg 中添加水印我相信它是在 libavfilter 上完成的?我必须深入研究这个问题,但是我需要翻译成我的项目的原始 ffmpeg 是:
ffmpeg -i input.avi -i logo.png -filter_complex 'overlay=10:main_h-overlay_h-10' output.avi
就我现在正在学习而言,我需要在 jni 内部做:
- 创建一个 add_watermark.c 文件,我需要在其中以某种方式调用执行过滤器覆盖调用的函数
创建 Android.mk 来加载它和 ffmpeg 所需的库
LOCAL_PATH := $(调用我的目录)
包括 $(CLEAR_VARS)
LOCAL_MODULE := 添加水印
LOCAL_SRC_FILES := 添加水印.c
LOCAL_LDLIBS := -llog -ljnigraphics -lz
LOCAL_SHARED_LIBRARIES := libavformat libavcodec libswscale libavutil
包括 $(BUILD_SHARED_LIBRARY)
$(调用导入模块,ffmpeg-2.3.3/android/armv7-a)
创建应用程序.mk
APP_ABI := armeabi-v7a
APP_PLATFORM := android-8
运行 ndk-build 并在我的 android 项目中使用生成的库。
我真的需要帮助才能继续,所以每一个答案都得到了极大的关注和乐趣。
稍后编辑:是否有可能以某种方式将 ffmpeg.exe 构建为库并使用与原始 exe 完全相同的参数调用其 main ?我不想将 ffmpeg 作为独立的可执行文件运行,而是将其集成到项目中。像http://www.roman10.net/how-to-port-ffmpeg-the-program-to-androidideas-and-thoughts/这种方法有什么缺点?
稍后编辑 2:如果可以通过使用 MediaMuxer 或 android 4.3 中添加的其他 API 来实现,我愿意为您提供示例代码。我确实查看了 MediaCodec 和 MediaMuxer 示例以及 Grafik,但没有找到合适的方法来做我想做的事。如果可行,我更喜欢 ffmpeg 方法