您的位置:首页 > 其它

windows环境下搭建ffmpeg开发环境

2015-01-04 20:02 519 查看
ffmpeg是一个开源、跨平台的程序库,可以使用在windows、linux等平台下,本文将简单讲解windows环境下ffmpeg开发环境搭建过程,本人使用的操作系统为windows 7,集成开发环境为Visual Studio 2005,ffmpeg版本为2.2。有人可能会说都什么年代了,还VS 2005,现在VS
2010/2012/2013都出了。本人电脑也安装了VS2010,每次打开,伴随着硬盘指示灯的闪烁,以及硬盘的吱吱响声,过了许久才弹出闪屏页面,此时你的思绪可能已经飘到了南极,启动一次实在太慢了,完全老牛拉车的感觉,所以后续VS2012/2013就都没有再安装使用了。个人觉得VS2005/2008比较锐,相对轻巧些,启动速度快,当然很多快捷键用着也习惯了。

下面从一个非常简单的ffmpeg例子着手,讲一下开发环境搭建过程:
1. 打开VS编辑器,新建一个win 32 c++控制台应用程序。
2. 进入ffmpeg源码下的doc/examples文件夹,找到metadata.c文件,该文件是一个独立demo,运行结果为打印音视频媒体文件基本信息。该文件体积还不到2k,代码行数在这几个demo里最少,看起来也容易懂。下图为metadata.c文件源码,打开该文件,拷贝里面的代码到我们新建的win
32工程,此时如果尝试编译上述代码时,编译器会报各种各样的错误,主要错误原因还是ffmpeg在windows环境下的各种水土不服,在linux环境下好很多,没有这么多的什么数据类型不识别、宏定义缺失等等错误,下面根据错误类型,设置工程并修改上述代码,以完成正确编译。



(1)设置工程头文件及lib库依赖。ffmpeg的头文件和lib库可以自己编译得到,不过本人没有尝试,而是直接到这里下载了已编译好的ffmpeg
windows相关版本,解压后得到下述文件:





拷贝其中的include头文件、lib库文件以及bin目录下的dll文件到自己的工程下,然后在工程属性中设置附加包含目录:$(ProjectDir)\include和附加库目录:$(ProjectDir)\lib,这个设置很简单了。此时工程目录如下图所示:



(2)此时编译工程会有如下图所示错误,解决方法就是定位到该错误,直接将其注释即可。



(3)再次编译工程,会有如下图所示错误:



定位错误后发现还是common.h头文件有问题,解决方法为在刚才注释的下面,新增下述代码:

[align=left]#ifndef INT64_C[/align]
#define INT64_C(c)
(c ## LL)
#define UINT64_C(c)
(c ## ULL)
[align=left]#endif[/align]

(4)如果此时再次编译工程,还是会有错误,错误原因是我们新建的win 32 c++工程直接调用ffmpeg的c函数库,导致c函数无法解析,对于这样由于c++和c函数名编译后命名机制不同导致无法解析的问题,只需在引用c函数库时添加extern "C"即可,当然还有引用lib库。修改后的代码如下:

[cpp] view
plaincopy





#include "stdafx.h"

#include <stdio.h>

#include <stdlib.h>

extern "C"

{

#include <libavformat/avformat.h>

#include <libavutil/dict.h>

}

#pragma comment(lib, "avformat.lib")

#pragma comment(lib, "avutil.lib")

int main ()

{

AVFormatContext *fmt_ctx = NULL;

AVDictionaryEntry *tag = NULL;

int ret = 0;

av_register_all();

if ((ret = avformat_open_input(&fmt_ctx, "iphone.mp3", NULL, NULL)))

{

return ret;

}

while ((tag = av_dict_get(fmt_ctx->metadata, "", tag, AV_DICT_IGNORE_SUFFIX)))

{

printf("%s=%s\n", tag->key, tag->value);

}

avformat_close_input(&fmt_ctx);

system("pause");

return 0;

}

此时可以顺利编译通过了,运行结果如下:



当然,随着开发的深入,在使用uint8_t、int64_t等数据类型时,编译器会报如下错误:fatal error C1083: Cannot open include file: 'stdint.h': No such file or directory,即找不到相关头文件,该头文件的压缩包可以在我上传的工程文件目录内找到,解压缩后将两个头文件拷贝至Microsoft
Visual Studio 8/vc/include目录即可。

工程下载链接:http://download.csdn.net/detail/u013085897/7428719
由于工程运行依赖的几个dll体积比较大,所以在上传工程时本人将其删掉了,该dll可以到文中提到的链接下载。即:
http://ffmpeg.zeranoe.com/builds/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: