编译环境:
debian x64
ndk-r14b
1. 安装ndk-r14b
下载地址 http://mirrors.neusoft.edu.cn/android/repository/android-ndk-r14b-linux-x86_64.zip
安装:
cd /opt/workspace && unzip android-ndk-r14b-linux-x86_64.zip
2. ndk编译环境设置脚本: setup_build_env.sh
1 export NDK=/opt/workspace/android-ndk-r14b 2 export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt 3 export PLATFORM=$NDK/platforms/android-9/arch-arm 4 export PREFIX=$(pwd)/android-lib
2.1 编译libx264
git clone git://git.videolan.org/x264.git . ./setup_build_env.sh cd x264 ./configure --prefix=$PREFIX \ --enable-static --enable-shared \ --enable-pic --disable-asm --disable-cli --host=arm-linux \ --cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \ --sysroot=$PLATFORM make make install cd ..
2.2 编译libfdk-aac
git clone https://github.com/mstorsjo/fdk-aac.git . ./setup_build_env cd fdk-aac ./autogen.sh CFLAGS="-fpic -DANDROID -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -D__ARM_ARCH_7__ -Wno-psabi -march=armv7 -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID -Wa,--noexecstack -MMD -MP " CROSS_COMPILE=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- export CPPFLAGS="$CFLAGS" export CFLAGS="$CFLAGS" export CXXFLAGS="$CFLAGS" export CXX="${CROSS_COMPILE}g++ --sysroot=${PLATFORM}" export LDFLAGS="$LDFLAGS" export CC="${CROSS_COMPILE}gcc --sysroot=${PLATFORM}" export NM="${CROSS_COMPILE}nm" export STRIP="${CROSS_COMPILE}strip" export thout-mp4v2 RANLIB="${CROSS_COMPILE}ranlib" export AR="${CROSS_COMPILE}ar" ./configure --prefix=$PREFIX --without-mp4v2 --host=arm-linux --enable-static --enable-shared make make install cd ..
2.3 编译FFmpeg
. setup_build_env.sh export PREFIX=../ffmpeg-lib make clean configure_normal() { ./configure --target-os=linux --prefix=$PREFIX \ --enable-cross-compile \ --enable-runtime-cpudetect \ --disable-asm --arch=arm \ --cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc \ --cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \ --disable-stripping \ --nm=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-nm \ --sysroot=$PLATFORM \ --enable-gpl --enable-nonfree --enable-shared --enable-static --enable-small \ --enable-libx264 --enable-libfdk-aac \ --extra-cflags="-I ./deps/android-lib/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a" \ --extra-ldflags="-L ./deps/android-lib/lib" } configure_normal make make install
编译成功后安装目录如下:
ffmpeg-lib/
├── bin
│ ├── ffmpeg
│ ├── ffprobe
│ └── ffserver
├── include
│ ├── libavcodec
│ │ ├── avcodec.h
│ │ ├── avdct.h
│ │ ├── avfft.h
│ │ ├── d3d11va.h
│ │ ├── dirac.h
│ │ ├── dv_profile.h
│ │ ├── dxva2.h
│ │ ├── jni.h
│ │ ├── mediacodec.h
│ │ ├── qsv.h
│ │ ├── vaapi.h
│ │ ├── vda.h
│ │ ├── vdpau.h
│ │ ├── version.h
│ │ ├── videotoolbox.h
│ │ ├── vorbis_parser.h
│ │ └── xvmc.h
│ ├── libavdevice
│ │ ├── avdevice.h
│ │ └── version.h
│ ├── libavfilter
│ │ ├── avfiltergraph.h
│ │ ├── avfilter.h
│ │ ├── buffersink.h
│ │ ├── buffersrc.h
│ │ └── version.h
│ ├── libavformat
│ │ ├── avformat.h
│ │ ├── avio.h
│ │ └── version.h
│ ├── libavutil
│ │ ├── adler32.h
│ │ ├── aes_ctr.h
│ │ ├── aes.h
│ │ ├── attributes.h
│ │ ├── audio_fifo.h
│ │ ├── avassert.h
│ │ ├── avconfig.h
│ │ ├── avstring.h
│ │ ├── avutil.h
│ │ ├── base64.h
│ │ ├── blowfish.h
│ │ ├── bprint.h
│ │ ├── bswap.h
│ │ ├── buffer.h
│ │ ├── camellia.h
│ │ ├── cast5.h
│ │ ├── channel_layout.h
│ │ ├── common.h
│ │ ├── cpu.h
│ │ ├── crc.h
│ │ ├── des.h
│ │ ├── dict.h
│ │ ├── display.h
│ │ ├── downmix_info.h
│ │ ├── error.h
│ │ ├── eval.h
│ │ ├── ffversion.h
│ │ ├── fifo.h
│ │ ├── file.h
│ │ ├── frame.h
│ │ ├── hash.h
│ │ ├── hmac.h
│ │ ├── hwcontext_cuda.h
│ │ ├── hwcontext_dxva2.h
│ │ ├── hwcontext.h
│ │ ├── hwcontext_qsv.h
│ │ ├── hwcontext_vaapi.h
│ │ ├── hwcontext_vdpau.h
│ │ ├── imgutils.h
│ │ ├── intfloat.h
│ │ ├── intreadwrite.h
│ │ ├── lfg.h
│ │ ├── log.h
│ │ ├── lzo.h
│ │ ├── macros.h
│ │ ├── mastering_display_metadata.h
│ │ ├── mathematics.h
│ │ ├── md5.h
│ │ ├── mem.h
│ │ ├── motion_vector.h
│ │ ├── murmur3.h
│ │ ├── opt.h
│ │ ├── parseutils.h
│ │ ├── pixdesc.h
│ │ ├── pixelutils.h
│ │ ├── pixfmt.h
│ │ ├── random_seed.h
│ │ ├── rational.h
│ │ ├── rc4.h
│ │ ├── replaygain.h
│ │ ├── ripemd.h
│ │ ├── samplefmt.h
│ │ ├── sha512.h
│ │ ├── sha.h
│ │ ├── spherical.h
│ │ ├── stereo3d.h
│ │ ├── tea.h
│ │ ├── threadmessage.h
│ │ ├── timecode.h
│ │ ├── time.h
│ │ ├── timestamp.h
│ │ ├── tree.h
│ │ ├── twofish.h
│ │ ├── version.h
│ │ └── xtea.h
│ ├── libpostproc
│ │ ├── postprocess.h
│ │ └── version.h
│ ├── libswresample
│ │ ├── swresample.h
│ │ └── version.h
│ └── libswscale
│ ├── swscale.h
│ └── version.h
├── lib
│ ├── libavcodec.a
│ ├── libavcodec.so -> libavcodec.so.57.89.100
│ ├── libavcodec.so.57 -> libavcodec.so.57.89.100
│ ├── libavcodec.so.57.89.100
│ ├── libavdevice.a
│ ├── libavdevice.so -> libavdevice.so.57.6.100
│ ├── libavdevice.so.57 -> libavdevice.so.57.6.100
│ ├── libavdevice.so.57.6.100
│ ├── libavfilter.a
│ ├── libavfilter.so -> libavfilter.so.6.82.100
│ ├── libavfilter.so.6 -> libavfilter.so.6.82.100
│ ├── libavfilter.so.6.82.100
│ ├── libavformat.a
│ ├── libavformat.so -> libavformat.so.57.71.100
│ ├── libavformat.so.57 -> libavformat.so.57.71.100
│ ├── libavformat.so.57.71.100
│ ├── libavutil.a
│ ├── libavutil.so -> libavutil.so.55.58.100
│ ├── libavutil.so.55 -> libavutil.so.55.58.100
│ ├── libavutil.so.55.58.100
│ ├── libpostproc.a
│ ├── libpostproc.so -> libpostproc.so.54.5.100
│ ├── libpostproc.so.54 -> libpostproc.so.54.5.100
│ ├── libpostproc.so.54.5.100
│ ├── libswresample.a
│ ├── libswresample.so -> libswresample.so.2.7.100
│ ├── libswresample.so.2 -> libswresample.so.2.7.100
│ ├── libswresample.so.2.7.100
│ ├── libswscale.a
│ ├── libswscale.so -> libswscale.so.4.6.100
│ ├── libswscale.so.4 -> libswscale.so.4.6.100
│ ├── libswscale.so.4.6.100
│ └── pkgconfig
│ ├── libavcodec.pc
│ ├── libavdevice.pc
│ ├── libavfilter.pc
│ ├── libavformat.pc
│ ├── libavutil.pc
│ ├── libpostproc.pc
│ ├── libswresample.pc
│ └── libswscale.pc
└── share
├── doc
│ └── ffmpeg
├── ffmpeg
│ ├── examples
│ ├── ffprobe.xsd
│ ├── libvpx-1080p50_60.ffpreset
│ ├── libvpx-1080p.ffpreset
│ ├── libvpx-360p.ffpreset
│ ├── libvpx-720p50_60.ffpreset
│ └── libvpx-720p.ffpreset
└── man
├── man1
└── man3
20 directories, 157 files