J'essaye de construire la bibliothèque FFMPEG pour mon application androïde utilisant le NDK. J'ai téléchargé le code source de son site web et je pense que je le construis (c'est mon premier essai avec NDK et ffmpeg). J'ai créé un fichier build.sh
que j'utilise pour l'exécuter à partir de la ligne de commande sur Mac OS X. Mais j'ai quelques questions ...Android NDK et FFMPEG build
D'abord c'est comme je sais que j'ai besoin de fichier Android.mk afin que je puisse utiliser la bibliothèque construite dans mon application, mais je ne sais pas comment faire pour des raisons que je vous ai dit ci-dessus. Après avoir exécuté mon build.sh
, j'obtiens le dossier android
avec quelques dossiers et quelques bibliothèques. Donc, ma première question est, comment puis-je construire le fichier Android.mk dont j'ai besoin ... et peut-être si quelqu'un peut m'expliquer pourquoi j'en ai besoin.
Ma deuxième question est que j'ai besoin des bibliothèques de ffmpeg pour pouvoir les utiliser à partir de mon application, mais après la construction je ne peux pas les voir dans mon arbre source. Je sais que je dois les activer dans mon build.sh
et je pense que je l'ai fait, mais je ne peux pas les voir. Donc, tout type d'information sur mon fichier de construction me sera utile pour comprendre comment le configurer. Voici comment il ressemble:
#!/bin/bash
######################################################
# Usage:
# put this script in top of FFmpeg source tree
# ./build_android
# It generates binary for following architectures:
# ARMv6
# ARMv6+VFP
# ARMv7+VFPv3-d16 (Tegra2)
# ARMv7+Neon (Cortex-A8)
# Customizing:
# 1. Feel free to change ./configure parameters for more features
# 2. To adapt other ARM variants
# set $CPU and $OPTIMIZE_CFLAGS
# call build_one
######################################################
NDK=~/Desktop/android-ndk-r5b
PLATFORM=$NDK/platforms/android-8/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86
function build_one
{
./configure \
--target-os=darwin \
--prefix=$PREFIX \
--enable-cross-compile \
--extra-libs="-lgcc" \
--arch=arm \
--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--disable-ffprobe \
--extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \
--enable-zlib \
--enable-version3 \
--enable-nonfree \
--enable-libmp3lame \
--enable-libspeex \
--enable-libtheora \
--enable-libfaac \
--enable-libvorbis \
--enable-libaacplus \
--prefix=$DIST_DIR \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4 install
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
}
#arm v6
#CPU=armv6
#OPTIMIZE_CFLAGS="-marm -march=$CPU"
#PREFIX=./android/$CPU
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
#arm v7vfpv3
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU "
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
build_one
#arm v7vfp
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
#PREFIX=./android/$CPU-vfp
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
#arm v7n
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8"
#PREFIX=./android/$CPU
#ADDITIONAL_CONFIGURE_FLAG=--enable-neon
#build_one
#arm v6+vfp
#CPU=armv6
#OPTIMIZE_CFLAGS="-DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU"
#PREFIX=./android/${CPU}_vfp
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
Merci pour tout type d'informations utiles/suggestions/exemples et etc.
cela fonctionnera même si je compile dans Ubuntu 12.10 machine 64 bits? Et avec le dernier NDK? – agony
Je suis désolé agonie, je n'ai aucune idée, seulement utilisé Mac. Mais je ne vois aucune raison pour laquelle il ne devrait pas fonctionner sur Ubuntu – bogdan
@bogdan comment l'utiliser pour compresser les vidéos https://github.com/havlenapetr/FFMpeg –