windows下用vs2010編譯ffmpeg

來源:互聯網
上載者:User

標籤:des   blog   http   color   io   os   使用   ar   for   

轉載自;http://q1q2q3q4q5q6ln.blog.163.com/blog/static/500794332014666536283/

(注意:請務必先閱讀:七,後記補充:)

ffmpeg是一個開源的多媒體庫,使用非常廣泛。
在linux下編譯ffmpeg非常簡單,而在Windows下編譯就不是那麼容易了。一般在windows下使用MinGW的gcc toolchain進行編譯,這樣的話,因為ffmpeg的匯出函數均是C風格,因而gcc編譯的lib可以被vs連結。但是gcc的debug符號與vs的debug符號(*.pdb)是無法相容的,因此我們用vs來開發基於ffmpeg的程式時無法深入ffmpeg內部進行debug,這不管對於學習還是工程使用都不是那麼友好。因而,使用同一套編譯系統好處多多。
本篇博文向你展示從頭到尾怎麼在windows下用vs2010編譯ffmpeg,以及一個基於ffmpeg的栗子。同樣適合於vs2012/vs2013等。
color="#ff0000">註:請不要用這篇博文的方法去嘗試在VS2010以下版本編譯ffmpeg,我試過在vs2005中編譯,各種問題!官方也沒有在vs2010以下版本中進行過編譯測試。
一,下載ffmpeg及第三方程式:
1,ffmpeg官網:http://ffmpeg.org/ 
2,ffmpeg git 地址 : git://source.ffmpeg.org/ffmpeg.git (注意:clone代碼之前先在git命令列中設定!!!:git config --global core.autocrlf false )
3,MinGW : http://www.mingw.org/ ,運行下載的MinGW安裝管理器,包含msys。假設安裝好後MinGW路徑為:d:/MinGW ,則msys路徑應為:d:/MinGW/msys 。將:d:/MinGW/bin和d:/MinGW/msys/1.0/bin加到系統path環境變數中;
4,yasm : http://yasm.tortall.net/ , 改名叫yasm.exe,複製到:d:/MinGW/msys/1.0/bin 目錄下;
/********************如果是vs2013 + ,則下面兩個(5,6)不需要安裝 ***********************/
5,c99-to-c89 : https://github.com/libav/c99-to-c89/downloads , 將c99conv.exe和c99wrap.exe複製到:d:/MinGW/msys/1.0/bin 目錄下;
6,C99標頭檔inttypes.h和stdint.h : http://code.google.com/p/msinttypes/downloads/list ,將此兩個標頭檔複製到: D:Program Files (x86)Microsoft visual Studio 10.0VCinclude 目錄下(自行修改為自己的安裝目錄);
 
二,編譯之前的設定:
1,複製:d/MinGW/msys/1.0/msys.bat 到同目錄下,改名叫做msys_vs2010.bat,在msys_vs2010.bat開頭部分添加:call "D:Program Files (x86)Microsoft Visual Studio 10.0VCbinvcvars32.bat" ;
2,重新命名 d:/MinGW/msys/1.0/bin/link.exe 為link_renamed.exe ,這一步是防止這個link.exe與vc的link.exe發生衝突,編譯完成之後記得修改回來;
2,開啟msys_vs2010.bat,切換到ffmpeg目錄下。
到這裡為止,所有的編譯之前的工作就完成了。
 
三,配置編譯:
1,配置:ffmpeg編譯配置選項很豐富,詳細請運行“./configure --help > ffmpegcfg.txt ”查看其選項。這裡我的選項是:
靜態庫:./configure --enable-static --prefix=./vs2010_build --toolchain=msvc 
動態庫:./configure --enable-shared --prefix=./vs2010_build --toolchain=msvc
2,編譯:make & make install ;
3,修改回來重新命名的 d:/MinGW/msys/1.0/bin/link_renamed.exe 為 link.exe 。
編譯時間與機器效能相關,可能會很慢。
至此在vs2010_build就產生了編譯好的ffmpe庫,有4個目錄,bin、include、lib、share 。
四,一個栗子:
OK,ffmpeg編譯成功,讓我們以一個栗子結束這次編譯體驗。
在 vs2010_build/share/ffmpeg/examples 目錄下有若干個樣本。
我們隨便找一個 avio_reading.c 拖到我們的test_ffmpeg工程(vs2010),記得在這之前要配置include與lib路徑(很簡單,就不詳細說了)。
連結庫中加入: ws2_32.lib;libavcodec.a;libavdevice.a;libavfilter.a;libavformat.a;libavutil.a;libswresample.a;libswscale.a;
編譯,連結,運行,OK!
五,注意:
1,在C++源檔案中include ffmpeg標頭檔時需要加上:
#ifdef __cplusplus 
extern "C"{ 
#endif
//… includes
#ifdef __cplusplus 

#endif,
2,ffmpeg使用的是C99,但是坑爹微軟直到vs2012好像都還是C89,所以不排除使用中會有些標頭檔中宏、函數會出編譯錯誤。
常見錯誤:(此處為騙搜尋流量記,嚴格按照本篇博文步驟的童鞋應該不會出現如下錯誤) 
1, configure時出現“c99wrap cl is unable to create an executable file.” 且在config.log中最後發現“Command line error D8021 : invalid numeric argument”,你可能在用vs2010以下版本。官方未對此版本進行測試,所以,最好還是用新版本的vs。 
2, configure時出現“c99wrap cl is unable to create an executable file.” 且在config.log中最後發現“link: invalid option -- o”,是因為msys/1.0/bin/link.exe與vs的link.exe衝突,將msys/1.0/link.exe臨時改下名字,比如link_gnu.exe,編譯完成後再改回來。
六,參考:
1,http://ffmpeg.org/platform.html#Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows 
2,http://stackoverflow.com/questions/17218902/connect-ffmpeg-to-visual-studio-2008 
3,https://github.com/xylcbd/ffmpeg_study
4,https://trac.ffmpeg.org/ticket/2610
七,後記補充:
很遺憾的告訴大家,ffmpeg原始碼還是蠻坑的,充斥著類似於下面的代碼:
  if (CONFIG_H264_VDPAU_DECODER && h->avctx->codec->capabilities & CODEC_CAP_HWACCEL_VDPAU) ff_vdpau_h264_picture_start(h);
這裡,CONFIG_H264_VDPAU_DECODER是一個宏,在configure時關掉這個宏,那麼ff_vdpau_h264_picture_start函數應該是永遠不可能執行到,然後這段會被編譯器給最佳化掉。但,如果你想debug進去看ffmpeg的代碼,那你就不應該開啟編譯器的最佳化選項(設定:--disable-optimizations),如此以來將使得編譯器在這個obj中加上外部ff_vdpau_h264_picture_start符號,但實際上因為configure設定,外部某個包含此符號的cpp並沒有被編譯,連結時連結器試圖尋找這個符號,沒有找到,則產生link error。
開啟最佳化選項,同時enable debug(--disable-optimizations --enable-debug=3)。可以進行debug,但可能看的很不爽,有的函數進不去,有的函數會跳來跳去(單步debug時)。
大家,三思。

windows下用vs2010編譯ffmpeg

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.