- A+
FFMPEGP 入门之所以很难,很大一部分是环境难以搭配。
有时候照着别人的资料明明完全一样,还是不行。
这不光是环境搭配的问题,还有FFM存在着各个版本,且不兼容导致的。
还有一个是 头文件、DLL、LIB 要对应一致才可以。
另外一开始肯定不熟悉,不直接引入哪些头文件
自己编译的话,可能还要区分DEBUG、RELEASE版本
这些导致了,FFM很难入门,可能你花了很长时间,自己搭配环境时,总是出现这样那样的问题。
我也是在搭建环境时,遇到了很多问题,现在记录下来,也供大家做个参考。
MFC-FFM环境搭建
首先下载编译好的,我就不再费精力编译了,你如果想和我一样省事,可以下载这个编译好的。
下载地址:https://github.com/gudianxiaoshuo/FFMPEGP
我之前用过其它版本的,然后再用这个时候,发现很多问题,后来研究,是版本不一致导致的。所以将工程中,之前版本的ffm头文件、DLL、LIB都删除了,尤其是工程目录下的LIB,容易忽略掉。
目的就是,只用一个版本,不要多版本冲突,否则,你死都不知道怎么死的。
好,现在已经将其他版本清理干净了,开始环境搭建。
1 项目属性设置
VC++目录设置
avcodec.lib
avdevice.lib
avfilter.lib
avformat.lib
avutil.lib
postproc.lib
swresample.lib
swscale.lib
2 添加头文件
extern "C" //一定要以C的形式,加入头文件
{
#include "libavcodecavcodec.h"
#include "libavformatavformat.h"
#include "libswscaleswscale.h"
#include "libavdeviceavdevice.h"
#include "libavutilaudio_fifo.h"
};
//因为在项目属性中,已经设置了头文件ffminclude目录,所以这里头文件,会从ffminclude目录里查找
3 运行
目前来看,你添加了头文件,添加了LIB
写了一段示例程序
那应该可以了,但你运行时,有可能会碰到这样的链接错误
: error LNK2019: 无法解析的外部符号 "void __cdecl av_free(void *)" (?av_free@@YAXPAX@Z),该符号在函数
当然,如果没有这种错误,正常运行,那就没问题了。
但是,如果你和我一样,总是遇到最坏的情况,就像赶公交,急急忙忙赶到达公交站点,而要坐的那趟公交正好刚走,不得不再等一循环。
如果遇到这种情况,可以试试这种方式,添加LIB
//以C的方式引入
extern "C"
{
#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, "swresample.lib")
#pragma comment (lib, "swscale.lib")
};
如果,你还是遇到错误,就像我一样,总是遇到最坏的情景。
提示没有对应的DLL,这可能就是版本冲突了。
不同版本的LIB,需要的DLL文件名不同。
我就遇到了这个问题,后来查了下,原来我工程主目录下,有别的版本的LIB文件,这样,工程加载时,先搜索的工程主目录下的LIB,找到了就不再搜索别的了,导致了我用的这个版本的LIB没有正确加载。
这就是一开始说的,一定要清理干净其它版本的文件和DLL以及LIB,否则就够你头疼的,尤其是刚入门的,可能你都找不到到底哪里错了,明明和资料配置一样,还是错误,以致于让你怀疑人生。