前面介紹了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===================