android - 如何使用cygwin和android ndk r9c在windows上编译ffmpeg-2.2.2

标签 android windows android-ndk ffmpeg cygwin

有人编译成功吗

ffmpeg-2.2.2 在带有 cygwin 和 android ndkr9c 的 Windows 上?

或者可以指点我最新的教程吗?

( http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/ 对我不起作用 我得到 Makefile:2: config.mak: No such file... cygwin admin devel gnome 已完全安装并 make -v ok )

我需要将视频转换为图像(用于动态壁纸)...你知道更好的方法吗 方法还是 ffmpeg 是最好的?

谢谢

最佳答案

从 Roman 的 tutorial 开始. 以下更改适用于 Windows:您应该使用 NDK make.exe,而不是来自 cygwin 的那个。所以,我只是在我的 build_android.sh 中写了 d:/dev/Android/ndk/prebuilt/windows-x86_64/bin/make.exe。由于某些奇怪的原因,我无法运行 make clean - 但我只是选择暂时忽略这个问题。

按照教程,不要忘记设置

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64

此外,使用混合风格的路径,即 d:/dev/whatever 而不是 cygwin 风格的 /cygdrive/d/dev/whatever。小心不要使用带空格的路径 - 无论是 ndk 安装,还是 ffmpeg git clone。

ffmpeg 2.2 中,您可以为 ./configure 使用 --target-os=android,而不是重整 。/configure 文件,如第 2 步中所述。

在我的机器上,我没有prod 命令。我选择简单地伪造它们,写作

echo 'cat $3' > ./pr
echo 'echo od' > ./od

这些不会破坏构建。

所以,我的构建过程如下:

git clean -d -f -x
./configure --enable-shared --disable-static --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-avdevice --disable-doc --disable-symver --cross-prefix=d:/android-ndk-r9c/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64/bin/arm-linux-androideabi- --target-os=android --arch=arm --enable-cross-compile --sysroot=d:/android-ndk-r9c/platforms/android-9/arch-arm/ --extra-cflags="-Os -fpic"

编译确实会出现一些警告,但是.so文件都生成了。

为了启用 NEON,我使用了

--extra-cflags="-Os -fpic -marm -march=armv7-a -mfloat-abi=softfp -mfpu=neon"
--extra-ldflags="-Wl,--fix-cortex-a8"

现在,无法再构建 libavcodec.so:链接器列表中的文件太多。 因此,在它崩溃后,我手动启动了链接器:

$ d:/Dev/Android/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64//bin/arm-linux-androideabi-gcc  -shared -Wl,-Bsymbolic -Wl,--version-script,libavcodec/libavcodec.ver -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavresample -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -Wl,--fix-cortex-a8  --sysroot=d:/Dev/Android/ndk/platforms/android-9/arch-arm/ -isysroot d:/Dev/Android/ndk/platforms/android-9/arch-arm/ -Wl,--as-needed -Wl,--warn-common -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample @libavcodec/libavcodec.list -lswresample -lavutil -lm -lz -pthread -o libavcodec/libavcodec.so.55

我按如下方式修补 library.mak 文件:对于 $(SUBDIR)$(SLIBNAME_WITH_MAJOR),替换

$$(LD) $(SHFLAGS) $(LDFLAGS) $$(LD_O) $$(filter %.o,$$^) $(FFEXTRALIBS)

$(Q)echo >$(SUBDIR)lib$(NAME).list $(wordlist 1,400,$(filter %.o,$$<))
$(Q)echo >>$(SUBDIR)lib$(NAME).list $(wordlist 401,999,$(filter %.o,$$<))
$$(LD) $(SHFLAGS) $(LDFLAGS) $$(LD_O) @$(SUBDIR)lib$(NAME).list $(FFEXTRALIBS)

.. 从那里开始,make 顺利进行。

PS: 我使用make -n libavcodec/libavcodec.so.55 来准备响应文件 libavcodec/libavcodec.list.

PPS:这是another article这有助于构建和使用适用于 Android 的 ffmpeg。

关于android - 如何使用cygwin和android ndk r9c在windows上编译ffmpeg-2.2.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23683518/

相关文章:

java-native-interface - jni 传递类对象作为参数

android - 在android studio中创建.so文件并在Android中的另一个应用程序中使用它

安卓运行时异常 :requestFeature() must be called before adding content in DialogFragment

android - 以编程方式阻止 View 寻呼机中的页面滑动

java - 如何将对象存储到 Android 中的 SQLite 数据库中?

c# - 从 C# 中的一系列图像生成视频

Android动态地在表格行之间留出空间

java - 无法使用 JNI4NET 工具生成 C# 代理 dll,将批处理文件作为可信程序集运行?

sql-server - Windows 2003 中 JDBC 连接可用的套接字数

android - 将 doNotStrip packagingOptions 设置为特定的 buildType