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

时间:2014-05-15 16:10:49

标签: android windows android-ndk ffmpeg cygwin

有人成功编译

在使用cygwin和android ndkr9c的Windows上使用ffmpeg-2.2.2?

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

http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/对我不起作用 我得到Makefile:2:config.mak:没有这样的文件...... cygwin admin devel gnome已完全安装并生成-v ok)

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

THX

3 个答案:

答案 0 :(得分:9)

从罗马的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 ,您可以--target-os=android使用./configure,而不是按照第2步中的描述修改./configure文件

在我的机器上,我没有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。

答案 1 :(得分:2)

你可以使用它作为build_android.sh我测试它并且它与我合作

#!/bin/bash
NDK=D:/android/ndk/android-ndk-r10d
SYSROOT=$NDK/platforms/android-8/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows
function build_one
{
./configure \
--prefix=$PREFIX \
--disable-shared \
--enable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one

您还需要运行此命令:

dos2unix build_android.sh
chmod +x build_android.sh
./build_android.sh

使用this Tutorial作为参考

答案 2 :(得分:1)

在Ubuntu(Guest)上构建它并将lib(在/ andoid-ndk / sources / ffmpeg / android)文件夹中的子文件夹复制到Windows(Host)。我试过它用于Window但最终有很多bug,最后安装了Ubuntu (免费)在virtualbox上。你也必须下载Andoid(SDK,Ndk)和JDK。这可能听起来很奇怪,但它对我有用。