关于
ffmpeg
在
windows
上的编译,在
www.ffmpeg.com.cn
上有详细的讲解,在成功编译好
ffmpeg
后,便在
MSVC
中编译
ffmpeg
自带的实例
output_example.c
。
首先自己在
MSVC
下建立一个空的控制台的应用程序,将
output_example.c
加入到工程中。由于在
MSVC
中是使用编译
ffmpeg
时生产的
.lib
和
.dll
文件,所以我们需要连接它们。在这里我们需要
avcodec-51.lib
、
avformat-51.lib
和
avutil-49.lib
这三个静态库,故在我们编译工程之前就将它们加到工程中。
编译会发现提示:
Cannot open include file: 'inttypes.h': No such file or directory
的出错信息,可通过如下方法解决:
1 、找到 include 目录中的 ffmpeg\common.h
2 、在 “#define COMMON_H” 之后加入如下代码,同时删除 “#include <inttypes.h>” 然后保存:
#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
# define CONFIG_WIN32
#endif
#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(EMULATE_INTTYPES)
# define EMULATE_INTTYPES
#endif
#ifndef EMULATE_INTTYPES
# include <inttypes.h>
#else
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
# ifdef CONFIG_WIN32
typedef signed __int64 int64_t;
typedef unsigned __int64 uint64_t;
# else
typedef signed long long int64_t;
typedef unsigned long long uint64_t;
# endif
#endif
1 、找到 include 目录中的 ffmpeg\common.h
2 、在 “#define COMMON_H” 之后加入如下代码,同时删除 “#include <inttypes.h>” 然后保存:
#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
#
#endif
#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(EMULATE_INTTYPES)
#
#endif
#ifndef EMULATE_INTTYPES
#
#else
#
#
#
#endif
#define inline __inline
#endif
这个连接错误(注意要是没有将开头说的那三个库先加入,这儿出现的连接错误更多)。
分析后知道错误是由第470行
snprintf(oc->filename, sizeof(oc->filename), "%s", filename);
引起的,解决方案如下:
MSVC 2005:
修改为_snprintf_s(oc->filename, _countof(oc->filename), 1024, "%s", filename);
MSVC 6.0
修改为_snprintf(oc->filename, sizeof(oc->filename), "%s", filename)。