FFMpeg在windows下的编译和使用

(本文综合参考自网上诸多相关文章,首先非常感谢这些引用的原文的前辈的探索)
FFmpeg的编译
FFmpeg一个开源的视频解码库。下面较为细致的讲解他分别在windows下和linux下的编译方式。

在windows下:需要使用的工具是MingW和VS2005 VC++
工具的获得,MingW你可以在MingW的官方网站上面获取他的安装程序或者在其他的公共下载网站上面
例如:http://sourceforge.net/projects/mingw/files/
我现在使用的版本号为:mingw-get-inst-20110530.exe
很小的一个程序,下载完之后运行,并且安装,安装时他会提示你需要安装哪些组件,你可以根据自
己的需要选择相关的组件,例如MSYS等,我是选择的全部组件都安装。其实安装的过程就是MinGW从
他的默认资源链接中将一些lzma文件下载下来放在../MinGW/var/cache/mingw-get/packages目录下
,可能由于各种原因你会在安装过程中发现有很多资源包无法下载或者下载失败,我安装在家里安装
时就遇到这个问题。此时你可以根据他提供的链接自己下载相关的资源包,然后放在上面提到的目录
下面即可。如果你发现他给你提供的链接也无法下载,此时你就可以发挥各种搜索引擎的功能下载对
应版本号的组件即可。我这边-大部分-的编译组件的版本号为4.5.2。一些安装完成之后你就可以你
的开始菜单中找到MinGW Shell的运行程序,运行之后实际上就是一个看起来想MSDOS的控制来的实际
上又像Linux Shell的窗口,在其中使用Shell命令编译你需要的库即可。需要使用到的shell命令有:
cd c:/xxx/ooo/...         //进入需要的编译目录
./configure --enable-share ...    //设置你需要的编译参数,具体参数的意义可以通过--help参数获取
make                //开始编译
make install            //安装,也就是将编译完成的dll、lib或者a文件以及需要的头
文件复制到一个统一的目录,具体的目录地址,清查看它的输出提示。

有了编译工具之后就是需要有相应的源代码了,FFmpeg是一个开源项目,你可以在他的官方下载到
需要的源代码,当然你也可以到其他各种资源下载网站下载到他的源代码,下面主要讲解他两个版本
源代码的编译ffmpeg-0.4.9和ffmpeg-0.6.3,这两个版本存在较大差异,由于ffmpeg的函数接口不
向下兼容,所以请根据你需要的实际版本来进行编译。如果你不能找到合适的网址的话,你可以在
下面的网址下载到这篇文章中使用到的源代码
链接ffmpeg-0.4.9:http://download.csdn.net/source/3349090
链接ffmpeg-0.6.3:http://download.csdn.net/source/3349094
下载完资源之后将资源解压缩。然后再MinGW shell中通过上面讲到的命令进行编译需要注意的部分有
1、configure的时候你可以使用这些参数:--enable-shared --disable-static --enable-memalign-hack
2、0.4.9的版本编译的时候会提示一个关于Sleep函数的从定义,愿意是MinGW中的unistd.h与0.4.9中
的os_support.h中重复定义的Sleep函数,将os_support.h中的定义直接屏蔽掉即可。
3、为了尽量少的牵涉到周边的库,在0.4.9编译配置时最好加入--disable-ffplay和--disable-ffserver
--disable-vhook,ffplay需要SDL相关的库,如果你没有则会报错,所以如果你不需要ffplay的可执行文
件那就可以不用编译它
4、对于0.6.3的版本他会直接生成windows下面需要的lib文件与dll文件放在一起,但是0.4.9的版本
却不会生成windows需要的lib文件而是生成了linux下面使用的a文件。那么你需要自己生成需要的lib
文件。
如何从dll文件生成lib文件呢?你可以参考一下的方法
方法1:网上有直接从dll文件转换到lib文件的工具。你可以搜索dll convert lib这些关键字下载相关
的软件我下载了一个,使用了一下,转换挺方便,就是使用转换的lib文件的时候出了点问题,没有做
细致的研究了。
方法2:你可以使用VS的工具dumpbin和lib这两个工具,dumpbin是从dll文件中提取相关需要的函数信息
而lib则可以从def文件直接生成需要的lib文件,下main以VS2005 VC++为例进行详细讲解
第一、你可以在VS的菜单Tools->Visual studio 2005 command prompt来打开工具使用后台
你也可以通过开始->运行 输入cmd回车来进入控制台环境,然后进入../Microsoft Visual Studio 8/vc
/bin目录下即可。
第二、假设你需要处理的dll为:xx.dll,那么你需要使用的命令为:
DUMPBIN xx.dll /EXPORTS /OUT:xx.def
这样xx.dll的接口函数信息就导出到了xx.def文件中
导出的信息格式大致如下:
EXAMPLE:VideoDeCoder.DEF 文件内容如下

Dump of file xx.dll                                  
                                                                       
        File Type: DLL                                                 
                                                                       
          Section contains the following exports for xx.dll  
                                                                       
                   0 characteristics                                   
            3D49E48F time date stamp Fri Aug 02 09:46:55 2002          
                0.00 version                                           
                   1 ordinal base                                      
                  11 number of functions                               
                  11 number of names                                   
                                                                       
            ordinal hint RVA      name                                 
                                                                       
                  1    0 00010F60 _TM_ClearDecoderBuff@4               
                  2    1 00010E80 _TM_CloseDecoder@4                   
                  3    2 00010F00 _TM_DecodePicture@4                  
                  4    3 00010ED0 _TM_DecodePictureHeader@4            
                  5    4 00010FD0 _TM_GetFileEnd@4                     
                  6    5 00011030 _TM_GetUValue@4                      
                  7    6 00011060 _TM_GetVValue@4                      
                                                                       
          Summary                                                      
                                                                       
                2000 .data                                             
                1000 .rdata                                            
                1000 .reloc                                            
               15000 .text
你需要到这个文件的内容进行适当的修改,改成如下状态
LIBRARY xx
  DESCRIPTION "xx library"

  EXPORTS
      
  TM_ClearDecoderBuff@4             @1    
  TM_CloseDecoder@4                 @2    
  TM_DecodePicture@4                @3    
  TM_DecodePictureHeader@4          @4    
  TM_GetFileEnd@4                   @5    
  TM_GetUValue@4                    @6    
  TM_GetVValue@4                    @7      
这样的def文件就可以生成为lib了,你需要使用到的命令是
LIB /DEF:xx.def /MACHINE:IX86
运行之后你就可以在../Microsoft Visual Studio 8/vc/bin目录下面找到xx.lib文件了。
可以看到这个方法分成两步:第一步从dll文件中导出接口函数信息,第二步从接口函数列表
生成对应的lib文件。不过比较杯具的是从ffmpeg在MinGW下生成的dll文件中使用dumpbin工
具导出接口函数列表在我的机器上失败了,提示导出失败。不过第二步是非常有价值的。
那么如果能够方便的获得ffmpeg的dll中的接口函数列表呢?其实在MinGW执行make命令的
时候就会生成dll相应的def文件。在ffmpeg0.6.3中是会直接生成的,但是在ffmpeg0.4.9中
需要稍做修改才行在。在0.4.9中./configure xxoo配置编译参数完成之后使用文本编辑工具
打开config.mak文件替换掉下面三行
SLIBNAME=$(SLIBPREF)$(NAME)$(SLIBSUF)
SLIBNAME_WITH_VERSION=$(SLIBPREF)$(NAME)$(SLIBSUF)
SLIBNAME_WITH_MAJOR=$(SLIBPREF)$(NAME)$(SLIBSUF)
然后再make则会在各个dll所在的文件夹中生成对应的def文件,然后按照上面需要的def文件
的格式稍作修改,然后使用vs的lib命令就可以生成相应的lib文件了
生成的windwos下的库的下载路径
链接ffmpeg-0.4.9:http://download.csdn.net/source/3349103
链接ffmpeg-0.6.3:http://download.csdn.net/source/3349106

库文件的使用:
(未完待续)

 

转自 http://blog.csdn.net/xiajia/archive/2011/06/09/6533182.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本系列 FFMPEG 编译文档只针对 FFMPEG 2 1 1 版本 不同版本参考本文档不一定能编 译成功 在 windows 下单纯就学习 FFMPEG 而言 可以不用编译它 因为官方提供有编译好 的库 开发者可以直接用提供的库进行学习 但官方提供的只有动态链接库 想用静态库还 是要自己编译 我用 FFMPEG 主要是在 windows 平台开发视频监控客户端和网页播放插件 以及后期手机上的播放器 我的这些 肯定要为自己的系统需求专门精简 所以也要自己编 译 先拿 windows 开刀 在这上练练手 当时哪止手 腿都练折了 也熟悉熟悉编译过程 考虑到在 windows 下基于 MinGW 编译 FFMPEG 是一个复杂 庞大的工程 为了提高初学者 的信心 我将整个编译过程作了一个分割调整 分成初级篇 中级篇和高级篇 在初级篇中 只简单的编译 FFMPEG 和它的例子程序 ffmpeg exe ffplay exe;中级篇加上常见的一些第三 方库支持 比如 H264 编码的 x264 库 AVS 编码的 xavs 库 MP3 编码的 mp3lame 库 还有 一些 AAC 编解码库等;高级篇对 FFMPEG 2 1 1 版本支持的所有第三方库 尽量全编译进去 做一个全面的支持的 FFMPEG 编译 ">本系列 FFMPEG 编译文档只针对 FFMPEG 2 1 1 版本 不同版本参考本文档不一定能编 译成功 在 windows 下单纯就学习 FFMPEG 而言 可以不用编译它 因为官方提供有编译好 的库 开发者可以直接用提供的库进行学习 但官方提供的只有动态 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值