【FFMPEG】Windows下使用Visual Studio 2010編譯ffmpeg全過程

ffmpeg是一個開源的多媒體庫,使用很是普遍。css

在linux下編譯ffmpeg很是簡單,而在windows下編譯就不是那麼容易了。通常在windows下使用MinGW的gcc toolchain進行編譯,這樣的話,由於ffmpeg的導出函數均是C風格,於是gcc編譯的lib能夠被vs連接。可是gcc的debug符號與vs的debug符號(*.pdb)是沒法兼容的,所以咱們用vs來開發基於ffmpeg的程序時沒法深刻ffmpeg內部進行debug,這無論對於學習仍是工程使用都不是那麼友好。於是,使用同一套編譯系統好處多多。html

本篇博文向你展現從頭至尾怎麼在windows下用vs2010編譯ffmpeg,以及一個基於ffmpeg的栗子。linux

注:請不要用這篇博文的方法去嘗試在VS2010如下版本編譯ffmpeg,我試過在vs2005中編譯,各類問題!官方也沒有在vs2010如下版本中進行過編譯測試。git

一,下載ffmpeg及第三方程序:

1,ffmpeg官網: http://ffmpeg.org/  github

2,ffmpeg git 地址 : git://source.ffmpeg.org/ffmpeg.git ( 注意 :clone代碼以前先在git命令行中設置!!!:git config --global core.autocrlf false )windows

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 目錄下;性能

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.0\VC\include 目錄下( 自行修改成本身的安裝目錄 );測試

二,編譯以前的設置:

1,複製:d/MinGW/msys/1.0/msys.bat 到同目錄下,更名叫作msys_vs2010.bat,在msys_vs2010.bat開頭部分添加:call "D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat" ;

2,打開msys_vs2010.bat,切換到ffmpeg目錄下。

到這裏爲止,全部的編譯以前的工做就完成了。

三,配置編譯:

1,配置:ffmpeg編譯配置選項很豐富,詳細請運行「 . /configure --help > ffmpegcfg.txt 」查看其選項。這裏個人選項是:

靜態庫:./configure -- enable-static --enable-memalign-hack --prefix= ./vs2010_build --extra-cflags="-fno-common" --toolchain= msvc 
動態庫:./configure -- enable-shared --enable-memalign-hack --prefix= ./vs2010_build --extra-cflags="-fno-common" --toolchain= msvc

2,編譯:make & make install

編譯時間與機器性能相關,可能會很慢。

至此在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,因此不排除使用中會有些宏會出問題。

相關文章
相關標籤/搜索