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.0\VC\include 目录下( 自行修改为自己的安装目录 );

二,编译之前的设置:

1,复制:d/MinGW/msys/1.0/msys.bat 到同目录下,改名叫做msys_vs2010.bat,在msys_vs2010.bat开头部分添加:call "D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.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,所以不排除使用中会有些宏会出问题。

【FFMPEG】Windows下使用Visual Studio 2010编译ffmpeg全过程的更多相关文章

  1. Windows下使用Visual Studio 2010编译ffmpeg全过程

    在visual studio 2010中调用ffmpeg http://blog.sina.com.cn/s/blog_4178f4bf01018wqh.html Windows下使用Visual S ...

  2. Windows下使用Visual Studio 2010 编译ffmpeg全过程

    (注意:请务必先阅读:七,后记补充:) ffmpeg是一个开源的多媒体库,使用非常广泛. 在linux下编译ffmpeg非常简单,而在windows下编译就不是那么容易了.一般在windows下使用M ...

  3. 在 Windows下用 Visual Studio 编译 OpenSSL 1.1.0

    到OpenSSL官方网站下载OpenSSL源代码包 1.下载 openssl-1.1.0.tar.gz 2.安装 ActivePerl, 可以到http://www.activestate.com/a ...

  4. DUIEngine使用Visual Studio 2010编译Debug_Dll版有关Error MSB3073错误解决方案

    在使用Visual Studio 2010编译DUIEngine的Debug_Dll版如果遇见如下错误: 错误 64 error MSB3073: 命令“copy D:\SomePath\DUIEng ...

  5. Visual Studio 2010编译时总是提示"调用目标发生了异常"的解决

    现象: 无论建立的是Win32 Console的解决方案,还是MFC的解决方案,重新打开Visual Studio 2010之后,编译时总是提示“调用的目标发生了异常” 解决: 1. 关闭Visual ...

  6. Windows 安装 Microsoft Visual Studio 2010

    Windows 安装 VS2010 我的电脑系统:Windows 10 x64位 我要安装的Microsoft Visual Studio 是:VS2010 注意: VS2010 没有专门的64位版. ...

  7. cryptopp开源库的使用(零):windows下使用visual studio编译

    编译相当简单:打开目录下的sln文件直接编译即可,官方支持到vc2012,我使用vs2013也没有错误,优秀的开源库总是便于使用. 编译的时候注意运行库得选择需要跟使用该库的保持一致,否则会出现重定义 ...

  8. Windows下使用Visual Studio Code搭建Go语言环境

    1.安装GO语言   下载地址:    https://golang.org/dl/   Windows下直接运行安装GO语言即可.     安装成功.   安装完毕GO语言后,需要添加GOPATH环 ...

  9. QT5.7.0在win10下使用visual studio 2015编译(目标平台 xp)

    环境:win10+vs2015+QT5.7.0 目标:编译出能在windows xp上运行的QT 通过baidu和bing找出来的结果没有一个能成功运行,大部分都能编译成功,并完美解决“exe不是有效 ...

随机推荐

  1. 洛谷P2279 消防局的设立【树形dp】

    题目:https://www.luogu.org/problemnew/show/P2279 题意:一棵树.在节点处建消防站,可以覆盖与他距离在2之内的节点.问最少要建多少个消防站,可以覆盖所有的节点 ...

  2. Tslib配置文件ts.conf介绍

    Tslib 的配置文件ts.conf 是个十分重要的部分, module_raw inputmodule pthres pmin=1module variance delta=30module dej ...

  3. Flutter布局3-----Center

    Center 居中的布局 只能有一个chlid,但是可以用container包含好多子child,继承自Align. 用于将其子项与其自身对齐,并根据子级的大小自行调整大小. 如果它的尺寸受到约束且[ ...

  4. 解决GitHub下载速度太慢的问题

    更改hosts文件: Windows 更改C:\Windows\System32\drivers\etc\hosts文件,在文件中追加219.76.4.4 github-cloud.s3.amazon ...

  5. 031_检测 MySQL 服务是否存活

    #!/bin/bash#host 为你需要检测的 MySQL 主机的 IP 地址,user 为 MySQL 账户名,passwd 为密码#这些信息需要根据实际情况修改后方可使用 host=127.0. ...

  6. C++基础--if/else和switch/case的区别

    if和switch的区别: 一.语句的格式: if/else的写法格式如下: int nA, nB; scanf_s("%d", &nA); //输入整数并赋值给变量a s ...

  7. [USACO5.5] 矩形周长Picture

    https://www.luogu.org/problemnew/show/P1856 1.每个矩形由两条横向边和两条纵向边组成. 2.对于横向边,按纵坐标排序.设当前讨论的边为 A [s , t] ...

  8. qemu for win64 下载

    下载地址:https://qemu.weilnetz.de/w64/ 安装完成后,将安装目录加入到系统环境变量.

  9. springboot+druid+sqlite遇到的问题

    1.springboot中使用druid查询sqlite报错getFetchDirection error ResultSet closed https://blog.csdn.net/u011943 ...

  10. zabbix监控项整理Items-key

    agent.hostname:hostname,字符串 agent.ping:可用性检查,可用返回1:不可用返回空 agent.version:agent程序的版本,返回字符串 kernel.maxf ...