FFmpeg 编译for Android
Posted 燕十三
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFmpeg 编译for Android相关的知识,希望对你有一定的参考价值。
编译环境:
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
以上是关于FFmpeg 编译for Android的主要内容,如果未能解决你的问题,请参考以下文章
错误记录Kotlin 编译报错 ( Not nullable value required to call an ‘iterator()‘ method on for-loop range )(代码片