由于FFmpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译,需要在Windows下配置一个类似Linux的编译环境。本文主要记录Windows下FFmpeg编译的过程。
1.资源准备
准备编译过程所需的软件工具和源代码。
(1) MinGW-MSYS Bundle http://sourceforge.net/projects/mingwbundle/ mingw-msys-0.6-x86.zip 2012-08-21
(2) SDL http://www.libsdl.org/download-1.2.php 1.2.15
(3) Yasm http://yasm.tortall.net/Download.html 1.2.0
(4) FFmpeg http://www.ffmpeg.org/download.html 1.2.12
(5) libiconv-2.dll http://www.jb51.net/dll/libiconv-2.dll.html
2.软件安装
(1) MinGW+Msys编译环境安装
一种方法是先安装mingw,再通过网络下载的方法来安装mingw和msys软件。安装好之后,再通过烦琐的配置,来搭建编译环境。另一种直接安装配置好的MinGW+Msys系统。为了降低安装过程的烦琐程度,选择第二种方法,安装MinGW+Msys编译环境。下载MinGW-MSYS Bundle(该软件同时包含了MinGW和MSYS,不需要连接网络进行安装,并且包含了最新的核心组件和库文件。)软件后,直接安装程序,配置安装路径,按照软件默认的安装向导,即可把软件安装好。
安装好之后会在C盘下面生成三个文件夹,C:\MinGW、C:\msys和C:\Program Files (x86)\MinGW-MSYS。桌面生成一个快捷方式MinGW-MSYS可以直接启动命令行,我们输入gcc –version可以查看版本号如下
以下所有操作都是从这里进入命令行。
(2) 安装SDL
没有SDL支持,就没法使用ffplay.exe播放。把ffmpeg解压缩到C:\msys\1.0\ffmpeg-1.2.12\ffmpeg-1.2.12\ 目录,再把SDL解压缩到C:\msys\1.0\ffmpeg-1.2.12\SDL-1.2.15目录。进入SDL目录,依次执行
./configure-–prefix=/usr/local/SDL
make
make install
完成SDL的安装。
SDL编译完成之后,生成的bin文件、include文件、lib文件存放在C:\msys\1.0\local\SDL目录下。
通过下面命令导入SDL环境变量.
$ export PATH="$PATH:/usr/local/SDL/bin:/usr/local/SDL/include/SDL:/usr/local/SDL/lib"
否则,在执行ffmpeg configure时,SDL support项显示为no.(注:mingw默认根目录对应与windows下的C:\msys\1.0\目录,可以通过echo $PATH查看当前的系统路径)
是否成功,可以使用命令查看
$ echo $PATH
(3)安装yasm
解压到C:\msys\1.0\ffmpeg-1.2.12\yasm-1.2.0目录。
进入yasm目录,分别执行:
./configure --prefix=/usr/local/yasm
make
make install
并通过下面命令导入yasm环境变量。
export PATH="$PATH:/usr/local/yasm/bin"
(4)安装FFmpeg
进入ffmpeg代码目录C:\msys\1.0\ffmpeg-1.2.12\ffmpeg-1.2.12\, 分别执行下面命令:
./configure --enable-shared --disable-static --enable-memalign-hack –-prefix=/usr/local/ffmpeg1.2.12
make
make install
安装完成后,可到C:\msys\1.0\local\ffmpeg1.2.12目录,查看安装结果。
最后在C:\msys\1.0\local\ffmpeg1.2.12\bin下执行ffplay即可观看视频(这里需要将缺失的SDL.dll和libiconv-2.dll拷贝到该目录,视频只支持.avi):
注意:
若需要ffmpeg支持其他视频音频编解码器,只需下载相应源代码,按照以下步骤安装:
配置(./configure)--->编译(make)--->安装(make install)--->导入环境变量(export)。
另外,在编译ffmpeg时,开启相应编解码器的配置即可。