記錄FFmpeg Android版本編譯

記錄一下Linux FFmpeg Android版本的編譯過程,以免日後再次編譯遺忘。

系統ubuntu18.04、FFmpeg4.2.2、ndk r21。

首先我要編譯的是Android版本的庫,故需要對configure腳本進行修改.
修改前:

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'


修改後:

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

然後創建編譯腳本build_android.sh

#!/bin/bash

#自己的ndk路徑,採用的是clang++所有ndk最好用r17以上
NDK=/home/hjt/ndk/android-ndk-r21
TOOLCHAIN=$NDK/toolchainsvm/prebuiltnux-x86_64/

#目標api建議最好設小一點,本人遇到過此處api設置爲29結果編譯出來的庫在低版本手機上運行時出現找不到庫的情況
API=21

function build_android
{
echo "Compiling FFmpeg for $CPU"

#FFmpeg編譯選項 enable爲打開,disable爲關閉
./configure \
    --prefix=$PREFIX \
    --enable-neon \
    --enable-hwaccels \
    --enable-gpl \

#開啓輸出so庫
    --enable-shared \

#以下4行是Android硬編解碼的選項,但是在手機上跑還是未能成功開啓硬解碼器,暫時未查明原因。
    --enable-jni \
    --enable-mediacodec \
    --enable-decoder=h264_mediacodec \
    --enable-hwaccel=h264_mediacodec\

#後期處理的庫可以選擇要或者不要
    --disable-postproc \

#關閉輸出靜態庫
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$CROSS_PREFIX \
    --target-os=android \
    --arch=$ARCH \
    --cpu=$CPU \
    --cc=$CC
    --cxx=$CXX
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
make clean

#可以選擇 make -j4或者更多以加快編譯速度
make
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}

#armv8-a
ARCH=arm64
CPU=armv8-a
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
SYSROOT=$NDK/toolchainsvm/prebuiltnux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"
build_android

#armv7-a
ARCH=arm
CPU=armv7-a
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
SYSROOT=$NDK/toolchainsvm/prebuiltnux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
build_android

腳本創建完成後執行 chmod +x build_android.sh

然後執行腳本 ./build_android.sh

最後輸出的庫在Android文件夾內。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章