在windows下編譯ffmpeg可以採用cygwin或msys+mingw兩種方案,我個人比較喜歡msys+mingw方式,因為這樣可以在windows下搭建一個類Unix作業系統,並且配置比cygwin要簡單,因此本就是描述怎樣建立msys+mingw的環境。
在windows下搭建ffmpeg編譯環境在網上的文章很多,最為詳細的可能是這篇文章:http://ffmpeg.arrozcru.org/wiki/index.php?title=Main_Page。但是在由於版本問題,完全按照上面的描述是通不過的。
- 到http://sourceforge.net/projects/mingw/files/下載最新版MinGW安裝程式,我的是MinGW-5.1.6.exe
- 到http://sourceforge.net/projects/mingw/files/MSYS%20Base%20System/msys-1.0.11/MSYS-1.0.11.exe/download下載MSYS-1.0.11,注意當前MSYS已經是1.0.14版,但是從1.0.11版之後,就再也沒有安裝程式了
- 到http://prdownloads.sourceforge.net/mingw/coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2?download下載coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2
- 運行MinGW-5.1.6.exe,注意選擇安裝g++和make,並將安裝目錄指定到c:\msys\mingw,該程式將自動下載並安裝mingw系統,注意此時的gcc版本為3.4.5
- 運行MSYS-1.0.11.exe安裝msys到c:\msys目錄
- 解壓並將coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2複製到c:\msys目錄下,並選擇合并目錄,遇到衝突檔案時選擇保留兩份
- 此時基本系統應該已經建成,編寫一個test.c的hello world程式應該可以編譯通過並正常運行
- 安裝工具軟體:
- wget.exe:拷貝到c:\msys\bin目錄下
- 到ftp://ftp.info-zip.org/pub/infozip/win32/下載unzip程式unz600xn.exe,在臨時目錄下運行該程式,將unzip.exe拷貝到c:\msys\bin目錄下
- 到http://www.tortall.net/projects/yasm/wiki/Download下載yasm-0.8.0-win32.exe,拷貝到c:\msys\mingw\bin目錄下並重新命名為yasm.exe
- 安裝msysgit到c:\software目錄
- 下載x264程式:/c/software/Git/bin/git clone git://git.videolan.org/x264.git
- 編譯x264程式:./configure --prefix=/home/yantao/cic/static,然後運行make和make install
- 下載AMR支援:http://sourceforge.net/projects/opencore-amr/files/opencore-amr/0.1.2/opencore-amr-0.1.2.tar.gz/download
- 編譯:./configue --prefix=/home/yantao/cic/static --enable-static,然後make和make install
- 下載SDL:http://www.libsdl.org/download-1.2.php
- 編譯:./configure --prefix=/home/yantao/cic/static --enable-static --disable-shared
- 此時證明當前gcc 3.4.5環境配置基本正確,但是ffmpeg必須在gcc 4以上編譯才能解決dll檔案可以在VC中連結及異常退出等BUG,因此需要將gcc升級到最新系統,到sourceforge
- 升級msys bash:從http://sourceforge.net/projects/mingw/files/下載最新版bash,這裡是bash-3.1.17-2-msys-1.0.11-bin.tar.tar,利用解壓工具解開,將內容拷貝到c:\msys\bin目錄下
- 升級msys coreutil:從http://sourceforge.net/projects/mingw/files/下載最新版coreutils-bin和coreutils-ext,這裡是coreutils-5.97-2-msys-1.0.11-bin.tar.tar,利用解壓工具解開,將內容拷貝到c:\msys\bin目錄下
- 升級mingw binutils
- 升級mingw runtime dev
- 升級mingw runtime dll
- 升級mingw win32 api
- 升級gcc:下載所有gcc相關的下載項,尤其是dll項目,然後解壓並拷貝到c:\msys\mingw目錄下
- 從http://sourceforge.net/projects/mingw/files/的mingw proposed目錄下下載libgmp-5.0.1-1-mingw32-dll-10.tar.tar並安裝
- 從http://sourceforge.net/projects/mingw/files/的mingw proposed目錄下下載libmpc-0.8.1-1-mingw32-dll-2.tar並安裝
- 從http://sourceforge.net/projects/mingw/files/的mingw proposed目錄下下載libmpfr-2.4.1-1-mingw32-dll-1.tar並安裝
- 下載pthreads支援libpthread-2.8.0-3-mingw32-dll-2.tar.tar
- 為驗證升級的正確性,首先確定能夠正確編譯test.c,然後重新編譯x264、opencore-amr、SDL
- 將編譯好的外部庫拷貝到c:\msys\mingw\include及c:\msys\mingw\lib目錄下,並注意修改每個pkconfig檔案中的目錄,將build4_5_0/bin目錄下的sdl-config拷貝到mingw/bin目錄下,並修改路徑為/mingw
- 從ftp://sources.redhat.com/pub/pthreads-win32/prebuilt-dll-2-8-0-release/lib/下載pthreads補丁:包括include目錄下的*.h及lib目錄下的pthreadGC2.dll,將*.h檔案拷貝到c:\msys\mingw\include目錄下,將pthreadGC2.dll拷貝到c:\msys\mingw\bin及c:\msys\mingw\lib,同時拷貝到c:\msys\mingw\lib並改名為pthread.dll
- 編譯ffmpeg:首先建ffmpeg目錄,然後通過TortoiseSVN從svn://svn.mplayerhq.hu/ffmpeg/trunk下載最新代碼,運行./configure --prefix=/home/yantao/cic/static --enable-static --disable-shared --enable-gpl --enable-libx264 --enable-pthreads --enable-nonfree --enable-opencore-amrnb --enable-opencore-amrwb --enable-version3 --enable-memalign-hack
- 修改libavformat/rtsp.c的1699行,將ETIME更改為ETIMEDOUT,修改mingw/include/errno.h檔案,添加#define ETIMEDOUT 60定義
- 在mingw/include/sched.h的152行前添加typedef long pid_t;
- 運行make及make install
- 用帶有AMR-NB的3gp檔案測試ffplay.exe
- 測試視頻捕捉