2012-09-30 17 views
12

sto cercando di compilare ffmpeg per i dispositivi Android armeabi.
Sto seguendo il tutorial di roman10.net
Il suo script di build dato crea ffmpeg per armv7-a dispositivi. Voglio costruirlo per armeabi.
arm-linux-androideabi-gcc è in grado di creare un file eseguibile - compilare ffmpeg per i dispositivi Android armeabi

Il mio obiettivo finale è eseguire comandi ffmpeg su dispositivi Android armeabi e armv7-a.

Così posso cambiare parte della CPU dello script da

#arm v7vfpv3 
CPU=armv7-a 
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU " 
PREFIX=./android/$CPU 
ADDITIONAL_CONFIGURE_FLAG= 
build_one 

a

#arm v6 
CPU=armv6 
OPTIMIZE_CFLAGS="-marm -march=$CPU" 
PREFIX=./android/$CPU 
ADDITIONAL_CONFIGURE_FLAG= 
build_one 

(ho pensato a cambiarlo con ARMv6 avrebbe costruito ffmpeg compatibile con i dispositivi armeabi. M mi sbaglio?)

Dubbio 1:
Devo anche cambiare strumento ain?
i.e da arm-linux-androideabi-4.4.3 a arm-eabi-4.4.0 ?????

Dubbio 2:

Quando provo esecuzione ./build.sh (senza cambiare toolchain) mi dà errore seguente:

/home/chaitanya/android/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc is unable to create an executable file. 
C compiler test failed. 

If you think configure made a mistake,.. blaah blahh blaah 

dopo che ho ottenuto molti avvertimenti dicendo:
'sub_id' è deprecato e molti altri avvisi di funzione deprecato.

piattaforma: ubuntu 11.10
ffmpeg versione: 0.11.2
NDK: Android-NDK-R5B

Ecco il mio script di build:

#!/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=~/android/android-ndk-r5b 
PLATFORM=$NDK/platforms/android-8/arch-arm/ 
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 
function build_one 
{ 
./configure --target-os=linux \ 
    --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-shared \ 
    --enable-static \ 
    --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \ 
    --disable-everything \ 
    --enable-demuxer=mov \ 
    --enable-demuxer=h264 \ 
    --disable-ffplay \ 
    --enable-protocol=file \ 
    --enable-avformat \ 
    --enable-avcodec \ 
    --enable-decoder=rawvideo \ 
    --enable-decoder=mjpeg \ 
    --enable-decoder=h263 \ 
    --enable-decoder=mpeg4 \ 
    --enable-decoder=h264 \ 
    --enable-parser=h264 \ 
    --disable-network \ 
    --enable-zlib \ 
    --disable-avfilter \ 
    --disable-avdevice \ 
    $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 

come si fa Affronto questo problema? cosa sta andando male?

risposta

10

io non sono sicuro se questo è quello che stai cercando, ma ho creato uno script per costruire FFmpeg 0.11.1 per Android. Ho modificato gli script forniti con più anziano Bambuser FFmpeg costruisce, al fine di farli lavorare con 0.11.1. Attualmente sto usando questo script per creare FFmpeg nella mia applicazione, quindi so che la build funziona. Lo script si trova in http://servestream.sourceforge.net/build-ffmpeg.sh. Sto utilizzando Android-NDK-r8b e Ubuntu 12.04 (x64) per fare l'edificio. Per poter utilizzare lo script effettuare le seguenti operazioni:

1.) Scaricare lo script
2.) Aprire lo script e modificare la variabile del pacchetto per abbinare il pacchetto dell'applicazione
3.) Rendere eseguibile: chmod + x accumulo -ffmpeg.sh
4.) Impostare la variabile NDK utilizzata dallo script, ad esempio: esportazione NDK =/home/utente/android-ndk-r8b
5.) Eseguire lo script:./build-ffmpeg.sh

I file binari compilati si troveranno nella cartella "final-builds" appena creata nella directory di lavoro corrente. (Nota: lo script crea binari per architetture armeabi, armeabi-v7a e x86)

Spero che questo risponda alla tua domanda.

UPDATE:

Se script non viene trovato, http://sourceforge.net/p/servestream/code/HEAD/tree/ffmpeg/scripts/arm-build.sh

+0

Ho provato questo e ancora ottenere "arm-linux-gcc-androideabi in grado di creare un file eseguibile" Sono in esecuzione Ubuntu 12.10 a 64 bit, ffmpeg-1.0 e utilizzando lo script di cui sopra. Si prega di aiutare – JeffG

+0

Sto usando 12.04 (64 bit) e versione NDK r8b. Questo errore si verifica in genere quando si utilizza una versione NDK diversa. In caso contrario, rispondi e cercherò di aiutarti a risolvere il problema. –

+0

Ehi, puoi dirmi come eseguirlo in ambiente Windows .. –

0

ho ottenuto un errore simile (test compilatore C non) durante il tentativo di costruire ffmpeg utilizzando la versione r8d NDK e anche r8b.

Il problema che ho scoperto in seguito è che l'opzione "Estrai qui" sull'ultimo ubuntu sembra avere qualche bug. Non estrae tutto. Quindi, usando 'tar -jxf' estrai correttamente e vedrai più eseguibili nella cartella bin.

È possibile verificarlo come riferimento. http://code.google.com/p/android/issues/detail?id=41187

20

ho finalmente trovato il problema con la mia messa a punto quando di fronte a questo stesso problema ... Guardando la sceneggiatura arm-build.sh, ho iniziato a seguire il copione. Nota il percorso "TOOLCHAIN ​​= ...".

Originariamente il percorso era: toolchain = echo $NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/*-x86

Quando sono andato a verificare esiste questa strada, ho notato che non ha fatto. Penso che il motivo è che ho una build 64-bit.

Il mio percorso è in realtà: .../toolchain/arm-linux-androideabi-4.6/precompilati/linux-x86_64

Quello che ho finito per fare stava copiando la cartella e rinominarlo in "linux- x86 "e ora tutto è in fase di compilazione.

Spero che questo aiuti qualcuno!

+8

Il mio era/darwin-x86_64 su Mac OS X – user1132959

Problemi correlati