通过学习雷神的博客和视频,忙活了一下午加半晚上,终于完成了VC下FFmpeg开发环境的搭建,其实雷神的介绍已经很详细了,下面是结合雷神的材料和我在环境搭建中遇到的问题进行一下总结,并作出更加详细的搭建步骤,以便大家相互学习和以后方便自己查看。以下工程是在vs2010环境下。
• 新建控制台工程 ▫
打开VC++ ▫ 文件->新建->项目->Win32控制台应用程序
注意,在建工程的过程中一定要选中 附加选型:预编译头 这一项,见下图
• 拷贝FFmpeg开发文件
▫ 头文件(*.h)拷贝至项目文件夹的include子文件夹下 ▫ 导入库文件(*.lib)拷贝至项目文件夹的lib子文件夹下 ▫ 动态库文件(*.dll)拷贝至项目文件夹下
PS:如果直接使用官网上下载的FFmpeg开发文件。则可能还需要将MinGW安装目 录中的inttypes.h,stdint.h,_mingw.h三个文件拷贝至项目文件夹的include 子文件夹下。 ( 如果没有安装MinGW,可以自行搜索安装,这里不再介绍。)然后手动把这3个文件加入工程的头文件中,在_mingw.h文件的结尾处(在#endif 一行之前)添加了一行:
#define __restrict__
如图
• 配置开发文件 ▫
打开属性面板 解决方案资源管理器->右键单击项目->属性 ▫ 头文件配置 配置属性->C/C++->常规->附加包含目录,输入“include”(刚才拷贝 头文件的目录) ▫ 导入库配置 配置属性->链接器->常规->附加库目录,输入“lib” (刚才拷贝库文 件的目录) 配置属性->链接器->输入->附加依赖项,输入“avcodec.lib; avformat.lib; avutil.lib; avdevice.lib; avfilter.lib; postproc.lib; swresample.lib; swscale.lib”(导入库的文件名)
• 测试
如果是C语言中使用FFmpeg,则直接使用下面代码 # include " libavcodec / avcodec.h " 如果是C++语言中使用FFmpeg,则使用下面代码
#define __STDC_CONSTANT_MACROS
extern "C" { #include " libavcodec / avcodec.h " }
main()中调用一个FFmpeg的接口函数 例如下面代码打印出了FFmpeg的配置信息
int main( int argc , char* argv [])
{
printf ( " % s", avcodec_configuration ());
return 0;
}
修改好以后主函数文件是这样的
// ffmpegtest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "stdafx.h" #define __STDC_CONSTANT_MACROS extern "C" { #include "libavcodec\avcodec.h" }; int _tmain(int argc, _TCHAR* argv[]) { printf ( " % s", avcodec_configuration ()); return 0; }
然后找到错误的代码位置
extern __inline__ intmax_t __cdecl imaxabs (intmax_t j) {return (j >= 0 ? j : -j);} imaxdiv_t __cdecl imaxdiv (intmax_t numer, intmax_t denom); /* 7.8.2 Conversion functions for greatest-width integer types */ intmax_t __cdecl strtoimax (const char* __restrict__ nptr, char** __restrict__ endptr, int base); uintmax_t __cdecl strtoumax (const char* __restrict__ nptr, char** __restrict__ endptr, int base); intmax_t __cdecl wcstoimax (const wchar_t* __restrict__ nptr, wchar_t** __restrict__ endptr, int base); uintmax_t __cdecl wcstoumax (const wchar_t* __restrict__ nptr, wchar_t** __restrict__ endptr, int base);
如果运行无误,恭喜你,代表FFmpeg已经配置完成啦1