Windows 下使用 ffmpeg 庫

今天我們來聊聊如何在Windows下使用ffmpeg庫進行音視開發。一般情況下我很少在Windows下使用ffmpeg, 最主要的原因是在Windows下編譯ffmpeg沒有在Linux/Mac下編譯方便。

不過相對來說還是使用 Windows 的同學比較多,為了方便他們可以更順利的學習音視頻開發,因此今天我們就來看看如何在 Windows 搭建使用 ffmpeg 的開發環境。

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 程序。

Windows 下使用 ffmpeg 庫

另外需要注意的是,我們在選擇 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 頭文件吧,如下圖所示:

第一步,找到你的工程

Windows 下使用 ffmpeg 庫

第二步,右鍵項目

Windows 下使用 ffmpeg 庫

第三步,點擊屬性

Windows 下使用 ffmpeg 庫

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

Windows 下使用 ffmpeg 庫

至此,我們就將 ffmpeg 的頭文件路徑指定好了。

指定 ffmpeg 庫路徑

指定 ffmpeg 庫文件路徑與指定 ffmpeg 頭文件路徑是類似的。過程如下:

  • 首先右鍵點擊項目 -> 屬性。
  • 然後在彈出的屬性窗口中選擇 Linker 項,如圖所示:

在 Additional Library Directories 中添加 ffmpeg 庫路徑。這樣就將ffmpeg 庫文件路徑設置好了。

指定要使用的 ffmpeg 庫文件

接下來我們來看看如何指定要使用的 ffmpeg 庫文件 。編譯好的 ffmpeg 有許多庫文件,如libavutil, libavformat …,每一個庫都有其特定作用。

在我這個例子中,由於我用到了音頻設備,所以要引入 avdevice,我要對採集到的音頻進行編碼,所以還需要 avcodec等。因此我的工程中需要加入以下幾個庫: avutil, avformat, avdevice, avcodec 和 swresample。下面我們就看看該如何設置吧。

Windows 下使用 ffmpeg 庫

拷貝DLL文件到執行目錄

最後一步就是將編譯好的 ffmpeg 庫文件放到編譯後的可執行文件目錄下就好了。直接上圖了:

Windows 下使用 ffmpeg 庫

經過以上步驟,我們就將Windows下使用 ffmpeg 的音視頻環境搭建好了。希望本文能對你有所幫助!



分享到:


相關文章: