在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来解决这个问题。。。待续。。。