windows 10 x64环境下编译带有ffplay的ffmpeg

windows下编译ffmpeg的核心在于要搭建一个类linux的编译环境,换句话说就是需要在windows环境中运行gcc、make等命令工具。本文详细介绍windows下编译环境的搭建与ffmpeg的编译过程,并成功生成ffplay。

编译环境搭建

windows下类linux的编译环境常见的有两种,一种是MinGW,一种是cygwin。下面先简单介绍一下两者的区别。

MinGW与cygwin的区别

MinGW

  • MinGW全称 Minimalistic GNU for Windows,某种程度上可以看做是windows版本下的GCC。MinGW有一个Msys的子项目,可以提供一些模拟Linux的shell和基本的Linux工具,Msys是一个辅助环境。
  • MinGW 有专门的Win32 API的头文件,来把代码中Linux方式的系统调用替换为对应的Windows下的调用方式,某种程度上可以称之为将Linux调用翻译为Windows调用。

cygwin

  • Cygwin 则是一个在Windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件。Cygwin更像一个平台,模拟了Linux的接口,提供了运行在它上面的程序使用,提供了很多Linux环境下的GNU软件。
  • Cygwin 通过Cygwin1.dll的文件实现操作系统API的转换,模拟了Linux的调用接口给程序,程序以Linux的方式调用系统API,但这个API的目标库是Cygwin1.dll,Cygwin1.dll再调用Windows对用的方式实现,再把结果返回给程序。

本篇文章介绍使用MinGW做为编译环境编译ffmpeg。

MinGW环境搭建

安装MinGW installation manager

到官网下载安装程序:https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download

下载完成后按照提示步骤安装。

安装MinGW和Msys

打开MinGW Installer主界面,按照如下图所示勾选:

之后在菜单中依次选择“Installation->Aplly changes”提交修改,然后就开始了自动安装,你会看到每个步骤执行的详细进度。

如果中途有某个包有安装失败类的提示,可以重复“Aplly changes”操作,直到所有的包都安装成功为止。

编译ffmpeg

工具安装

1、yasm

yasm是汇编编译器,因为ffmpeg中为了提高效率用到了汇编指令,比如MMX和SSE。因此需要安装这个工具。

官网下载地址:http://www.tortall.net/projects/yasm/releases/yasm-1.3.0-win32.exe

下载完成后改名为“yasm.exe”放到“C:\MinGW\msys\1.0\bin”目录下。

2、nasm

下载nasm。

官网下载地址:https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/win32/nasm-2.13.03-win32.zip

下载完成后将"nasm.exe"放到“C:\MinGW\msys\1.0\bin”目录下。

3、pkg-config

pkg-config是一个辅助的配置、链接工具,可以方便的支持gcc自动配置。

官网下载地址:http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.26-1_win32.zip

下载完将bin目录中的”pkg-config.exe“放到“C:\MinGW\msys\1.0\bin”目录。

下载pkg-config依赖库glib:

官网下载地址:http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.18/glib_2.18.4-1_win32.zip

下载完成后将bin目录中的“libglib-2.0-0.dll”放到“C:\MinGW\msys\1.0\bin”目录。

注意:glib的依赖库必须要有,否则在运行pkg-config时会出现如下图所示错误,在下一步对ffmpeg做configure操作时会无法找到相关的依赖库(如libx264,libfdk-aac等)。

功能模块准备

此处只列举几个常用的库,如需打开ffmpeg的其他功能,可按此类方法操作。

进入“C:\MinGW\msys\1.0”目录,打开msys.bat,进入到类linux的控制台,如下图所示:

在该控制台中使用到的命令跟linux是一样的,可以理解为在windows上模拟了一个linux终端。下述所涉及的所有命令均在该控制台输入。

1、libx264

官网下载:http://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20190331-2245.tar.bz2

下载完成后拷贝到“C:\MinGW\msys\1.0\home\xxx\”目录中,xxx是你windows当前登录的用户名,然后依次执行下列命令:

tar -jxvf x264-snapshot-20190331-2245.tar.bz2
cd x264-snapshot-20190331-2245
./configure --enable-shared --enable-static --enable-yasm
make
make install

2、libfdk-aac

官网下载:https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.0.tar.gz

下载完成后拷贝到“C:\MinGW\msys\1.0\home\xxx\”目录中,依次执行下列命令:

tar -zxvf fdk-aac-2.0.0.tar.gz
cd fdk-aac-2.0.0
./configure
make
make install

3、SDL

官网下载:https://www.libsdl.org/release/SDL2-2.0.8.tar.gz

下载完成后拷贝到“C:\MinGW\msys\1.0\home\xxx\”目录中,依次执行下列命令:

tar -zxvf SDL2-2.0.8.tar.gz
cd SDL2-2.0.8
./configure
make
make install

FFmpeg编译

本文介绍的是对FFmpeg-n4.1.3版本的编译,如需编译早期版本,步骤跟本文是一样的,但是要注意使用的依赖库,原则就是“所用依赖库版本发布的时间不能晚于相应FFmpeg版本的发布时间”。

1、下载ffmpeg源码

github下载:https://codeload.github.com/FFmpeg/FFmpeg/zip/n4.1.3

下载完将其放到“C:\MinGW\msys\1.0\home\xxx\”目录中,并解压到FFmpeg-n4.1.3目录。

2、修改源码

在FFmpeg-n4.1.3/libavformat/os_support.h文件的头部,加入“#include <winerror.h>”,如下所示:

#ifdef _WIN32
#include <winerror.h>
#if HAVE_DIRECT_H
#include <direct.h>
#endif
#if HAVE_IO_H
#include <io.h>
#endif
#endif

此处修改作用是为FFmpeg在windows下的编译提供几个宏定义的支持,若不加此头文件,编译时会有找不到定义的错误。

3、配置

如果想将其他的库也编译进来,可在此步用类似--enable-xxx的方式来打开。

依次按以下命令执行:

cd FFmpeg-n4.1.3
./configure --enable-shared --enable-yasm --enable-libx264 --enable-avfilter --enable-gpl --enable-sdl --enable-avresample --enable-libfdk-aac --enable-nonfree

配置成功会有类似下述信息打印:

4、开始编译

依次执行如下命令:

make
make install

在终端中输入ffmpeg并回车,如出现下述画面,即为编译并安装成功:

在终端中输入ffplay并回车,可以看到,我们已经正确编译出来了ffplay:

5、打包

我们按照此步骤编译安装的ffmpeg可以在MinGW的终端上运行,如需在windows的环境下使用,只需将所有依赖的dll和exe拷贝出来打包即可。

 

参考文章:

https://www.cnblogs.com/harlanc/p/9569960.html

https://www.cnblogs.com/zoe-mine/p/7056369.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章