Windows 下使用 ffmpeg 库

2020-04-22 09:09:21 浏览数 (1)

今天我们来聊聊如何在Windows下使用ffmpeg库进行音视开发。一般情况下我很少在Windows下使用ffmpeg, 最主要的原因是在Windows下编译ffmpeg没有在Linux/Mac下编译方便。

不过相对来说还是使用 Windows 的同学比较多,为了方便他们可以更顺利的学习音视频开发,因此今天我们就来看看如何在 Windows 搭建使用 ffmpeg 的开发环境。

在Windows下搭建 ffmpeg 开发环境可以分为以下几个步骤:

  • 编译出 Windows可以使用的ffmpeg
  • 使用VS创建工程时,选择好 x86 或 x64 架构指令集
  • 指定 ffmpeg 头文件目录路径
  • 指定 ffmpeg 库文件目录路径
  • 指定你要使用的 ffmpeg库
  • 拷贝指定的 ffmpeg DLL库 文件到执行程序目录

下面我们就对上面的步骤做下详细介绍。

Windows 下编译 ffmpeg

我们要想使用 ffmpeg,就一定要有在 Windows 下可以使用的 ffmpeg 库。这个库你可以通过官网直接下载,也可以通过 ffmpeg 源码进行编译。

相对来说,通过 ffmpeg 源码编译生成的库更为灵活,比如你想增加fdk_aac、x264等模块会非常方便,只要在编译时打开选项就好了,而使用官网的 ffmpeg 库那只能使用默认设置了。

不过,在Windows下编译ffmpeg源码还是满麻烦的一件事儿,要配置一堆环境。总的来说,在Windows下有三种编译 ffmpeg 的方式:

  • Cygwin 方式编译 ffmpeg
  • Msys2 方式编译 ffmpeg
  • Msys2 VS 方式编译 ffmpeg

其中前两种方式是类似的,都是以 Linux 的方式来编译。而最后一种方式最为复杂,但这种方式编译出的 ffmpeg 是最符合 Windows 风格的。

VS中选择 x86 或 x64

当 ffmpeg 库编译好之后,我们该如何使和它呢?我们以 VS 来例来进行一下讲解。

第一步是在VS创建的工程中要选择使用x86还是使用x64。它们有什么区别呢?通俗的讲,x86是编译出的是32位系统可执行程序 ,而x64编译出的是 64位系统可执行的程序。

由于 Windows 是向下兼容的,所以你编译出的x86程序是可以跑在 64 位系统上的。相反如果你选择输出是x64的话,则它只能跑在64位系统上,在 32 位系统上是无法运行的。

但凡事儿有利有弊,如果你编译出的是x86程序,虽然它可以在x64位系统上运行,但它的运行速度要比编译出的x64程序运行的慢很多。由于目前大多数系统都是64位的了,所以我建议尽可以的编译成 x64 程序。

另外需要注意的是,我们在选择 x86 或 x64时,也要注意是否与我们前面编译的 ffmpeg 是一致的?如果你的 ffmpeg 编译出的是 x86 的,在 VS 中也只能选择输出是x86程序。

指定 ffmpeg 头文件路径

选择好输出是 x86 或 x64 之后,接下来我们就要给工程指定 ffmpeg 的头文件路径了。

实际上,无论是 VS 还是还是使用 Linux/Mac 下的 gcc/clang进笔编译,它们在编译时都遵循相同的原则。

我们来举个例子,如果你对 Linux 特别熟悉的话,你应该知道在 Linux 系统下编译代码的命令如下:

代码语言:javascript复制
gcc -g -o 可执行程序 源码 -I xxxx -L xxxx -lxxx 

其中,-I 指明你要引用的库的头文件路径;-L指明你使用库的路径; -l 指时具体使用那个库。

VS也不例外,我们看一下 Windows 是在哪儿设置 ffmpeg 头文件吧,如下图所示:

第一步,找到你的工程

第二步,右键项目

第三步,点击属性

第四步,修改 C /General 中的 Additional Include Directories

至此,我们就将 ffmpeg 的头文件路径指定好了。

指定 ffmpeg 库路径

指定 ffmpeg 库文件路径与指定 ffmpeg 头文件路径是类似的。过程如下:

  • 首先右键点击项目 -> 属性。
  • 然后在弹出的属性窗口中选择 Linker 项,如图所示:

Additional Library Directories 中添加 ffmpeg 库路径。这样就将ffmpeg 库文件路径设置好了。

指定要使用的 ffmpeg 库文件

接下来我们来看看如何指定要使用的 ffmpeg 库文件 。编译好的 ffmpeg 有许多库文件,如libavutil, libavformat …,每一个库都有其特定作用。

在我这个例子中,由于我用到了音频设备,所以要引入 avdevice,我要对采集到的音频进行编码,所以还需要 avcodec等。因此我的工程中需要加入以下几个库: avutil, avformat, avdevice, avcodec 和 swresample。下面我们就看看该如何设置吧。

拷贝DLL文件到执行目录

最后一步就是将编译好的 ffmpeg 库文件放到编译后的可执行文件目录下就好了。直接上图了:

经过以上步骤,我们就将Windows下使用 ffmpeg 的音视频环境搭建好了。希望本文能对你有所帮助!

参考资料

音视频小白系统入门课

FFmpeg音视频核心技术精讲与实战

0 人点赞