今天我們來聊聊如何在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 系統下編譯代碼的命令如下:
<code>gcc
-g -o 可執行程序 源碼 -I xxxx -L xxxx -lxxx /<code>
其中,-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 的音視頻環境搭建好了。希望本文能對你有所幫助!