我想做的是使用 msvc++ 制作一个示例应用程序,它将输入作为视频文件并对其进行解码。我希望使用我的应用程序中使用的 ffmpeg 函数完成所有解码。我阅读了 dranger 的教程但无法实现它,任何帮助将不胜感激。
1 回答
你有两个选择:
- 您可以自己构建源代码。
- 您可以使用 dll 下载“已构建的版本”。
如果我是你,我会选择第二个选项。这是我开始体验 ffmpeg 时所做的事情。如果您从未构建过源代码,构建可能会很痛苦。
你可以从这里找到最新的 ffmpeg 版本 (你应该下载“开发”版本)。
将此文件放入VisualStudio20xx/Projects/yourProjectName/yourProjectName/
下载后,您应该向 MSVC 显示标头和 .lib 文件的目的地。转到项目 -> 属性 -> 配置属性 -> C/C++ -> 常规,然后将“其他包含目录”设置为 ffmpeg/include
这应该为 ffmpeg 设置包含文件。
对于 .lib 文件:
项目 -> 属性 -> 配置属性 -> 链接器 -> 常规设置“附加库目录”为 ffmpeg/lib
这应该设置 .lib 文件。
现在应该能够通过以下方式包含 ffmpeg 库
extern "C"
{
#include <libavcodec/avcodec.h>
}
*(!)如果您在这些步骤之后收到数千个 LNK2001 链接器错误,您应该为您的包含添加一些编译指示注释。我不确定这些评论是做什么的,你可以搜索一下。但它是 MSVC 理解的东西。
例如,
#pragma comment (lib,"avcodec.lib")
这个 pragma 注释也应该在外部“C”范围内。
*(!)如果你得到这个编译错误:'UINT64_C': identifier not found
您可以使用此宏作为解决方法:
#ifndef __STDC_CONSTANT_MACROS
#define __STDC_CONSTANT_MACROS
#endif
现在关于编码/解码的东西,你可以检查我的这个问题,其中包含一个代码
- 将文件解复用为数据包
- 将数据包解码为帧
- 将帧编码成包
- 将数据包复用到一个文件中。
我从艰难的过程中学到了东西,但代码的注释很好,因此我认为你可以理解它究竟是如何/如何克服这个过程的。