Win7下编译ffmpeg

Author Avatar
罗炜光 12月 31, 2016
  • 在其它设备中阅读本文章

下载ffmpeg源码并解压

地址http://www.ffmpeg.org/download.html

安装MinGW

下载MinGW安装器,下载地址http://www.mingw.org/;下载完成后安装,安装完成后点运行,标记上以下几项:

然后在Installation菜单下点击Apply Changes

下载android NDK

假如使用android studio,可在Settings中点击Appearance & Behavior -> System Settings -> Android SDK,在右侧面板点击SDK Tools勾选,点击Apply即可

修改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)'

假如不修改会导致编译的so文件的版本号在so后面,导致android无法识别加载

编写build_android.sh脚本文件

在ffmpeg根目录编写一个文件名为build_android.sh的脚本文件

ARM

内容如下:

NDK=D:/Users/Administrator/AppData/Local/Android/sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-19/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CPU=arm
PREFIX=$(pwd)/android/$CPU 
ADDI_CFLAGS="-marm"

function build_one
{
./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-asm \
    --enable-gpl \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=linux \
    --arch=arm \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" 
make clean
make
make install
}
build_one

其中要修改NDK,SYSROOT和TOOLCHAIN为自己的目录,注意android-19arm-linux-androideabi-4.9版本,要修改为自己NDK中的版本

x86

内容如下:

NDK=D:/Users/Administrator/AppData/Local/Android/sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-19/arch-x86/
TOOLCHAIN=$NDK/toolchains/x86-4.9/prebuilt/windows-x86_64
CPU=x86
PREFIX=$(pwd)/android/$CPU

function build_one
{
./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-asm \
    --enable-gpl \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/i686-linux-android- \
    --target-os=linux \
    --arch=x86 \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" 
make clean
make
make install
}
build_one

arm与x86两个脚本不能在同一个ffmpeg目录编译,否则会报错

编译

  • 点击MinGW/msys/1.0/目录下的msys.bat

  • 输入跳转到ffmpeg源码目录下的命令,如:(cd D:/ffmpeg)

  • 输入chmod +x build_android.sh给build_android.sh增加执行权限

  • 输入build_android.sh编译

  • 等待很长时间后,编译会完成

假如报./configure: line <xxx>: pr: command not found的解决方案
下载coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2之后把bin目录下的内容全部拷贝到了MinGW下的bin目录下面,重新开始上面的步骤即可

完成

编译完的so会在ffmpeg下的android目录下

参考资料

win7下编译android版ffmpeg
FFmpeg的Android平台移植—编译篇
MSys中使用configure出现无法找到pr错误解决方案