1.首先介绍如何安装编译环境,C和C++开发工具Cygwin
(1) Cygwin下载网址(windows请选择set-x86.exe bit根据自己系统多少位决定) http://www.cygwin.com/
(2) 打开下载好的setup-x86_64.exe(以64bitwindws系统为例) 点击下一 直到如下界, 择联网安装
点击下一步,选择一个站点下载安装
点击下一步,等待下载完成,进入如下界面:
(3) 配置需要安装的编译工具链和GNU
找到Devel Default 分组,展开,选择需要安装的C++ C编译工具链(gcc-core\gcc-g++\gcc-java\make\ ),截图如下:
此截图安装的是一个工具dos2linux,将windows下的文件格式转化成Linux下的文件格式使用方法
dos2linux filename
以上图片中,keep为选中安装模式。
(4)一直点击下一步,直到安装完成。然后打开命令行Cygwin64 Terminal,输入 gcc -v ,make -v,回车检查是否安装成功,如果未安装成功,可重新安装。
2.安装完编译环境接下来就是编译ffmpeg
(1)官网下载ffmpeg https://ffmpeg.org/ ,解压。
(2)新建文件build_android.sh,配置如下:
make clean
export TMP=C:/Windows/Temp #这句很重要,不然会报错,目录必须存在
export NDK=D:/Android/Android/android-ndk-r10e # ndk 路径
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
export PLATFORM=$NDK/platforms/android-19/arch-arm
export PREFIX=../simplefflib #编译生成的文件路径
function build_one
{
rm config.mak
rm config.h
rm config.fate
rm config.log
rm -rf $PREFIX
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$PLATFORM \
--extra-cflags="-I$PLATFORM/usr/include" \
mkdir -p $PREFIX
make clean
make -j4
make install
}
CPU=arm
ADDI_CFLAGS="-marm"
build_one
如果格式不对可用 dos2linux build_android.sh 命令转换。
(3)由于android ndk 限制,需要修改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='$(SLIBNAME)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
因为windows ndk 不识别 libavcodec.so.55 ,libavcodec-55.so 文件。
(4) 配置完成后,就可以编译了,如下图,回车,等待编译完成。大概10多分钟。。。
(5)编译成功会在e/MyFolder/ffmpeg-3.0.1/simplefflib 目录下生成相应so文件。