最近学习ffmpeg相关知识,参照雷神的博客,完成YUV420P到RGB32格式的转换,具体的步骤就不说了,可以自行百度大神们的教程,但是在整个工程的配置以及运行过程中遇到了很多问题,下面一一总结:
开发环境:32位 Windows7操作系统、VS2012
1.fatal error C1004: 发现意外的文件尾。解决方法:加入代码#define __STDC_CONSTANT_MACROS。
2.ffmpeg\include\libavutil\common.h(34): fatal error C1083: 无法打开包括文件:“inttypes.h”。这个问题在此处修改后还会在其他文件中出现,主要原因是inttypes.h文件未找到。这个文件主要用于整数类型的定义。查询相关资料可知,stdint.h包含了此文件。因此可以把引用inttype.h位置的代码更换为stdint.h。如果不想引入额外的代码,可以找到inttype.h文件,然后将其放在libavtuitl文件夹下,随后引用。
3.error LNK2019: 无法解析的外部符号 _av_freep,该符号在函数 _main 中被引用。这类错误不仅会在当前的工程中出现,其他时候也会出现,主要原因是没有工程中没有添加lib库。虽然将lib库等拷贝到了工程的文件夹下面,但是还需要添加依赖项(和Android相似)。步骤:项目——属性——配置属性——链接器——输入——附加依赖项,编辑依赖项,添加
avcodec.lib
avdevice.lib
avfilter.lib
avutil.lib
avformat.lib
swscale.lib
swresample.lib
postproc.lib
点击Apply——OK。这里的库请根据实际需要添加,我的只是举例。
4.avutil56.dll is missing。这里比较明显的就是dll文件缺失,直接从ffmpeg官网下载shared版本,然后把里面的dll拷贝到项目的根目录下,重新添加库等。清理项目重新编译即可。
5.头文件与库的版本不匹配。这里注意下载的时候dev版本和shared版本的ffmpeg一定要匹配,否则可能会发生一些意想不到的错误。dev版本包含了头文件和lib库等,shared版本包含了dll文件。
6.操作系统的位数和下载的ffmpeg版本不匹配。如果当前使用64位的ffmpeg版本,而机器是32位,有可能出现内存不可读等问题,因此请确认机器的位数与下载的ffmpeg版本一致。
以上为本次编写程序遇到的问题,有几点自己不止一次遇到,因此记录下来,方便后续的使用。