2014-01-31 158 views
3

所有人。如何使用x264和libfdk-aac編譯FFmpeg for Android

請理解我使用錯誤的英文。

我想使用FFmpeg編碼應用程序。

我用FFmpeg成功地構建了NDK。

但是,編碼的H.264視頻編碼失敗(編解碼器未找到..)。

我瞭解到libx264需要編碼H.264,而libfdk-aac需要編碼AAC。

所以我試圖建立libx264和libfdk-aac,但是不容易交叉編譯。

請告訴我我做錯了什麼。

我的開發環境

操作系統:Ubuntu的13.10 64位

NDK:採用Android NDK-R9

FFmpeg的:ffmpeg的-2.0.2

x26 4構建:build_x264_android.sh

NDK=$ANDROID_NDK_HOME 

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64 
PLATFORM=$NDK/platforms/android-9/arch-arm 
CPU=arm 
PREFIX=$NDK/sources/ffmpeg-2.0.2/android/$CPU 

./configure --prefix=$PREFIX \ 
    --enable-shared \ 
    --enable-pic \ 
    --disable-asm \ 
    --disable-cli \ 
    --host=arm-linux \ 
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ 
    --sysroot=$PLATFORM 

make 
make install 
ldconfig 

FDK-AAC構建:build_aac_android.sh

NDK=$ANDROID_NDK_HOME 
CROSS_PREFIX=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi- 
PLATFORM=$NDK/platforms/android-9/arch-arm 
CPU=arm 
PREFIX=$NDK/sources/ffmpeg-2.0.2/android/$CPU 
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a -mthumb -D__thumb__" 

./configure --prefix=$PREFIX \ 
    --with-sysroot=$PLATFORM \ 
    --host=arm-linux \ 
    --enable-shared \ 
    --with-pic=no \ 
    CC="${CROSS_PREFIX}gcc --sysroot=$PLATFORM" \ 
    CXX="${CROSS_PREFIX}g++ --sysroot=$PLATFORM" \ 
    RANLIB="${CROSS_PREFIX}ranlib" \ 
    AR="${CROSS_PREFIX}ar" \ 
    STRIP="${CROSS_PREFIX}strip" \ 
    NM="${CROSS_PREFIX}nm" \ 
    CFLAGS="-O3 $OPTIMIZE_CFLAGS --sysroot=$PLATFORM" \ 
    CXXFLAGS="-O3 $OPTIMIZE_CFLAGS --sysroot=$PLATFORM" 

make 
make install 

當運行 'build_aac_android.sh',示出錯誤。

日誌中的config.log

configure:2907: checking for arm-linux-gcc 
configure:2934: result: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/platforms/android-9/arch-arm 
configure:3203: checking for C compiler version 
configure:3212: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/platforms/android-9/arch-arm --version >&5 
./configure: line 3214: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc: No such file or directory 
configure:3223: $? = 127 
configure:3212: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/platforms/android-9/arch-arm -v >&5 
./configure: line 3214: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc: No such file or directory 
configure:3223: $? = 127 
configure:3212: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/platforms/android-9/arch-arm -V >&5 
./configure: line 3214: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc: No such file or directory 
configure:3223: $? = 127 
configure:3212: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/platforms/android-9/arch-arm -qversion >&5 
./configure: line 3214: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc: No such file or directory 
configure:3223: $? = 127 
configure:3243: checking whether the C compiler works 
configure:3265: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/platforms/android-9/arch-arm -O3 -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a -mthumb -D__thumb__ --sysroot=/platforms/android-9/arch-arm conftest.c >&5 
./configure: line 3267: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc: No such file or directory 

configure:3312: error: in `/home/nel/android-ndk-r9/sources/ffmpeg-2.0.2/libfdk-aac': 
    configure:3314: error: C compiler cannot create executables 
    See `config.log' for more details 

我無法理解的錯誤!我被證實在目錄中找到了arm-linux-androideabi-gcc ..

我想借用你的智慧。請告訴我如何'ffmpeg + x264 + fdk-aac'爲Android構建。

謝謝.. :-)

回答

1

您可以嘗試/ fork /克隆我的庫。它已經編譯了x264和libfdk-aac。你可以使用任何版本的gcc工具鏈(如4.9),並支持最新的android平臺(21)。

您可以從我的倉庫輕鬆構建ffmpeg(2.6或最新版本),運行2-3個腳本。

很難解釋如何編譯兩者,但您可以檢出編譯所有體系結構的x264和libfdk-aac的build_android.sh腳本。

您可以閱讀bash函數build_aacbuild_x264以瞭解它是如何交叉編譯的。

REPOhttps://github.com/matthewn4444/VPlayer_lib

說明https://github.com/matthewn4444/VPlayer_lib/wiki/Compiling-FFmpeg

0

https://github.com/guardianproject/android-ffmpeg

以上項目爲Android包括X264。如果你擅長git子項目,並且如果你擅長交叉工具鏈NDK構建,應該很容易遵循構建。

如果你不是那麼你將需要了解有關在Linux上構建ffmpeg(無android)。然後學習Android上的NDK構建,然後學習git子項目,然後構建它。

+0

我需要包括libfdk-AAC。找不到android的項目包括fdk-aac? – Codeveloper

+0

這個項目在AAC編碼可能嗎? – Codeveloper

+0

Aac可以添加適當的配置設置。 Fdk-aac我不知道。 –

1

我知道這是晚了。我剛剛遇到了這個問題,我發現你的問題。我已經解決了這個問題,如下所示。我希望它可以幫助一些人,當他們通過像我這樣的Google搜索來找到你的問題時。這是如何編譯android的fdk-aac。 NDK版本是9D

變化ANDROID_ROOT和ANDROID_BIN相應

export ANDROID_ROOT=/path/to/android-ndk/platforms/android-9/arch-arm 
export ANDROID_BIN=/path/to/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin 

export CFLAGS="-DANDROID -fPIC -ffunction-sections -funwind-tables -fstack-protector -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit=300" 

export LDFLAGS="-Wl,--fix-cortex-a8" 
export CC="arm-linux-androideabi-gcc --sysroot=$ANDROID_ROOT" 
export CXX="arm-linux-androideabi-g++ --sysroot=$ANDROID_ROOT" 

export PATH=$ANDROID_BIN:$PATH 

./configure --host=arm-linux-androideabi --with-sysroot="$ANDROID_ROOT" --enable-static --prefix="/tmp" 
make -j4 
make install 

那麼庫將被安裝到/ tmp目錄。你可以通過上面的--prefix來改變它。

+0

嗨@faraway,您的代碼可以成功構建,並且可以包含它在我的FFmpeg構建和Android項目中。我已經將libfdk-aac.so文件添加到我的項目中,但是當FFmpeg運行時,我收到一個錯誤,提示找不到「libfdk-aac.so.1」。 FFmpeg顯然與「.so.1」鏈接,其中Android僅使用「.so」。你也遇到過這個問題嗎?任何解決方案 –

+0

嗨@JonG,是的,我遇到過這樣的事情。儘管我沒有真正記得,但我可以推薦您使用enable-static進行構建,或者禁用fdk-aac配置的動態配置。請看看fdk-aac配置的標誌。 – faraway