android全平台编译ffmpeg以及x264实战

1.编译环境
操作系统:ubuntu 16.05
android-ndk-r14b
注意 这里如果使用高版本比如android-ndk-r16b 编译会报错
ffmpeg-3.3.9版本
2.编辑ffmpeg-3.3.9的configure文件
SLIBNAME_WITH_MAJOR=’ ( S L I B N A M E ) . (SLIBNAME). (SLIBNAME).(LIBMAJOR)’
LIB_INSTALL_EXTRA_CMD=’KaTeX parse error: Can't use function '$' in math mode at position 10: (RANLIB)"$̲(LIBDIR)/$(LIBN…(RANLIB)" ( L I B D I R ) / (LIBDIR)/ (LIBDIR)/(LIBNAME)"’
SLIB_INSTALL_NAME=’ ( S L I B N A M E W I T H M A J O R ) ′ S L I B I N S T A L L L I N K S = ′ (SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_LINKS=' (SLIBNAMEWITHMAJOR)SLIBINSTALLLINKS=(SLIBNAME)’
3.编写config.sh环境配置文件

#NDK路径
export ANDROID_NDK_ROOT=/home/android/android-ndk-r14b

export AOSP_TOOLCHAIN_SUFFIX=4.9

export AOSP_API=“android-14”

#架构
if [ "KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲" -lt 1 ]; then…(tr [A-Z] [a-z] <<< “$1”)
fi

#根据不同架构配置环境变量
case “$THE_ARCH” in
arm|armv5|armv6|armv7|armeabi)
TOOLCHAIN_BASE=“arm-linux-androideabi”
TOOLNAME_BASE=“arm-linux-androideabi”
AOSP_ABI=“armeabi”
AOSP_ARCH=“arch-arm”
HOST=“arm-linux-androideabi”
AOSP_FLAGS="-march=armv5te -mtune=xscale -mthumb -msoft-float -funwind-tables -fexceptions -frtti"
FF_EXTRA_CFLAGS="-O3 -fpic -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 -mfloat-abi=softfp -mfpu=vfp -marm -march=armv6 "
FF_CFLAGS="-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,–noexecstack -DANDROID "
;;
armv7a|armeabi-v7a)
TOOLCHAIN_BASE=“arm-linux-androideabi”
TOOLNAME_BASE=“arm-linux-androideabi”
AOSP_ABI=“armeabi-v7a”
AOSP_ARCH=“arch-arm”
HOST=“arm-linux-androideabi”
AOSP_FLAGS="-march=armv7-a -mthumb -mfpu=vfpv3-d16 -mfloat-abi=softfp -Wl,–fix-cortex-a8 -funwind-tables -fexceptions -frtti"
FF_EXTRA_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 "
FF_CFLAGS="-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,–noexecstack -DANDROID "
;;
hard|armv7a-hard|armeabi-v7a-hard)
TOOLCHAIN_BASE=“arm-linux-androideabi”
TOOLNAME_BASE=“arm-linux-androideabi”
AOSP_ABI=“armeabi-v7a”
AOSP_ARCH=“arch-arm”
HOST=“arm-linux-androideabi”
AOSP_FLAGS="-mhard-float -D_NDK_MATH_NO_SOFTFP=1 -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -Wl,–fix-cortex-a8 -funwind-tables -fexceptions -frtti -Wl,–no-warn-mismatch -Wl,-lm_hard"
FF_EXTRA_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 "
FF_CFLAGS="-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,–noexecstack -DANDROID "
;;
neon|armv7a-neon)
TOOLCHAIN_BASE=“arm-linux-androideabi”
TOOLNAME_BASE=“arm-linux-androideabi”
AOSP_ABI=“armeabi-v7a”
AOSP_ARCH=“arch-arm”
HOST=“arm-linux-androideabi”
AOSP_FLAGS="-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -Wl,–fix-cortex-a8 -funwind-tables -fexceptions -frtti"
FF_EXTRA_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 "
FF_CFLAGS="-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,–noexecstack -DANDROID "
;;
armv8|armv8a|aarch64|arm64|arm64-v8a)
TOOLCHAIN_BASE=“aarch64-linux-android”
TOOLNAME_BASE=“aarch64-linux-android”
AOSP_ABI=“arm64-v8a”
AOSP_ARCH=“arch-arm64”
HOST=“aarch64-linux”
AOSP_FLAGS="-funwind-tables -fexceptions -frtti"
FF_EXTRA_CFLAGS=""
FF_CFLAGS="-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,–noexecstack -DANDROID "
;;
mips|mipsel)
TOOLCHAIN_BASE=“mipsel-linux-android”
TOOLNAME_BASE=“mipsel-linux-android”
AOSP_ABI=“mips”
AOSP_ARCH=“arch-mips”
HOST=“mipsel-linux”
AOSP_FLAGS="-funwind-tables -fexceptions -frtti"
;;
mips64|mipsel64|mips64el)
TOOLCHAIN_BASE=“mips64el-linux-android”
TOOLNAME_BASE=“mips64el-linux-android”
AOSP_ABI=“mips64”
AOSP_ARCH=“arch-mips64”
HOST=“mipsel64-linux”
AOSP_FLAGS="-funwind-tables -fexceptions -frtti"
;;
x86)
TOOLCHAIN_BASE=“x86”
TOOLNAME_BASE=“i686-linux-android”
AOSP_ABI=“x86”
AOSP_ARCH=“arch-x86”
HOST=“i686-linux”
AOSP_FLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -funwind-tables -fexceptions -frtti"
FF_EXTRA_CFLAGS="-O3 -DANDROID -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -fomit-frame-pointer -march=k8 "
FF_CFLAGS="-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,–noexecstack -DANDROID "
;;
x86_64|x64)
TOOLCHAIN_BASE=“x86_64”
TOOLNAME_BASE=“x86_64-linux-android”
AOSP_ABI=“x86_64”
AOSP_ARCH=“arch-x86_64”
HOST=“x86_64-linux”
AOSP_FLAGS="-march=x86-64 -msse4.2 -mpopcnt -mtune=intel -funwind-tables -fexceptions -frtti"
FF_EXTRA_CFLAGS="-O3 -DANDROID -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -fomit-frame-pointer -march=k8 "
FF_CFLAGS="-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,–noexecstack -DANDROID "
;;
*)
echo “ERROR: Unknown architecture $1”
[ “ 0 " = " 0" = " 0"="BASH_SOURCE” ] && exit 1 || return 1
;;
esac

echo "TOOLCHAIN_BASE=" T O O L C H A I N B A S E e c h o " T O O L N A M E B A S E = " TOOLCHAIN_BASE echo "TOOLNAME_BASE=" TOOLCHAINBASEecho"TOOLNAMEBASE="TOOLNAME_BASE
echo "AOSP_ABI=" A O S P A B I e c h o " A O S P A R C H = " AOSP_ABI echo "AOSP_ARCH=" AOSPABIecho"AOSPARCH="AOSP_ARCH
echo "AOSP_FLAGS=" A O S P F L A G S e c h o " H O S T = " AOSP_FLAGS echo "HOST=" AOSPFLAGSecho"HOST="HOST
4.编写build_x264.sh 文件
#!/bin/bash

ARCH=$1

source config.sh A R C H L I B S D I R = ARCH LIBS_DIR= ARCHLIBSDIR=(cd dirname $0; pwd)/libs/libx264
echo “LIBS_DIR=”$LIBS_DIR

cd libx264

PLATFORM= A N D R O I D N D K R O O T / p l a t f o r m s / ANDROID_NDK_ROOT/platforms/ ANDROIDNDKROOT/platforms/AOSP_API/ A O S P A R C H T O O L C H A I N = AOSP_ARCH TOOLCHAIN= AOSPARCHTOOLCHAIN=ANDROID_NDK_ROOT/toolchains/ T O O L C H A I N B A S E − TOOLCHAIN_BASE- TOOLCHAINBASEAOSP_TOOLCHAIN_SUFFIX/prebuilt/linux-x86_64

PREFIX= L I B S D I R / LIBS_DIR/ LIBSDIR/AOSP_ABI

./configure --prefix=KaTeX parse error: Expected 'EOF', got '\ ' at position 8: PREFIX \̲ ̲--enable-shared…HOST
–cross-prefix= T O O L C H A I N / b i n / TOOLCHAIN/bin/ TOOLCHAIN/bin/TOOLNAME_BASE-
–sysroot=$PLATFORM
–extra-cflags="-Os -fpic"
–extra-ldflags=""

make clean
make -j8
make install

cd …

5.编写build_ffmpeg.sh文件
#!/bin/bash

ARCH=$1

source config.sh A R C H L I B S D I R = ARCH LIBS_DIR= ARCHLIBSDIR=(cd dirname $0; pwd)/libs/lib-ffmpeg
echo “LIBS_DIR=”$LIBS_DIR

cd ffmpeg-3.3.9

PLATFORM= A N D R O I D N D K R O O T / p l a t f o r m s / ANDROID_NDK_ROOT/platforms/ ANDROIDNDKROOT/platforms/AOSP_API/ A O S P A R C H T O O L C H A I N = AOSP_ARCH TOOLCHAIN= AOSPARCHTOOLCHAIN=ANDROID_NDK_ROOT/toolchains/ T O O L C H A I N B A S E − TOOLCHAIN_BASE- TOOLCHAINBASEAOSP_TOOLCHAIN_SUFFIX/prebuilt/linux-x86_64

PREFIX= L I B S D I R / LIBS_DIR/ LIBSDIR/AOSP_ABI

./configure
–prefix=KaTeX parse error: Expected 'EOF', got '\ ' at position 8: PREFIX \̲ ̲--enable-cross-…AOSP_ABI
–target-os=android
–cc= T O O L C H A I N / b i n / TOOLCHAIN/bin/ TOOLCHAIN/bin/TOOLNAME_BASE-gcc
–cross-prefix= T O O L C H A I N / b i n / TOOLCHAIN/bin/ TOOLCHAIN/bin/TOOLNAME_BASE-
–disable-stripping
–nm= T O O L C H A I N / b i n / TOOLCHAIN/bin/ TOOLCHAIN/bin/TOOLNAME_BASE-nm
–sysroot=KaTeX parse error: Expected 'EOF', got '\ ' at position 10: PLATFORM \̲ ̲--enable-gpl \ …FF_EXTRA_CFLAGS $FF_CFLAGS"
–extra-ldflags=" "

make clean
make -j8
make install

cd …

6.先bash build_x264.sh的脚本 然后在bash build_ffmpeg.sh 就可以看到编译成功的so库

你可能感兴趣的:(ffmpeg)