手把手教你从Windows编译ffmpeg so包
安装编译环境:
MinGW:https://sourceforge.net/projects/mingw/
ndk-bundle: 直接用AndroidStudio下载的,教程https://www.jianshu.com/p/8adf85732ca0
ffmpeg:http://ffmpeg.org/download.html 请直接用ffmpeg-3.2.15 版本,因为不同的版本,编译会冒出其它问题,为了一切顺利,直接用指定版本
1.安装MinGW,选中 以下选项。
2.在ffmpeg目录下找到config配置文件 ,修改
将该文件中的如下四行:
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)'
3.新建build_android.sh(有的话直接修改)脚本文件(针对Android),内容如下: (红色字体为需要修改的地方,分别是 ffmpeg 根目录,ndk路径,ffmpeg 目录。为了防止出错,也可以在sdk下载路径,看看是否存在 TOOLCHAIN SYSROOT ISYSROOT ASM 路径)。修改完后,用nodepad++之类的软件打开,点编辑->文档格式转换->转为unix。在ffmpeg 目录下新建一个空文件夹ffmpegtemp,必须建,不然会异常。
#!/bin/bash
export TMPDIR=d:/Downloads/ffmpeg-3.2.15/ffmpeg-3.2.15/ffmpegtemp #这句很重要,不然会报错 unable to create temporary file in
# NDK的路径,根据自己的安装位置进行设置
NDK=E:/Android/SDK/ndk-bundle #
# 编译针对的平台,可以根据自己的需求进行设置
# 这里选择最低支持android-14, arm架构,生成的so库是放在
# libs/armeabi文件夹下的,若针对x86架构,要选择arch-x86
#!/bin/bash
PREFIX=d:/Downloads/ffmpeg-3.2.15/ffmpeg-3.2.15/Android/$CPU
API=19
PLATFORM=arm-linux-androideabi
TOOLCHAIN=$NDK/toolchains/$PLATFORM-4.9/prebuilt/windows-x86_64
SYSROOT=$NDK/platforms/android-$API/arch-arm/
ISYSROOT=$NDK/sysroot
ASM=$ISYSROOT/usr/include/$PLATFORM
CPU=armv7-a
build_one()
{
./configure \
--prefix=$PREFIX \
--target-os=android \
--arch=arm \
--cpu=$CPU \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--disable-asm \
--enable-cross-compile \
--enable-shared \
--disable-static \
--enable-runtime-cpudetect \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-small \
--enable-gpl --enable-nonfree --enable-version3 --disable-iconv \
--enable-jni \
--enable-mediacodec \
--disable-decoders --enable-decoder=vp9 --enable-decoder=h264 --enable-decoder=mpeg4 --enable-decoder=aac \
--disable-encoders --enable-encoder=vp9_vaapi --enable-encoder=h264_nvenc --enable-encoder=h264_v4l2m2m --enable-encoder=hevc_nvenc \
--disable-demuxers --enable-demuxer=rtsp --enable-demuxer=rtp --enable-demuxer=flv --enable-demuxer=h264 \
--disable-muxers --enable-muxer=rtsp --enable-muxer=rtp --enable-muxer=flv --enable-muxer=h264 \
--disable-parsers --enable-parser=mpeg4video --enable-parser=aac --enable-parser=h264 --enable-parser=vp9 \
--disable-protocols --enable-protocol=rtmp --enable-protocol=rtp --enable-protocol=tcp --enable-protocol=udp \
--disable-bsfs \
--disable-indevs --enable-indev=v4l2 \
--disable-outdevs \
--disable-filters \
--disable-postproc \i
--sysroot=$SYSROOT \
--extra-cflags="-I$ASM -isysroot $ISYSROOT -D__ANDROID_API__=$API -U_FILE_OFFSET_BITS -Os -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm" \
--extra-ldflags="-marm"
$ADDITIONAL_CONFIGURE_FLAG
}
build_one
make clean
make -j4
make install
4.打开 minGW根目录\msys\1.0\msys.bat 找到位置,直接双击打开。cd build_android.sh所在根目录 。例子:cd d:/Downloads/ffmpeg-3.2.15/ffmpeg-3.2.15 回车 然后输入 ./build_android.sh 回车。等待一段时间。
5.编译完成 ,在ffmpeg根目录生成一个Android文件夹。里面就是编译的so文件。
本文地址:https://blog.csdn.net/u010168733/article/details/110646421