c++ 调用 ffmpeg 编程

(如果有转载的请注明哈哈)

这个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 里面的一个函数调通了,可以用。


你可能感兴趣的:(C++,ffmpeg,VS2010)