1. 下载FFMPEG
http://ffmpeg.org/releases/ffmpeg-4.2.2.tar.bz2
http://ffmpeg.org/releases/ffmpeg-4.2.2.tar.bz2
2. 解压ffmpeg-4.2.2.tar.bz2
$ tar xvjf ffmpeg-4.2.2.tar.bz2
3. 下载NDK
镜像下载路径:NDK 下载 | Android NDK | Android Developers
4. 修改configure
configre默认是gcc编译.
但是新的ndk都是clang
修改如下://默认改为clang 以及 clang++
5. 编写编译脚本
#!/bin/bash
###################################
#### build script for FFMPEG
#### url:
#### Date: 2021-12-28
#### Author: Tim
###################################
# ndk for linux https://developer.android.google.cn/ndk/downloads?hl=zh-cn
NDKROOT_PATH=/home/xxxx/workspace/tools/android-ndk-r23b
# current dir
CURRENT_PATH=$(pwd)
PREFIX=$CURRENT_PATH/out/
# Configure and build.
# Only choose one of these, depending on your build machine...
export TOOLCHAIN=$NDKROOT_PATH/toolchains/llvm/prebuilt/linux-x86_64
# Only choose one of these, depending on your device...
export TARGET=aarch64-linux-android
#export TARGET=armv7a-linux-androideabi
# Set this to your minSdkVersion.
export API=28
PREBUILT_TOOL_ARM64V8A_PATH=$TOOLCHAIN/bin/$TARGET$API-clang
PREBUILT_TOOL_ARM64V8A_PATH_AR=$TOOLCHAIN/bin/llvm-ar
PREBUILT_TOOL_ARM64V8A_PATH_CLANG=$TOOLCHAIN/bin/$TARGET$API-clang
PREBUILT_TOOL_ARM64V8A_PATH_CLANG_PLUS=$TOOLCHAIN/bin/$TARGET$API-clang++
if [ ! -f $TOOLCHAIN/bin/$TARGET$API-ar ];then
ln -s $TOOLCHAIN/bin/llvm-ar $TOOLCHAIN/bin/$TARGET$API-ar
fi
if [ ! -f $TOOLCHAIN/bin/$TARGET$API-nm ];then
ln -s $TOOLCHAIN/bin/llvm-nm $TOOLCHAIN/bin/$TARGET$API-nm
fi
if [ ! -f $TOOLCHAIN/bin/$TARGET$API-ranlib ];then
ln -s $TOOLCHAIN/bin/llvm-ar $TOOLCHAIN/bin/$TARGET$API-ranlib
fi
GENERAL_64BIT="\
--enable-cross-compile \
--arch=aarch64 \
--cpu=armv8-a \
--cross-prefix=$TOOLCHAIN/bin/$TARGET$API-"
GENERAL_32BIT="\
--enable-cross-compile \
--arch=arm \
--cross-prefix=$TOOLCHAIN/bin/$TARGET$API-"
MODULES="\
--disable-avdevice \
--disable-filters \
--disable-programs \
--disable-network \
--disable-avfilter \
--disable-postproc \
--disable-encoders \
--disable-protocols \
--disable-hwaccels \
--disable-doc"
VIDEO_DECODERS="\
--enable-decoder=h264 \
--enable-decoder=mpeg4 \
--enable-decoder=mpeg2video \
--enable-decoder=mjpeg \
--enable-decoder=mjpegb"
AUDIO_DECODERS="\
--enable-decoder=aac \
--enable-decoder=aac_latm \
--enable-decoder=atrac3 \
--enable-decoder=atrac3p \
--enable-decoder=mp3 \
--enable-decoder=pcm_s16le \
--enable-decoder=pcm_s8"
DEMUXERS="\
--enable-demuxer=h264 \
--enable-demuxer=m4v \
--enable-demuxer=mpegvideo \
--enable-demuxer=mpegps \
--enable-demuxer=mp3 \
--enable-demuxer=avi \
--enable-demuxer=aac \
--enable-demuxer=pmp \
--enable-demuxer=oma \
--enable-demuxer=pcm_s16le \
--enable-demuxer=pcm_s8 \
--enable-demuxer=wav"
VIDEO_ENCODERS="\
--enable-encoder=huffyuv \
--enable-encoder=ffv1 \
--enable-encoder=mjpeg"
AUDIO_ENCODERS="\
--enable-encoder=pcm_s16le"
MUXERS="\
--enable-muxer=avi"
PARSERS="\
--enable-parser=h264 \
--enable-parser=mpeg4video \
--enable-parser=mpegaudio \
--enable-parser=mpegvideo \
--enable-parser=aac \
--enable-parser=aac_latm"
function build_ARM64
{
./configure --target-os=linux \
--prefix=${PREFIX} \
${GENERAL_64BIT} \
--extra-cflags=" -O3 -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 " \
--disable-shared \
--enable-static \
--enable-zlib \
--disable-everything \
${MODULES} \
${VIDEO_DECODERS} \
${AUDIO_DECODERS} \
${VIDEO_ENCODERS} \
${AUDIO_ENCODERS} \
${DEMUXERS} \
${MUXERS} \
${PARSERS}
make clean
make install
}
build_ARM64