先占着,有时间详细的描述一下编译FFmpeg的全过程。
===============华丽的分隔线=========
下面开始:
由于FFMpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译。要想使用FFMpeg,最先要解决的问题就是在Windows下配置一个类似Linux的编译环境,将FFMpeg编译为二进制库以后,再利用其进行进一步开发。
MSVC++并不严格的遵循C标准,所以整个编译过程必须使用MSys+MinGW系统来完成。如果选择编译动态链接库(dll),这些库将和其他的动态链接库一样在使用上没什么差别,可以使用MSVC++来链接这些库到自己的程序,只有这种情况下MSVC++是被支持的。
FFmpeg在Windows系统下的编译过程如下:
- 准备MSys+MinGW系统
到http://sourceforge.net/project/showfiles.php?group_id=2435下载文件:
bash-3.1-MSYS-1.0.11-snapshot.tar.bz2
msysCORE-1.0.11-2007.01.19-1.tar.bz2
(可能会有版本变化,以下同)
解压msysCORE-1.0.11-2007.01.19-1.tar.bz2,比如解压到D:\msys(以下内容都使用该路径描述)。
解压bash-3.1-MSYS-1.0.11-snapshot.tar.bz2,产生一个名为bash-3.1的目录,在该目录下有一个子目录名为bin,其他的目录不需要关心。复制bin目录中的所有文件到D:\msys\bin,提示是否要覆盖sh.exe的时候,选择是。
到“D:\msys\postinstall”目录下执行pi.bat,在出现的提示中输入n回车后,按任意键退出即可。
2)安装MinGW
同样是到http://sourceforge.net/project/showfiles.php?group_id=2435下载文件:
binutils-2.17.50-20060824-1.tar.gz
gcc-core-3.4.5-20060117-1.tar.gz
gcc-g++-3.4.5-20060117-1.tar.gz
w32api-3.9.tar.gz
mingw-runtime-3.12.tar.gz
把它们全部解压到D:\msys\mingw。
3)修改“msys.bat”
用文本编辑器打开D:\msys\msys.bat,由于打算用MSVC++编译程序,所以需要有.lib文件才能链接到FFmpeg的库,这些.lib文件可以使用微软的工具链中lib命令产生。为此,机器上必须已经安装了微软的Visual Studio或是Visual C++。把下面一行加到msys.bat的最前面,把路径替换成机器上vcvars32.bat实际存在的路径,比如我的在“D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin”,于是就添加:
call "D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat"
4)系统整合
复制D:\msys\etc\fstab.sample为D:\msys\etc\fstab,用文本编辑器打开D:\msys\etc\fstab编辑。(需要使用一个支持Unix换行风格的编辑器,比如Notepad++),把下面这行:
d:/mingw /mingw
改为:
d:/msys/mingw /mingw
完成以上步骤,MSys+MinGW系统就配置完成了。
- 用SVN方式获取FFmpeg
首先到http://sourceforge.net/project/showfiles.php?group_id=138498下载TortoiseSVN并安装,安装结束后需要重新启动才可以使用。如果希望使用中文版本,可以下载LanguagePack-version-win32-zh_CN.exe,这样软件就变成熟悉的中文界面了。
由于TortoiseSVN完全整合到了Windows资源管理器中,所以我们只要开启资源管理器,在希望存放代码的目录上右击选择“SVN检出...”就可以启动TortoiseSVN。我把FFmpeg源代码存储在“D:\ffmpeg”目录下,所以右击该目录,选择“SVN检出...” ,然后在出现的对话框中填写如下内容:
图1
点击确定就会开始下载过程,TortoiseSVN会把最新版本的FFmpeg源代码下载到本地目录中,等待下载结束,就可以开始编译过程。由于FFmpeg的维护人员较多,下载的版本难免会有错误,甚至于当前下载的版本根本就无法编译,所以要经常更新。更新的方法很简单,右击FFmpeg所在的目录,选择“SVN更新”即可。
- 编译
图2
这是一个类似Linux的shell并且在Windows上运行,就像是在使用一个真正的Linux shell。不过使用这个shell时需要注意:→目录名使用正斜杠来分割,而不是Windows所使用的反斜杠(比如说要写成"D:/ffmpeg"而不是"D:\ffmpeg")。
→盘符(例如"C:\")可以从根目录处访问(像这样"/C/")。
→文件名或目录名中如果带有空格,必须用双引号括起(例如这样"/C/Program Files",带有双引号)。
下面切换到存放FFmpeg源代码的目录,方法是输入:"cd /D/ffmpeg"。
接下来要配置FFmpeg,选择编译时包含的库,对于如何加入对第三方库的支持,请看后续描述,这里先输入:
./configure --enable-memalign-hack
--enable-memalign-hack选项是FFmpeg在Windows上编译成功所必须指定的,待配置完成后,将回到命令提示符,看到下图所示的画面:
图3
如果没有错误的话,就可以"make"具有基本功能的FFmpeg了,在提示符后输入:"make"。编译的过程将持续很长时间。如果一切正常,结束后将返回提示符,并有如下的输出画面:
图4
这时程序已经编译好了,在存放FFmpeg源代码的目录下可以找到ffmpeg.exe这个文件。之后,如果希望把FFmpeg安装到系统中,可以执行安装步骤:"make install",这将会复制所有生成的重要文件到MSys的local文件夹下。
由于我只是调用FFmpeg,所以没有安装,而是把ffmpeg.exe复制到需要的目录下,作为一个模块使用。
如果希望使用FFmpeg包含的libavcodec库开发多媒体文件处理程序,还需要编译libavcodec的dll动态链接库,编译过程和上述过程稍有差别,如下所述:
首先切换到FFmpeg的源代码目录,在开始编译前先使用"make distclean"清理上一次留下的中间文件,然后向configure脚本多传递两个参数:
./configure --enable-shared --disable-static --enable-memalign-hack
最后执行"make"命令就可以了。
这种编译方式能够得到供MSVC++使用的文件,从而使用MSVC++进行进一步开发。
- 链接
现在通过包含FFmpeg的头文件,和使用上述三个lib文件进行链接,就能够编写具备FFmpeg功能的应用程序了。
- 加入对第三方库的支持
首先需要下载mp3lame,这里有两个方案可以选择:
→到http://sourceforge.net/project/showfiles.php?group_id=290下载lame-3.97.tar.gz,使用以下命令编译并安装到MinGW的库中:
./configure --prefix=/static --disable-shared --enable-static
make
make install
或者将mp3lame编译为动态链接库:
./configure --prefix=/shared
make
make install
→到http://oss.netfarm.it/mplayer-win32.php下载已经编译的mp3lame库,解压后复制到“D:\msys\mingw”文件夹下。
接下来和前述步骤类似,切换到存放FFmpeg源代码的目录,在传递配置参数时要加入“--enable-libmp3lame” ,即使用以下命令配置:
./configure --enable-static --enable-shared --enable-memalign-hack --enable-libmp3lame
配置后显示的信息如下图:
图5
可以看到这时libmp3lame已经为enabled,下面只要使用"make"命令编译就可以了。最终我的FFmpeg配置为:
--enable-gpl --enable-pp --enable-swscaler --enable-pthreads --enable-liba52 --enable-avisynth --enable-libdts --enable-libfaac --enable-libfaad --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libogg --enable-libtheora --enable-libvorbis --enable-x264 --enable-xvid --enable-amr_nb --enable-amr_wb --cpu=i686 --enable-memalign-hack --extra-ldflags=-static
===============华丽的分隔线=========
本文参考了http://www.aurora-x.net/wiki/CompileFFmpegWindows和FFmpeg工程组的有关内容,并针对已经过时的部分稍加修改,感谢网络上无私奉献的朋友们。
没有评论:
发表评论