本篇日期:2017-3-5
参考:
http://blog.csdn.net/huweijian5/article/details/52840177
基本环境:
1. 操作系统:Windows10 64位;
2. Android Studio 2.3,64位。
3. Android NDK开发包:直接使用Android Studio安装NDK。(需要梯子)
操作步骤:
第一步:安装MinGW
下载地址:https://sourceforge.net/projects/mingw/files/。必须最少选择”mingw32-gcc-ada”和”msys-base”。此时还需要配置环境变量,将;C:\MinGW\bin目录添加到环境变量path中。
第二步,下载ffmpeg
c:
md ffpmeg
cd ffmpeg
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
如果速度太慢,需要梯子。
第三步,修改configure
找到ffmpeg目录下的configure文件,将#build settings节下如下代码:
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)'
这是这是因为android so命名的需要。
第四步,新建一个bld.sh,里面的代码如下:
#!/bin/bash
export TMPDIR=C:/ffmpeg/tmpdir
NDK=C:/Users/user/AppData/Local/Android/sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-16/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CPU=arm
PREFIX=C:/ffmpeg/install
ADDI_CFLAGS="-marm"
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-small \
--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" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build_one
【注意】应当先建立目录c:\ffmpeg\tmpdir和c:\ffmpeg\install,否则后面出错!
NDK则替换为你本机的ndk路径;SYSROOT根据你的本机设置,但不要大于你的target,比如你的target是22,就不要用 大于android-22的;PREFIX则是编译后so的存放地址,路径可以随便指定。
第五步,编译
执行C:\MinGW\msys\1.0\msys.bat后,在终端命令行窗口导航到c:\ffmpeg
cd /
cd c
cd ffmpeg\ffmpeg
chmod +x bld.sh
./bld.sh
【坑】这样,出现错误:……c:\Mintoolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gcc is unable to create an executable file.
原因是写了:NDK=C:\Users\user\AppData\Local\Android\sdk\ndk-bundle
应当修改为:NDK=C:/Users/user/AppData/Local/Android/sdk/ndk-bundle
【坑】到了makes时候,出现错误:
library.mak:102: *** missing separator. Stop.
原因是:在git中提供了autocrlf的设置,可以用来自动转换CRLF,它可以设置成true,false,input。Windows上的msysgit默认设置了autocrlf为true,这样,在提交时自动地把行结束符CRLF转换成LF,而在签出代码时把LF转换成CRLF。解决办法,参考
http://blog.csdn.net/xinzhan_56/article/details/8087343
进入到ffmpeg目录中:
cd \ffmpeg
运行
Git config --global core.autocrlf false
#然后运行下面的命令删除ffmpeg代码,并重新获取一下即可
git rm --cached -r .
git reset --hard
【注意】第一个命令最后那个'.'不能少!
最好编译成功后,在ffmpeg\install目录下有lib和include,lib目录下就是那些需要引用的so文件。