今天我们来聊聊如何在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 系统下编译代码的命令如下:
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 …,每一个库都有其特定作用,如果你感兴趣的话可以看我的另外一门课《ffmpeg精讲》。
在我这个例子中,由于我用到了音频设备,所以要引入 avdevice,我要对采集到的音频进行编码,所以还需要 avcodec等。因此我的工程中需要加入以下几个库: avutil, avformat, avdevice, avcodec 和 swresample。下面我们就看看该如何设置吧。
拷贝DLL文件到执行目录
最后一步就是将编译好的 ffmpeg 库文件放到编译后的可执行文件目录下就好了。直接上图了:
经过以上步骤,我们就将Windows下使用 ffmpeg 的音视频环境搭建好了。希望本文能对你有所帮助!
网友评论