VS配置FFmpeg開發環境
在做視訊處理的時候,通常需要對視訊資料進行編解碼,這時利用開源的FFmpeg視訊音訊處理方案是大多數程式設計師的選擇,畢竟自己去進行編解碼器的編寫實在是太太太沒效率了,而且大多數情況下還滿滿的都是寫不出來。。。然決定用FFmpeg只是最開始的一步,因為後面如何去搭建這個環境是個比較麻煩的問題。
通常在VS上搭建FFmpeg開發環境有兩種方法,一是從FFmpeg的官網下載原始碼然後自己進行編譯。其複雜度之高實在是令本人望而卻步,看了幾篇教程之後感覺不會再愛了,當然如果你是立志要在視訊上幹一番大事業的,還建議去下載最新的原始碼進行研究;二則是從網上下載別人已經編譯過的直接在VS上面可用的FFmpeg包,這個是本人採取的也是這篇部落格將要介紹的方法。
對於這個方法來說,網上本身是有一些教程的,然問題在於FFmpeg版本很多,而通常的教程僅僅只是給出配置的方法而沒給出其版本,導致配置完了有些東西不能用或者說配置完成之後後面跟著的測試程式碼並不適用於該版本,有時更崩潰的在於該程式碼包有些功能或者是因為編譯者的疏忽什麼的直接就是不能用的。本人被這個情況坑了很久,之前下載的版本已經用了快一年以為沒問題,卻在最近做編碼的時候出現問題(之前一直做的只是解碼),所以在找到問題並解決之後,決定寫這篇部落格,在介紹如何配置環境的同時放上本人現在所用的暫時沒問題的FFmpeg包,並在後面的博文中陸續介紹本人用該版本的FFmpeg包所做的一些編解碼程式碼,以供大家參考和指正。
對於FFmpeg如何配置在VS上本身其實是非常簡單的,所需要做的只有五步(本人是在VS2013上面配置的,在低版本的VS上面也基本一樣)。
第一步:下載FFmpeg包,本人提供的FFmpeg包地址如右:點選開啟連結 。將下載完成的包解壓到你想要存放的路徑即可,本人存放在F盤即“F:\”這個路徑中。
(由於這個開發包是比較久的,在寫這篇文章之後一個專案中發現開發包中的avcodec_encode_video函式是有問題的,在編碼一段時間後會出現卡死的現象,所以如果是希望做編碼的朋友請到點選開啟連結下載最新版本的ffmpeg,其中 Previous
FFmpeg 32-bit Static Versions
第二步:在VS上面新建一個工程,開啟工程的屬性頁面(在解決方案資源管理器中右鍵工程名在彈出的選單中選擇屬性),如下圖所示:
選擇:配置屬性->C/C++,在該頁面中的“附加包含目錄”中新增FFmpeg包下面的include資料夾路徑(本人的路徑為F:\ffmpeg_lib\include),如下圖所示:
選擇:配置屬性->連結器->常規,在該頁面中的“附加庫目錄”中新增FFmpeg包下面的win32資料夾下面的lib資料夾路徑(本人的路徑為F:\ffmpeg_lib\win32\lib),如下圖所示:
第三步:選擇:配置屬性->連結器->輸入,在該頁面的“附加依賴項”中新增swscale.lib;avcodec.lib;avutil.lib;avformat.lib; 這些庫即可(如果後面還要用到其他的,可以再接著新增,上面的四個庫已經能夠完成視訊的編解碼了),結構如下圖所示:
第四步:在工程的標頭檔案中包含FFmpeg包中要被用到的檔案,如下:
#ifndef INT64_C
#define INT64_C(c) (c ## LL)
#define UINT64_C(c) (c ## ULL)
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*Include ffmpeg header file*/
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
#include <libavutil/imgutils.h>
#include <libavutil/opt.h>
#include <libavutil/mathematics.h>
#include <libavutil/samplefmt.h>
#ifdef __cplusplus
}
#endif
第五步:將FFmpeg包下面的win32資料夾下面的bin資料夾(本人路徑為:F:\ffmpeg_lib\win32\bin)中的dll全部拷到VS所建的工程中(如果你所建的工程名為ffmpegtest,則拷到.\ffmpegtest\ffmpegtest資料夾中),如果要發行出來也要拷到相應的release資料夾中。OK,到此FFmpeg在VS上的配置工作全部完成,接下來就可以進行相關程式碼的編寫了。本人會在近期寫關於視訊編解碼的部落格,一旦完成就將連結補上:
用FFmpeg進行視訊編碼:點選開啟連結
用FFmpeg進行視訊解碼:點選開啟連結