Windows下MinGW编译ffmpeg库

时间:2022-09-06 01:52:14

主要编译步骤

1. 安装MinGW,推荐使用官网下载安装,然后设定默认路径,continue键进入包安装界面,未安装前所有方框标记都是空的,右键选择“mark for installation”即可(安装包并不都得安装,全装也没什么大碍,多花点时间安装而已。选择好安装包后点击菜单项Installation,选择子项Applie changes进行安装)。

2. 测试MinGW,添加一用户环境变量,变量名为PATH,变量值为安装路径\MinGW\bin。重启电脑在命令终端输入gcc –version,如果返回正确说明环境配置已经配置成功。

3. 从yasm官网下载yasm, 如yasm-1.2.0-win32.exe, 重命名为yasm.exe 放到 安装目录\MinGW\bin目录下。 http://yasm.tortall.net/Download.html

4. 下载ffmpeg源码,解压后放到MinGW的安装目录/msys/1.0/home/用户名,文件夹下。

5. 运行安装目录/msys/1.0/msys.bat,弹出的控制台默认路径是放ffmpeg的源码路径。

6. 执行./configure –enable-shared –enable-static –enable-memalign-hack –prefix=/installdir 该步骤会消耗一些时间,一般不会出问题,没问题的话会正常配置完成。

7. make, make install. 成功后会生成对应的头文件和库文件,大功告成。

**

8. TODO – 尝试disable一些功能简化后的配置命令。

Try 1(avcodec可以从11M 减小到2.5M左右,如果想要进一步减小库文件可以加上 –enable-small,不过这个会影响到解码性能,如需要h265的编码需要加上–enables-libx265,h265解码是–enable-decoder=hevc):

动态库

./configure  --disable-static --enable-shared --enable-memalign-hack --disable-debug --disable-network --disable-muxers  --disable-ffserver --disable-ffplay --disable-filters --disable-devices --disable-protocols --disable-demuxers --disable-muxers --disable-encoders --disable-decoders --disable-parsers --disable-bsfs --enable-decoder=h264 --disable-avfilter --disable-swresample --disable-zlib --disable-bzlib --disable-ffmpeg --disable-hwaccels --disable-avdevice --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-mipsfpu --disable-mipsdsp --disable-audiotoolbox --disable-vda --disable-securetransport --disable-sdl --disable-xlib --disable-mipsdspr2 --disable-gpl --prefix=/home/output

静态库

./configure  --enable-static --disable-shared --enable-memalign-hack --disable-debug --disable-network --disable-muxers  --disable-ffserver --disable-ffplay --disable-filters --disable-devices --disable-protocols --disable-demuxers --disable-muxers--disable-encoders --disable-decoders --disable-parsers --disable-bsfs --enable-decoder=h264 --disable-avfilter --disable-swresample --disable-zlib --disable-bzlib --disable-ffmpeg --disable-hwaccels --disable-avdevice --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-mipsfpu --disable-mipsdsp --disable-audiotoolbox --disable-vda --disable-securetransport --disable-sdl --disable-xlib --disable-mipsdspr2 --disable-gpl --prefix=/home/output1

静态库的使用说明: 使用生成的.a库,以上面静态库为例。

#ifdef __cplusplus
extern "C" {
endif

#include "ff_include/libavformat/avformat.h"
#include "ff_include/libavcodec/avcodec.h"
#include "ff_include/libavutil/avutil.h"
#include "ff_include/libswscale/swscale.h"

#pragma comment(lib,"ff_lib/libavformat.a") 
#pragma comment(lib,"ff_lib/libavutil.a") 
#pragma comment(lib,"ff_lib/libswscale.a")
#pragma comment(lib,"ff_lib/libavcodec.a") 

//以下库是必须也要加载的(静态库才需要下面的*.a文件),在/MinGW/lib文件夹下拷贝出来
#pragma comment( lib, "ff_lib/libgcc.a") 
#pragma comment( lib, "ff_lib/libmingwex.a") 
#pragma comment( lib, "ff_lib/libcoldname.a") 
#pragma comment( lib, "ff_lib/libmsvcrt.a") 
#pragma comment( lib, "ff_lib/libiconv.a") 

#ifdef __cplusplus
}
#endif

注意事项

ps:

1. MinGW的安装比较关键。

2. 有的教程有这步,修改启动MinGW终端脚本文本方式打开msys.bat,在第一行加上call “C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\vcvars32.bat” 实测不加也可以。

3. 使用的时候需要加入extern “C”,不然可能会提示Link2001无法解析的外部符号问题。

  #ifdef __cplusplus 
     extern "C" {
        #endif "
            #include "ffmpeg_include/libavformat/avformat.h"
            #include "ffmpeg_include/libavcodec/avcodec.h"
            #include "ffmpeg_include/libavutil/avutil.h"

            #pragma comment(lib,"ffmpeg_lib/avformat.lib") 
            #pragma comment(lib,"ffmpeg_lib/avdevice.lib") 
            #pragma comment(lib,"ffmpeg_lib/avfilter.lib") 
            #pragma comment(lib,"ffmpeg_lib/avutil.lib") 
            #pragma comment(lib,"ffmpeg_lib/swresample.lib") 
            #pragma comment(lib,"ffmpeg_lib/swscale.lib") 
            #pragma comment(lib,"ffmpeg_lib/avcodec.lib") 
    #ifdef __cplusplus 
    }
    #endif

4. 需要注意的是区分开32bit和64bit编译。

5. 链接器工具错误 LNK2026, 模块对于 SAFESEH 映像是不安全的, /SAFESEH 已指定,但某一模块与安全异常处理功能不兼容。 如果要将此模块用于 /SAFESEH,则需要使用 Visual C++ .NET 2003(或更高版本)编译器重新编译该模块。—- 解决办法,项目的”属性页”-> “链接器”->”命令行”, 在其他选项中输入 /SAFESEH:NO ,然后应用确定。

6. 看有些评论讲关掉多线程会降低cpu使用率,测试disable pthreads和disable w32threads后,cpu使用率飙升,目前不清楚原因。

7. 若想编译x64的库,需要多添加命令 –arch=x64(注意:–arch=x86_64这条命令无效,不能成功更改arch为64),即可。

下载库链接:http://download.csdn.net/detail/alger_magic/9669846