Sto provando a creare la libreria FFMPEG per la mia applicazione Android utilizzando NDK. Ho scaricato il codice sorgente dal suo sito web e penso di averlo creato (è il mio primo tentativo di lavorare con NDK e ffmpeg). Ho creato un file build.sh
che sto usando per eseguirlo dalla riga di comando su Mac OS X. Ma ho qualche domanda ...Android NDK e FFMPEG build
Le prime cose sono che so che ho bisogno del file di Android.mk così posso utilizzare la libreria creata nella mia applicazione, ma non so come farlo per ragioni che ho detto sopra. Dopo aver eseguito il mio build.sh
ottengo la cartella android
con alcune cartelle e alcune librerie. Quindi la mia prima domanda è, come posso creare il file Android.mk di cui ho bisogno ... e forse se qualcuno può spiegarmi perché ne ho bisogno.
mia seconda domanda è ho bisogno di alcune librerie di ffmpeg per essere in grado di usarli dalla mia app, ma dopo che la build non riesco a vederli nel mio albero dei sorgenti. So che devo abilitarli nel mio build.sh
e penso di averlo fatto, ma non riesco a vederli. Quindi qualsiasi tipo di informazione sul mio file di build sarà utile per capire come configurarlo. Ecco come sembra:
#!/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
Grazie per qualsiasi tipo di informazione utile/suggerimenti/esempi e ecc
sarà presente anche funzionare se compilo in Ubuntu 12.10 macchina a 64-bit? E con l'ultimo NDK? – agony
Mi dispiace agonia, non ne ho idea, ho usato solo il Mac. Ma non vedo alcun motivo per cui non dovrebbe funzionare su Ubuntu – bogdan
@bogdan come usare questo per comprimere i video https://github.com/havlenapetr/FFMpeg –