在Visual Studio中使用FFmpeg

我正在尝试在Visual Studio 2010中的C ++项目中使用FFmpeg。我想将这些库作为静态链接文件包含在内。 像libavcodec / api-example.c这样的简单程序在错误视图中编译时没有错误,也没有链接器错误。 但是,启动应用程序后出现一个消息框,说avutil-51.dll丢失。 你有什么提示如何解决这个问题?

我使用了http://ffmpeg.zeranoe.com/builds/的最新开发版本。 然后我指定include作为附加包含目录,avcodec.lib; avfilter.lib; avformat.lib; avutil.lib作为额外的依赖关系,lib作为附加的库目录。

用FFmpeg你可以:

  1. 使用预先构建的.lib / .dll文件,用Visual Studio生成的二进制文件将依赖于av * .dll文件
  2. 使用非Microsoft编译器将FFmpeg从源代码编译到静态库中,然后链接到您的Visual Studio项目(在这种情况下请介绍LGPL / GPL许可证)

您按照上面的第1项建立了您的项目。 你必须使用你的二进制文件来重新分配av * .dll依赖文件才能使它工作。

Zeranoe上的“Static”意味着库被静态链接到像ffmpeg.exe这样的二进制文件中。 不要混淆这与链接到你的二进制文件的静态.lib库。 Zeranoe不提供这样的。

在Zeranoe你会发现这样的档案:

  • “共享”ffmpeg-20120726-git-236ecc3-win32-shared.7z:
    • bin/avcodec-54.dll
    • bin/avutil-51.dll
    • 等等
  • “Dev”ffmpeg-20120726-git-236ecc3-win32-dev.7z:
    • lib/avcodec.lib
    • lib/avutil.lib

“共享”档案有FFmpeg动态链接到DLL库。 “开发”档案有lib文件,您可以在您的项目中使用它们链接到它们,以ffmpeg.exe共享档案文件的方式。

所以,你的Visual Studio项目可以像这样简单( 在这里浏览完整源代码 ):

 extern "C" { // NOTE: Additional directory ..\zeranoe.com\dev\include gets to the files #include "libavcodec\avcodec.h" } // NOTE: Additional directory ..\zeranoe.com\dev\lib gets to the files #pragma comment(lib, "avcodec.lib") // NOTE: Be sure to copy DLL files from ..\zeranoe.com\shared\bin to the directory of // the FFmpegApp.exe binary int _tmain(int argc, _TCHAR* argv[]) { _tprintf(_T("Trying avcodec_register_all... ")); avcodec_register_all(); _tprintf(_T("Done.\n")); return 0; } 

您将“Dev”档案文件解压缩到Visual Studio项目的dev子目录中,并且将在其他包含路径中添加dev\include 这将足以构建二进制文件,并将依赖于av*.dll

在这里输入图像说明

这是当您提取“共享”档案,并将DLL从它的bin复制到您的二进制文件的目录。 而你的应用程序将从那里工作:

 C:\FFmpegApp\Release>FFmpegApp.exe Trying avcodec_register_all... Done. 

2016年1月20日更新 :存储库中的项目升级到Visual Studio 2013(旧VS 2010代码),并检查当前Zeranoe生成。 样本和说明保持良好的信誉。

请注意,Visual Studio中的Win32版本假定您使用Zeranoe的32位文件。 要构建64位版本,请下载相应的文件并分别设置Visual C ++项目,以构建x64 (或者,最好的,同时下载,设置两个配置以及分别配置include / lib路径)。 如果不匹配,会导致错误,在下面的评论中提到。