使用 FFmpeg,您可以:
- 使用预构建的 .lib/.dll 文件,使用 Visual Studio 生成的二进制文件将依赖于 av*.dll 文件
- 使用非 Microsoft 编译器将 FFmpeg 从源代码编译成静态库,然后链接到您的 Visual Studio 项目(在这种情况下请注意 LGPL/GPL 许可证)
您按照上面的第 1 项构建了您的项目。您必须使用和重新分发 av*.dll 依赖文件和您的二进制文件才能使其正常工作。
Zeranoe上的“静态”意味着库静态链接到二进制文件中,例如ffmpeg.exe
. 不要将此与.lib
链接到您的二进制文件的静态库混淆。Zeranoe 不提供此类服务。
在Zeranoe 上,您会找到这样的档案:
- “共享”ffmpeg-20120726-git-236ecc3-win32-shared.7z:
bin/avcodec-54.dll
bin/avutil-51.dll
- ETC
- “开发” ffmpeg-20120726-git-236ecc3-win32-dev.7z:
lib/avcodec.lib
lib/avutil.lib
“共享”存档具有 FFmpeg 构建的动态链接到 DLL 库。“Dev”存档具有 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”存档解压缩到dev
Visual Studio 项目的子目录中,并添加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 构建进行检查。样品和说明保持良好状态。
请注意,Win32
Visual Studio 中的构建假定您使用来自 Zeranoe 的 32 位文件。要构建 64 位版本,请分别下载相应的文件并设置 Visual C++ 项目,以进行构建x64
(或者,最好同时下载,设置两个配置并分别配置 include/lib 路径)。不匹配位数会导致错误,在下面的评论中提到。
2021 年 7 月 20 日更新:(从下面的评论中提取)Zeranoe 版本不再可用。一个好的且官方认可的替代方案是BtbN 构建的 Windows。本教程需要一个(...)-win64-gpl-shared.zip
or(...)-win64-lgpl-shared.zip
文件。