为 Visual Studio 开发构建 FFMPEG
Posted
技术标签:
【中文标题】为 Visual Studio 开发构建 FFMPEG【英文标题】:Building FFMPEG for Visual Studio development 【发布时间】:2016-07-28 11:00:08 【问题描述】:我正在尝试在 Visual Studio 2013 C++ 软件中使用 ffmpeg(最终作为 OpenCV 项目的一部分)——但现在我只是想获得基本的 FFMPEG 功能。通常,在 Visual Studio 中构建时,我使用多线程 DLL 运行时库构建 64 位软件。我已经使用http://ffmpeg.org/platform.html#Windows 的“使用 ... MinGW-w64 进行本机 Windows 编译”的一般说明构建了 ffmpeg(我在下面提供了一组更详细的步骤...)。
在我的系统上构建 ffmpeg 软件后,我尝试在 Visual Studio 2013 中创建一个简单的“hello world”项目。具体来说,我尝试实现http://dranger.com/ffmpeg/tutorial01.html 提供的初始教程文件。在构建项目时,我收到错误:
c:\msys64\usr\local\ffmpeg\libavutil\common.h(45): 致命错误 C1083: 不能 打开包含文件:'libavutil/avconfig.h':没有这样的文件或目录
以下是我构建 ffmpeg 和创建基本 Visual Studio 项目的详细步骤:
============ 构建ffmpeg ===============
-
从http://msys2.github.io下载并安装msys2-x86_64-20160205.exe
运行
update-core
以更新 Msys2 安装
跑pacman -Suu
(两次)完成更新(按照有关更新快捷方式等的说明进行操作)
然后我退出 MSys2 shell 并打开 MinGW-w64 Win64 Shell。在这个新外壳中:
使用pacman -S <package-name>
安装了以下包我安装的包列表是:make、pkg-config、diffutils、mingw-w64-x86_64-yasm、mingw-w64-x86_64-gcc、mingw-w64-x86_64-SDL , 混帐
然后我进入cd /usr/local
跑git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
我想构建这个 MSys64 文件夹的 ffmpeg 库“树外”。因此,在我的 Windows 机器的常规文件系统中,我在 C:\ffmpeg 创建了一个文件夹
回到 Win64 Shell,我 cd'd 到这个新文件夹:cd /c/ffmpeg
然后跑/usr/loca/ffmpeg/configure --enable-shared
然后make -r
最后是make install
现在,如果我不得不猜测,我的“缺陷”就在我调用 ffmpeg 的“配置”脚本时使用的选项中。我是否需要使用特定选项才能获取此处构建的 ffmpeg 库并将它们用作 Visual Studio 中的动态 (DLL) 库?
========== 配置我的 Visual Studio 项目 ============
这是我在 Visual Studio 中创建一个简单的 hello world 项目以查看 ffmpeg 是否正常工作的方法。
-
我在 Visual Studio 2013 中创建了一个新的 Visual C++“空项目”
然后我将项目属性配置如下:
一个。在 C/C++ => General => Additional Include Directories 中,我放了
C:\msys64\usr\local\ffmpeg
b.在 Linker=>General => Additional Library Directories 中,我指向了每个已构建的库文件夹(基本上我指向所有已构建的库,以确保我不会无意中错过关键的库) .名单如下:
C:\ffmpeg\libavcodec C:\ffmpeg\libavdevice C:\ffmpeg\libavfilter C:\ffmpeg\libavformat C:\ffmpeg\libavutil C:\ffmpeg\libswresample C:\ffmpeg\libswscale C:\ffmpegc。在 Linker=> Input => Additional Dependencies 中,我指向了特定的库(同样——我指向了所有存在的库)。名单是:
avcodec.lib avdevice.lib avfilter.lib avformat.lib avutil.lib swresample.lib swscale.lib然后我创建了一个名为“tut01.c”的新源文件,并从http://dranger.com/ffmpeg/tutorial01.c复制/粘贴了代码
然后按 F7 并得到上面指定的关于找不到 avconfig.h 的错误以上是我对在 Windows(顺便说一句,它是 Windows 10、64 位)和 Microsoft Visual Studio 2013 中工作所需遵循的步骤的最佳猜测。我应该改变什么来获得这个基本程序构建并运行?
【问题讨论】:
如果找不到头文件,编译器会抱怨包含目录有问题。目前与链接器或外部库无关。所以去项目属性页 -> 配置属性 -> VC++ 目录 -> 包含目录,添加你的标题目录。 @halfelf 感谢您的提示。问题是(我应该在我的帖子中提到这一点)我的 libavutil 文件夹中不存在 avconfig.h 标头。这就是为什么我认为我错误地配置了 ffmpeg 构建。 我明白了,很抱歉没有仔细阅读。在这种情况下,您可以简单地从 ffmpeg 源目录中找到并将其复制到应有的位置。但是,传统上,我们使用“--prefix=dir”选项配置这些库,以便所有库和头文件在构建后都在前缀目录中。 【参考方案1】:@halfelf,感谢您的回复。他们让我再次查看我的文件,我意识到我指向包含(和 lib)文件的错误位置。事实证明,在构建 ffmpeg 时,它放置在横向文件夹 /usr/local/include
和 /usr/local/bin
中,我猜是一组更完整的包含和库文件(包括 avconfig.h!)我将我的 Visual Studio 项目属性更新为指向解决该问题的这些文件夹。
但后来,我遇到了一个新的问题,'PIX_FMT_RGB24' 没有被识别。但是,我认为这与我使用的教程文件过时有关。我可以删除那些(和相关的)行,代码将构建和执行(尽管它没有做太多,因为删除了“钱”行代码)。但至少 ffmpeg 的基本功能似乎正在发挥作用。
【讨论】:
PIX_FMT_xxx
是旧的宏名称,改为AV_PIX_FMT_xxx
。检查libavutil/pixfmt.h
以获取可用的像素格式宏。
@halfelf 谢谢!这就是问题所在。做了一个替换,Tut01 现在编译并运行了!!以上是关于为 Visual Studio 开发构建 FFMPEG的主要内容,如果未能解决你的问题,请参考以下文章
未能为 Visual Studio 2017 构建 boost 1.68
[吃药HoloLens开发随笔] 构建并发布来使用Visual Studio开发
持续集成:Visual Studio 2008 上的非托管 C++