did someone successfully compile
ffmpeg-2.2.2 on windows with cygwin and android ndkr9c ?
Or can point me to an up to date tutorial ?
(http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/ isn't working for me
i get Makefile:2: config.mak: No such file...
cygwin admin devel gnome is completely installed and make -v ok )
I need to convert a video to images(for live-wallpaper)... do you know a better
method or is ffmpeg the best ?
thx
Start with Roman's tutorial.
Following changes apply to Windows: you should use the NDK make.exe
, not the one from cygwin. So, I simply wrote d:/dev/Android/ndk/prebuilt/windows-x86_64/bin/make.exe
in my build_android.sh. For some weird reason, I could not run make clean
- but I simply chose to ignore this problem for now.
Following the tutorial, don't forget to set
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64
Also, use mixed-style paths, i.e. d:/dev/whatever
and not cygwin style /cygdrive/d/dev/whatever
. Be careful not to use paths with spaces - neither for ndk installation, nor for ffmpeg
git clone.
With ffmpeg 2.2, you can use --target-os=android
for ./configure
, instead of mangling ./configure
file as described in step 2.
On my machine, I did not have pr
and od
commands. I chose simply to fake them, writing
echo 'cat $3' > ./pr
echo 'echo od' > ./od
These do not spoil the build.
So, my build process is as follows:
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"
Compilation does display some warnings, but the .so files are all produced.
To enable NEON, I used
--extra-cflags="-Os -fpic -marm -march=armv7-a -mfloat-abi=softfp -mfpu=neon"
--extra-ldflags="-Wl,--fix-cortex-a8"
Now, libavcodec.so
could not be built anymore: too many files on the linker list. So, after it crashed, I launched the linker manually:
$ 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
I patch the library.mak
file as follows: for $(SUBDIR)$(SLIBNAME_WITH_MAJOR)
, replace
$$(LD) $(SHFLAGS) $(LDFLAGS) $$(LD_O) $$(filter %.o,$$^) $(FFEXTRALIBS)
with
$(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)
.. and from there, make
proceeded smoothly.
PS: I used make -n libavcodec/libavcodec.so.55
to prepare the response file libavcodec/libavcodec.list
.
PPS: Here is another article that helps to build and use ffmpeg for Android.
You can use this as build_android.sh i tested it and it worked with me
#!/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
you need also to run this commands :
dos2unix build_android.sh
chmod +x build_android.sh
./build_android.sh
Use this Tutorial as reference
Build it on Ubuntu(Guest) and copy lib's(sub folder in /andoid-ndk/sources/ffmpeg/android) folder to Windows(Host).I tried it for Window but ended with lot of bugs, finally installed Ubuntu (Free) on virtualbox. also you willl have to download Andoid (SDK, Ndk) and JDK. This may sound weird but it worked for me.