(如果有转载的请注明哈哈)
这个ffmpeg的使用看的是一头雾水,前两天还在一个劲地编译,也没编译成功。
请教了一个同学,说这个库很强大,一般不需要编译就可以使用。
这次直接从官网上下的 http://ffmpeg.zeranoe.com/builds/的
ffmpeg-20130906-git-bcd1c20-win64-static.7z (静态编译)
ffmpeg-20130906-git-bcd1c20-win64-shared.7z (动态编译的bin下面有相应的dll文件)
ffmpeg-20130906-git-bcd1c20-win64-dev.7z (有库文件)
打不开的或者懒得找的,直接去下我整合好了的 http://download.csdn.net/detail/kuaile123/6232827(这是64位的)
(不好意思,后面才发现上传的那个里面的bin是static的,这里又重新发了一个http://download.csdn.net/detail/kuaile123/6237069)
里面的bin,include,lib都可以直接用,按平时配置vs的c++路径去配置就好了,注意博主的是64位的,按自己电脑来下载。
而且从官网上下载的文件缺少inttypes.h文件,上面的资源里面已经放进去了,编译不会出错,缺少的可以自己去下载。
下载下后两个,解压,需要用到的为ffmpeg-20130906-git-bcd1c20-win64-shared下的bin,ffmpeg-20130906-git-bcd1c20-win64-dev下的include和lib
用vs2010 新建工程,需要配置 include和lib,为ffmpeg-20130906-git-bcd1c20-win64-dev下的include和lib
配置 Executable Directories 的路径为 ffmpeg-20130906-git-bcd1c20-win64-shared下的bin
(但是这样运行程序时会出现缺少dll 文件程序无法启动,所以最好把dll文件放于工程下)
在程序中添加头文件,例如:
extern "C"{ #include <libavutil/opt.h> #include <libavcodec/avcodec.h> #include <libavutil/channel_layout.h> #include <libavutil/common.h> #include <libavutil/imgutils.h> #include <libavutil/mathematics.h> #include <libavutil/samplefmt.h> #include <libavformat/avformat.h> #include <libswscale/swscale.h> };
注意一定要加 extern "C"{},因为dll中封装的是.c 文件,函数接口不对,如果不添加会出现无法识别的外部符号。如:
error LNK2001: unresolved external symbol "void __cdecl av_close_input_file(struct AVFormatContext * 等
添加依赖的lib文件
#pragma comment(lib,"avcodec.lib") #pragma comment(lib,"avdevice.lib") #pragma comment(lib,"avfilter.lib") #pragma comment(lib,"avformat.lib") #pragma comment(lib,"avutil.lib") #pragma comment(lib,"postproc.lib") #pragma comment(lib,"swresample.lib") #pragma comment(lib,"swscale.lib")
还有注意有时编写代码会出现如下等:
error C3861: 'avcodec_decode_video': identifier not found
这是由于 ffmpeg版本问题,这个函数式旧版中的,新的版本里是'avcodec_decode_video2'
所以要下载最新版本,并参考 \ffmpeg-20130906-git-bcd1c20-win64-XX\doc\example 示例里面函数的用法
我用了 decoding_encoding.c 里面的一个函数调通了,可以用。