• 【FFMPEG】Windows下使用Visual Studio 2010编译ffmpeg全过程


    ffmpeg是一个开源的多媒体库,使用非常广泛。

    在linux下编译ffmpeg非常简单,而在windows下编译就不是那么容易了。一般在windows下使用MinGW的gcc toolchain进行编译,这样的话,因为ffmpeg的导出函数均是C风格,因而gcc编译的lib可以被vs链接。但是gcc的debug符号与vs的debug符号(*.pdb)是无法兼容的,因此我们用vs来开发基于ffmpeg的程序时无法深入ffmpeg内部进行debug,这不管对于学习还是工程使用都不是那么友好。因而,使用同一套编译系统好处多多。

    本篇博文向你展示从头到尾怎么在windows下用vs2010编译ffmpeg,以及一个基于ffmpeg的栗子。

    注:请不要用这篇博文的方法去尝试在VS2010以下版本编译ffmpeg,我试过在vs2005中编译,各种问题!官方也没有在vs2010以下版本中进行过编译测试。

    一,下载ffmpeg及第三方程序:

    1,ffmpeg官网: http://ffmpeg.org/  

    2,ffmpeg git 地址 : git://source.ffmpeg.org/ffmpeg.git ( 注意 :clone代码之前先在git命令行中设置!!!:git config --global core.autocrlf false )

    3,MinGW : http://www.mingw.org/ ,运行下载的MinGW安装管理器,包含msys。假设安装好后MinGW路径为:d:/MinGW ,则msys路径应为:d:/MinGW/msys 。将:d:/MinGW/bin和d:/MinGW/msys/1.0/bin加到系统path环境变量中;

    4,yasm : http://yasm.tortall.net/ , 改名叫yasm.exe,复制到:d:/MinGW/msys/1.0/bin 目录下;

    5,c99-to-c89 : https://github.com/libav/c99-to-c89/downloads , 将c99conv.exe和c99wrap.exe复制到:d:/MinGW/msys/1.0/bin 目录下;

    6,C99头文件inttypes.h和stdint.h : http://code.google.com/p/msinttypes/downloads/list ,将此两个头文件复制到: D:Program Files (x86)Microsoft Visual Studio 10.0VCinclude 目录下( 自行修改为自己的安装目录 );

    二,编译之前的设置:

    1,复制:d/MinGW/msys/1.0/msys.bat 到同目录下,改名叫做msys_vs2010.bat,在msys_vs2010.bat开头部分添加:call "D:Program Files (x86)Microsoft Visual Studio 10.0VCinvcvars32.bat" ;

    2,打开msys_vs2010.bat,切换到ffmpeg目录下。

    到这里为止,所有的编译之前的工作就完成了。

    三,配置编译:

    1,配置:ffmpeg编译配置选项很丰富,详细请运行“ . /configure --help > ffmpegcfg.txt ”查看其选项。这里我的选项是:

    静态库:./configure -- enable-static --enable-memalign-hack --prefix= ./vs2010_build --extra-cflags="-fno-common" --toolchain= msvc 
    动态库:./configure -- enable-shared --enable-memalign-hack --prefix= ./vs2010_build --extra-cflags="-fno-common" --toolchain= msvc

    2,编译:make & make install

    编译时间与机器性能相关,可能会很慢。

    至此在vs2010_build就生成了编译好的ffmpe库,有4个目录,bin/include/lib/share 。

    四,一个栗子:

    OK,ffmpeg编译成功,让我们以一个栗子结束这篇博文。

    在 vs2010_build/share/ffmpeg/examples 目录下有若干个示例。

    我们随便找一个 avio_reading.c 拖到我们的test_ffmpeg工程(vs2010),记得在这之前要配置include与lib路径(很简单,就不详细说了),链接库中加入: ws2_32.lib;libavcodec.a;libavdevice.a;libavfilter.a;libavformat.a;libavutil.a;libswresample.a;libswscale.a; 编译,链接,运行,OK!

    五,注意:

    1,在C++源文件中include ffmpeg头文件时需要加上:

    #ifdef __cplusplus 
    extern "C"{ 
    #endif

    //… includes

    #ifdef __cplusplus 

    #endif,

    2,ffmpeg使用的是C99,但是坑爹微软直到vs2012好像都还是C89,所以不排除使用中会有些宏会出问题。

  • 相关阅读:
    asp.net 取windows的所有进程
    ASP.NET页面的字符编码设置
    c# 检测cpu使用率[测试通过]
    三层业务类(DAL)必用的通用方法之一
    火狐最实用的几款插件介绍[含附件]
    c#生成一组不同的随机数的方法
    ASP.NET 缓存 Cache
    web.config中配置字符串中特殊字符的处理
    asp.net产生客户端Cookie与js操作Cookie大全
    jQuery 计时器(jquery timers)简单应用
  • 原文地址:https://www.cnblogs.com/huty/p/8517636.html
Copyright © 2020-2023  润新知