本文总结众多博文在windows10下编译ffmpeg的经验,并提出在编译过程中遇到的问题以及如何解决。非常详细!
第一步:下载ffmpeg(下载地址:https://ffmpeg.org/download.html)
第二步:下载mingw(下载地址:https://sourceforge.net/projects/mingw/files/)
下载完成后运行 mingw-get-setup.exe 安装MinGW Installer
直接默认,点击continue 开始安装,下图即安装成功的样子:
如果mingw-get-setup安装mingw总是出现download failed和unable to continue错误,截图如下:
原因是网络问题导致下载失败,网上有人说连接手机热点可以解决但是我试了N多次都没有效果,我的解决方法是找个梯子连接外网即可成功下载。
安装后桌面上会建立快捷方式,运行。
在此处选择basic setup,把右边的都勾选,然后点击左上角的installation下拉菜单下的apply change进行下载安装。
如果安装出现错误
install: bison-2.4.2-1-msys-1.0.13-doc.tar.lzma
mingw-get-gui: *** ERROR *** required package file is not available
mingw-get-gui: *** ERROR *** cannot install bison-2.4.2-1-msys-1.0.13-doc.tar.lzma
mingw-get-gui: *** ERROR *** due to previous download failure
遇到这样的问题很大概率是被墙了
使用梯子即可
再次运行mingw-get即可
安装完成后会在安装目录下出现这些文件:
然后配置环境变量:
之后在安装目录找到msys.bat并打开,后面会用到。
找到ffmpeg目录下的configure文件,将如下代码:
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)'
新建一个build_android.sh,里面的代码如下:
#!/bin/bash
ADDI_CFLAGS="-marm"
API=19
PLATFORM=arm-linux-androideabi
CPU=armv7-a
#自己本地的ndk路径。
NDK=C:/jiangjie/Android/android-ndk-r16b
SYSROOT=$NDK/platforms/android-$API/arch-arm/
ISYSROOT=$NDK/sysroot
ASM=$ISYSROOT/usr/include/$PLATFORM
TOOLCHAIN=$NDK/toolchains/$PLATFORM-4.9/prebuilt/windows-x86_64
#自己指定一个输出目录,用来放生成的文件的。
OUTPUT=C:/jiangjie/Android/ffmpeg-3.3.6/output
function build
{
./configure \
--prefix=$OUTPUT \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-I$ASM -isysroot $ISYSROOT -Os -fpic -marm" \
--extra-ldflags="-marm" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build
#################################################################################################
进入你安装的MinGW目录中,找到刚刚安装的msys中
给build.sh权限,输入 chmod +x build.sh
执行./build.sh
又出现错误:yasm/nasm not found or too old. Use --disable-yasm for a crippledbuild错误
安装ffmpeg过程中,执行./configure时,报yasm/nasm not found or too old. Use --disable-yasm for a crippledbuild错误,分析、解决如下:
分析:yasm是汇编编译器,ffmpeg为了提高效率使用了汇编指令,如MMX和SSE等。所以系统中未安装yasm时,就会报上面错误。
解决:安装yasm编译器。安装方法如下:
在http://www.tortall.net/projects/yasm/releases下面找到适合自己平台的yasm版本。然后进行安装。举例如下:
1)下载:wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
2)解压:tar zxvf yasm-1.3.0.tar.gz
3)切换路径: cd yasm-1.3.0
4)执行配置: ./configure
5)编译:make
6)安装:make install
然后返回ffmpag再次执行./configure
最后进入ffmpeg所在解压的目录:
执行./build.sh
注:如果提示.../arm-linux-androideabi-pkg-config not found, library detection may fail.警告,忽视即可,编译时目前没有发现有什么影响。