從零開始學習音視頻編程技術(38) windows下編譯並調試ffmpeg

前面介紹了Linux下編譯ffmpeg的方法,考慮到大部分時候測試ffmpeg功能都是使用的windows系統(至少我是這樣的),因此將戰場重新轉移到windows上。

    前面寫了那麼多的代碼,但都只是簡單的調用了ffmpeg的API,並不知道他內部是如何實現的。如果可以在調試的時候打個斷點就可以進入ffmpeg代碼調試看看實現該好友多好!夢想總是要有的,萬一實現了呢!百度了一下發現可以做到,下面就來講講實現方法。 

      首先我們需要自己重新編譯ffmpeg的源代碼,其次我們需要將之前使用的mingw編譯換成vs的編譯器,因爲qtcreator調試實在是坑爹,現在開始我們將開發工具從qtcreator轉到vs上。不過我編寫代碼用的還是qtcreaotr,畢竟qtreator上是可以直接調用vs編譯器的,qtcreaotr只是調試的時候坑一點。我一般都是實在看不出來問題在哪,需要逐步調試的時候,纔將工程導入vs上調試一下,因爲我比較習慣qtcreator的快捷鍵。當然,這只是個人觀點。

    下面就來介紹windows下使用vs編譯並調試ffmpeg的方法。

    

一、編譯環境搭建

1.VS開發工具安裝

    VS版本我用的是2013的,visual studio 2013大家自行百度下載安裝。這裏不提供地址了。

 

2.安裝msys

    這裏編譯ffmpeg不是直接將ffmpeg代碼導入vs工程,因爲這個太難了,不改代碼估計做不到,我也沒有去研究過。有過在visual studio下編程的小夥伴應該都知道vs的調試信息主要依靠於pdb文件,那麼我們今天編譯的目的就是使FFmpeg的動態庫生成相應的pdb文件。

    這裏編譯ffmpeg有點類似linux下編譯,先是configure  然後 make   make install。

因此我們需要安裝一個msys (Minimal GNU(POSIX)system on Windows,是一個小型的GNU環境,包括基本的bash,make等等)。直接下載安裝一個Mingw就可以了,裏面帶有msys,

下載地址:https://sourceforge.net/projects/mingw/

 

    下載好MinGW之後可以直接雙擊打開,按照默認的方式安裝(建議默認安裝,安裝目錄爲C:/MinGW),此期間可能要下載一些文件,不同人因爲網絡的不同可能安裝的時長也不相同。安裝好之後返回桌面,雙擊快捷方式,打開界面如下: 


選擇basic setup,然後將右邊的每一項,右鍵選擇mark for installation

 

選擇完畢後,選擇Installatin的Apply Change,確定安裝

 

Apply之後就會彈出另外一個框,一直下載下載下載。一個字,等,等到完全安裝完之後,MinGW的環境就建立起來了。

 

 

安裝好之後,如果上一步驟中MinGW安裝的目錄爲C:/MinGW,則找到C:/MinGW/msys/1.0/msys.bat文件,右擊編輯文件,在最前面加上一句話爲(如果你下載的是我提供給你的MinGW,你一定要確認一下,路徑是否正確):

這個路徑爲你自己的vs2013安裝目錄,如果是默認的安裝目錄你就按照上邊的路徑去找這個文件,每個人酌情而定,自己斟酌)

加好之後的效果如下:

 

 

二、編譯ffmpeg

1.下載ffmpeg

我們使用的ffmpeg版本是2.5.6,其他版本應該也是類似

ffmpeg下載地址:http://ffmpeg.org/releases/ffmpeg-2.5.6.tar.gz

 

    下載完成後將源碼解壓到E盤根目錄,放在磁盤根目錄是爲了方便在命令行裏面找到。

 

2.編譯

    打開C:/MinGW/msys/1.0下的msys.bat,這就是我們剛剛安裝的msys,打開之後會彈出一個命令行窗口,裏面的命令和linux下基本一致。

    首先進入ffmpeg的源代碼目錄:

    cd E:

    cd ffmpeg-2.5.6

    然後執行configure

    ./configure --enable-shared --enable-gpl --enable-version3 --toolchain=msvc --disable-yasm --prefix="E:/ffmpeg"

    這一步到這裏會報如下錯:

    

從提示上看是編譯器檢測失敗了,莫方,繼續看看config.log文件,可以看到是在鏈接的時候失敗了。原因是在msys的目錄下有一個Link.exe文件,這一步我們使用了這個文件,而不是使用vs的鏈接文件,解決方法很簡單;

將C:/MinGW/msys.1.0/bin/link.exe隨便改個名字,編譯完後ffmpeg記得該回來就好了(防止哪天用到mingw的時候找不到link.exe)

 

現在繼續configure,依次執行以下命令:

./configure --enable-shared --enable-gpl --enable-version3 --toolchain=msvc --disable-yasm --prefix="E:ffmpeg"

make 

make install

 

三、調試代碼

    編譯完成後便可在E盤根目錄看到一個ffmpeg文件夾,裏面有lib和dll文件,使用vs2013建立一個工程,調用簡單的ffmpeg函數,vs引用Lib文件的方法請自行百度,這裏不做闡述。

調試效果如下:

(圖片是偷來的,我自己用的是2013的,因爲懶不想截圖了。

 

這裏需要注意的是:請勿將ffmpeg的源代碼刪除,因爲調試的時候需要用到他們。

 

本文參考地址:http://blog.csdn.net/u010380485/article/details/54092264

 

 

=======2019-01-18更新 begin======

到目前爲止,ffmpeg已經更新到4.1了,因此日常中難免會去編譯ffmpeg3或者ffmpeg4版本,用上面的方法直接編譯,會出現各種各樣的錯誤:

 

不過,還是那句話,不要方,解決方法總是有的:

 

ffmpeg3解決方法:

修改ffmpeg源碼:找到ffmpeg.c這個源文件,打開它,我們要在註釋後面,第一行#include開始的前面,加上一句話,之後保存: 

#define WIN32_LEAN_AND_MEAN

 

ffmpeg4解決方法:

暫時還未解決,日後再更新。

 

=======2019-12-11更新 begin======

安裝yasm:

1.下載yasm:http://yasm.tortall.net/Download.html

2.改成yasm.exe後複製到C:/MinGW/msys/1.0/bin目錄下

==============更新 end===================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章