1 前言
FFmpeg在Linux/Mac下编译比较简单,但是在Windows平台下编译确是一步一个坑,稍不注意就会掉进去,费时费力。之前4月份的时候在公司没编译出来,直接用的别人编译好了的库做的开发,现在有时间了,花了半天的时间编译成功,包括Windows下.lib和.dll,使用Android NDK编译生成的静态库.a和动态库.so。
2 准备工作
这应该是所需要的最少的软件和配置:
①MSYS2(重要!):https://www.msys2.org/, 傻瓜式安装,但是要自己配置环境变量,下载后在开始菜单能看到如下4个程序,我们使用的是MSYS2 MinGW 64-bit,我的安装目录是E:\msys64
②FFmpeg源码:http://ffmpeg.org/download.html,直接下载最新的就可以,解压后放到E:\msys64\home\ivan(如果你是C盘就放C:\msys64\home\你的用户名)
③Git:https://git-scm.com/download/win ,下载安装下一步就行,会自动配置环境变量
④x264源码:https://www.videolan.org/developers/x264.html,为了支持ffmpeg的H264编解码必须先编译这个,也是放在E:\msys64\home\ivan,此时该目录是这样的:
另配置的环境变量:
3 Windows下编译FFmpeg
①首先编译x264:以管理员方式启动MSYS2 MinGW 64-bit,MSYS2是Windows下的Linux模拟器,支持绝大多数的Linux命令,软件包管理器是pacman,首先安装mingw工具链:pacman -S mingw-w64-x86_64-toolchain
按下Enter默认全部安装,如果速度慢的话可以切换中科大镜像源。
其他需要的还有:
pacman -S base-deve1
#下面的可能需要,还是前面两句已经集成了,反正装也不费事
pacman -S yasm nasm gcc
②编写编译脚本build.sh,用一个系统变量来代替路径比较好些:
touch build.sh
脚本内容如下:
basepath=$(cd `dirname $0`;pwd)
echo ${basepath}
cd ${basepath}/x264-master
pwd
./configure --prefix=${basepath}/x264_install --enable-static
make
make install
执行脚本:
sh build.sh
经过一段时间的等待,安装完成,进入E:\msys64\home\Ivan\x264_install\lib,发现libx264.a静态库已经编译得到了:
截图 (4).png
③编译FFmpeg源码:
basepath=$(cd `dirname $0`;pwd)
echo ${basepath}
cd ${basepath}/x264-master
pwd
cd ${basepath}/ffmpeg-4.4
pwd
./configure --prefix=${basepath}/ffmpeg_install --enable-static --disable-shared \
--extra-cflags=-l${basepath}/x264_install/include
--extra-ldflags=-L${basepath}/x264_install/lib
make
make install
这样执行脚本得到的是静态库,如果要得到动态库,
就把--enable-static --disable-shared改成--disable-static --enable-shared,得到的库如下:
4 用Android NDK编译FFmpeg
①准备工作同上面所讲,额外下载Android NDK:https://developer.android.google.cn/ndk/downloads/,下载后解压到E:\msys64
②编写编译脚本:这里我新建了个ffmpeg解压后的文件夹,所以安装的目录写为ffmpeg2_install
basepath=$(cd `dirname $0`;pwd)
echo ${basepath}
cd ${basepath}/x264-master
pwd
cd ${basepath}/ffmpeg
pwd
./configure --prefix=${basepath}/ffmpeg2_install --enable-static --enable-shared \
--enable-cross-compile
--target-os=android --arch=arm \
--cc=/e/msys64/android-ndk-r21e/toolchains/llvm/prebuilt/windows-x86_64/bin/armv7a-linux-androideabi21-clang \
cross-prefix=/e/msys64/android-ndk-r21e/toolchains/llvm/prebuilt/windows-x86_64/bin/arm-linux-androideabi- \
make
make install
编译过程可以看到主要的7个库,还有编码格式,如音频的aac,opus等,视频的h263,h264,vp8,vp9等
经过漫长的等待,编译好后的文件夹如图: