ffmpeg精简

转载地址:http://blog.csdn.net/seven407/article/details/6170823

现在更新一下目前遇到的问题: 
我想裁减ffmpeg编译出来的Dll库,把avcodec.dll裁减到1MB左右就可以了,只需要用ffmpeg完成H.264的解码和对音频解码的支持. 目前搭建了MinGW+MSYS的环境来编译ffmpeg,make的版本是3.81的. 
编译过程如下: 
./configure --enable-shared --disable-static --enable-memalign-hack --disable-encoders --disable-decoders --enable-decoder=h264 
make 
make install 
但最后编译生成的 avcodec.dll 还是有3.5MB ? 请问还需要在 configure 里加哪些参数,才能达到我所要求的裁减效果呢??

--enable-small


大哥,按照你的方法来做: 
./configure --enable-shared --disable-static --enable-memalign-hack --disable-encoders --disable-decoders --enable-decoder=h264 --enable-small 
make 
make install 
但最后编译生成的 avcodec.dll 还是有2620KB ? 请问还需要在 configure 里加哪些参数,才能达到我所要的裁减(精简到1MB左右)效果呢?? 
我现在是下载的ffmpeg-0.6.1的源代码。我在网上有看到可以把 avcodec.dll裁减到700多KB,不会吧???


--disable-avdevice 
--disable-avfilter 
--disable-network 
然后再 
--disable-everything 
最后再 
--enable-decoder=需要解码的codec格式 
--enable-decoder=xxxx 
... 
--enable-demuxer=需要解码的容器格式 
--enable-demuxer=xxxx


非常感谢楼上的高手!

这一两天终于把ffmpeg裁减好了,avcodec-52.dll 744KB,可以达到我们项目预期的需求.现将整个过程及遇到的问题和解决方法一一列举出来,以供大家日后做为参考: 
1.首先下载ffmpeg-0.6.1的源代码,PC端使用VS2008 + SP1的开发环境; 
2.搭建MinGW+MSYS的ffmpeg编译环境,这个可以参考网上很多这方面的文章.有个地方稍微提下,建议大家安装最新的MinGW环境,http://sourceforge.net/projects/mingw/files/ 到这个链接可以下载到最新版的MinGW.因为我发现如果GCC的版本太低(例如:3.4,2),编译出来的avcodec.dll在做encode编码的时候,ffmpeg会报错,提示ffmpeg在编译的过程中使用了版本太低的GCC编译器,建议>=4.2. 
我目前MinGW+MSYS的编译环境,使用的 GCC 是4.5.0, Make版本是 3.81 
3.配置及编译ffmpeg 
./configure --disable-static --enable-shared --enable- memalign-hack --enable-small --disable-encoders --disable-decoders --enable-decoder=h264 --enable-decoder=mpeg4 --enable-decoder=mjpeg --prefix=/e/ffmpeg-sdk/ 
make;make install 
这样,在E盘的ffmpeg-sdk目录下会有include头文件及bin目录下会有对应的avcodec/avformat等等dll和lib库. 
4.用VS2008调用ffmpeg库编写应用程序(使用方法可以参考网上的相关文章),这里提一下三个问题的解决: 
第一,解决:Cannot open include file: 'inttypes.h' 
更新ffmpeg之后,有时编译应用ffmpeg库的工程会发现提示: Cannot open include file: 'inttypes.h': No such file or directory 的出错信息,可通过如下方法解决: 
1、找到include目录中的/libavutil/common.h 
2、在"#define AVUTIL_COMMON_H"之后加入如下代码,同时删除"#include " 然后保存: 
#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) 
# define CONFIG_WIN32 
#endif 
#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(EMULATE_INTTYPES) 
# define EMULATE_INTTYPES 
#endif 
#ifndef EMULATE_INTTYPES 
# include  
#else 
typedef signed char int8_t; 
typedef signed short int16_t; 
typedef signed int int32_t; 
typedef unsigned char uint8_t; 
typedef unsigned short uint16_t; 
typedef unsigned int uint32_t; 
# ifdef CONFIG_WIN32 
typedef signed __int64 int64_t; 
typedef unsigned __int64 uint64_t; 
# else /* other OS */ 
typedef signed long long int64_t; 
typedef unsigned long long uint64_t; 
# endif /* other OS */ 
#endif /* EMULATE_INTTYPES */ 
第二,继'inttypes.h'之后的问题 'stdint.h'怎么解决? 
解决方法:经过测试,在VC++2008+SP1下可以将#include 注释掉,不会影响编译和连接。 
第三,是在Windows下环境使用ffmpeg库时发现报错 
error C3861: 'UINT64_C': identifier not found,怎么回事? 
解决方案: 
在/libavutil/common.h里加入定义如下: 
#ifndef INT64_C 
#define INT64_C(c) (c ## LL) 
#define UINT64_C(c) (c ## ULL) 
#endif

好了,就写这么多吧!希望大家可以互相学习,共同进步了 

Powered by Zoundry Raven

你可能感兴趣的:(VC笔记)