Android-NDK & FFMPEG bauen
Ich versuche zu bauen FFMPEG-Bibliothek für meine android-Anwendung mit dem NDK. Heruntergeladen habe ich den source code von der website und ich denke, dass ich es bauen (es ist mein Erster Versuch der Arbeit mit NDK und ffmpeg). Habe ich einen build.sh
- Datei, die ich zum ausführen von der Kommandozeile unter Mac OS X. Aber ich habe ein paar Fragen...
Ersten Dinge ist, wie ich weiß, ich muss Android.mk-Datei, so kann ich mit dem erbauten Bibliothek in meiner Anwendung,aber ich weiß nicht, wie zu tun, dass aus Gründen, die ich Ihnen gesagt oben. Nachdem ich meine build.sh
bekomme ich android
Ordner mit ein paar Ordnern und einige Bibliotheken. Also meine erste Frage ist, wie kann ich die Android.mk-Datei, die ich brauche...und vielleicht, wenn jemand kann mir erklären warum ich es brauche.
Meine zweite Frage ist, brauche ich einige libraries von ffmpeg verwenden zu können, Sie von meiner app, aber nach dem build kann ich nicht sehen, wie Sie in meiner Quelle-Baum. Ich weiß, dass ich habe, um Ihnen zu ermöglichen in meinem build.sh
und ich denke, ich Tat,aber ich kann Sie nicht sehen. Also jede Art von Informationen über meine build-Datei wird hilfreich sein für Sie mir zu verstehen, wie es zu konfigurieren.
Hier ist, wie es aussieht :
#!/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
Vielen Dank für jede Art von nützlichen Informationen/Vorschläge/Beispiele und etc.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machte ich ein tutorial auf, wie zu bauen
ffmpeg
undx264
fürandroid
:Reißverschluss mit build von ffmpeg mit x264
Können Sie auch laden Sie die zip-Datei enthält die Dateien, die Sie benötigen, um eine Anwendung auf
android
.Wenn Sie möchten detailliertere Anweisung, wie man ffmpeg und wie Sie es zum bauen von Android-apps, entnehmen Sie bitte dem Buch Android-NDK-Kochbuch: http://www.packtpub.com/android-native-development-kit-cookbook/book
Das Bonus-Kapitel 1 widmet multimedia-app-Entwicklung mit Android NDK und ffmpeg, und es ist kostenlos erhältlich im http://www.packtpub.com/sites/default/files/downloads/Developing_Multimedia_Applications_with_NDK.pdf
Erste von allen, sollten Sie die Dokumentation Lesen, die für Android-NDK und schauen Sie sich einige Beispiel-apps. Sie finden diese Angaben in android_NDK_home/docs und android_NDK_home/samples (wo android_NDK_home ist der name des Ordners für Ihr android-NDK).
Überprüfen Sie auch, ob dieser link auf stackoverflow:
Mit FFmpeg mit Android-NDK
Für eine stept by step tutorial, das ist eine ziemlich gute:
http://www.roman10.net/how-to-build-ffmpeg-for-android/
Auch, Sie haben zu installieren/konfigurieren, einige Elemente auf Ihrem Eclipse zum aktivieren der Unterstützung für die Entwicklung von Anwendungen, die mit dem NDK:
http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/
http://wiki.eclipse.org/Sequoyah/ndk_checklist
Und ein ziemlich gutes Projekt, verwendet die ffmpeg-Bibliothek:
https://github.com/havlenapetr/FFMpeg
(' _build_librtmp.sh: line 29:
cp ${prefix}/lib/lib*-+([0-9]).also ${dist_ffmpeg verwendet autoconf wie seine build-system. Als der Zeitpunkt des Schreibens dieses Artikels, hat niemand noch zusammen eine Gradle build-Paket für ffmpeg auf Android. Soweit ich das beurteilen kann, Gradle noch nicht unterstützt, autoconf, das macht es ziemlich schwierig zu tun, so
Sagte, nach dem Versuch, einige der tutorials, die dort waren, sowie einige von den pre-built-Pakete, beschlossen wir Rollen unsere eigene Android-build-Skript-wrapper für ffmpeg enthält Unterstützung für OpenSSL und librtmp.
Finden Sie es hier: https://github.com/cine-io/android-ffmpeg-with-rtmp
Voraussetzung: Die Android NDK muss installiert sein
Anweisungen:
Wenn das Skript abgeschlossen ist, werden die benötigten shared libraries und
ffmpeg
ausführbare Datei wird in diebuild/dist
- Verzeichnis. Sie können Sie in Ihrem Projekt wie jede andere native binary.Bauen ffmpeg ausführbare Datei, verwende ich die folgenden Android.mk: