在Linux环境下编译ffmpeg比较容易,但是windows操作系统毕竟是目前pc机用的最多的操作系统,音视频自然需要考虑在windows上的应用;
在windows上编译ffmpeg最重要的就是配置环境;
1. 下载mingw-get-inst-20120426.exe,然后安装,现在安装mingw和msys比较方便,只是需要安装的电脑连上互联网就可以了
2. 安装vs2008,后面要使用vs2008的编译工具编译ffmpeg
3. 配置msys,上述安装好后,打开msys的msys.bat(有可能在msys/1.0中)在文件的头一句添加如下:
call "C:/Program Files/Microsoft Visual Studio 9.0/VC/bin/vcvars32.bat",注意是第一句,注意你安装vs2008的时候路径;
然后打开vs2008的cmd工具(直接到开始->程序->vs2008->Tools->vs2008命令提示),在提示符下进入msys/1.0(这里视msys的安装路径而定,主要是找到msys.bat)
运行msys.bat,然后在msys的提示符下运行lib命令,即可;
4. 编译ffmpeg
./configure --enable-shared --disable-static --enable-memalign-hack
make
5. 进入libavcodec目录,可看到avcodec.lib 和 avcodec.dll,其他库目录类似;
6. 编译完成后,赫然发现,没有ffserver.exe,查找资料,发现是msys少了ffserver所需的网络库,网上资料介绍使用cygwin则可以成功编译ffserver,所以要么给msys加上网络库(例如libevent,不知道加上可不可以,没试过),要么使用cygwin编译
7. 于是下载cygwin,下载过程可参考网上资料,重点在于下载安装cygwin时要选好要用的工具,例如gcc make 啥的
8. 在cygwin上也如上述第3步一样配置一把vs2008的lib
9. 编译ffmpeg,发现ffserver果然有了。
10. 发现libavcodec中只有DLL(cygavcodec.dll cygavcodec-54.dll),没有lib库
11. 好吧,再看网贴,发现有人说这个lib库自己建也可以,使用vc 6 / vs2008带的lib.exe工具来生成:
生成了MyTest.dll库了;
然后 写一个DEF文件 (这里是MyTest.def), 简单的格式大致如下:
LIBRARY MyTest //这里的MyTest对应于MyTest.dll
EXPORTS
AllocMemory @1 //导出的第一个function : 对应于MyTest.dll里面的AllocMemory(...), 注意, 参数可不用写
ReadMemory @2 //导出的第二个function : 对应于MyTest.dll里面的ReadMemory-Function.
//注意: function可以不用全部导出, 可以只选择你需要的Function.
再就用LIB工具(VC6有提供)生成LIB文件 (这里是MyTest.lib) :
lib /def:MyTest.def //默认生成的名称为MyTest.lib.
到此生成完毕, 连接的时候只需要引用MyTest.lib即可, 但要注意XXX.exe 和MyTest.dll要放在同一目录下.
12. 运行ffserver,居然提示start_children函数失败,原因在于函数start_children中的fork子进程失败。。。这个问题又难住了,查资料看看能不能换cygwin的GCC来解决这个问题。。。待续。。。