FFMPEG install step on windowshtml
1. 下載MinGW和MSYSwindows
連接: https://sourceforge.net/projects/mingw/files/bash
Download mingw-get-setup.exe (86.5 kB)ui
雙擊進行安裝,安裝後路徑C:\MinGWspa
雙擊C:\MinGW\msys\1.0\msys.bat能夠啓動MinGW.net
2. 下載yasm命令行
http://yasm.tortall.net/Download.htmlcode
yasm-1.3.0-win64.exe,修改成yasm.exe複製到MinGW的bin目錄下C:\MinGW\binhtm
3. 下載Gettextblog
1)、下載gettext-runtime_0.18.1.1-2_win32.zip,地址http://www.gnu.org/software/gettext/
2)、將bin目錄下的intl.dll放到C:\MinGW\bin 目錄下。
4. 下載pkg-config.exe
1)、下載pkg-config
地址http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.26-1_win32.zip (注:沒有win64對應的包)
2)、將壓縮包的bin目錄的pkg-config.exe複製到C:\MinGW\bin目錄下。
5. 下載pkg-config.exe依賴庫
1)、下載地址:http://ftp.acc.umu.se/pub/gnome/binaries/win32/glib/2.28/glib_2.28.1-1_win32.zip
2)、將壓縮包bin目錄全部的.dll,放到C:\MinGW\bin 目錄下。
6. 下載ffmpeg
編譯ffmpeg
雙擊運行 C:\MinGW\msys\1.0\msys.bat,便可進入 MinGW 的工做目錄了。
他和cmd命令有區別,反斜槓須要換成斜槓,盤符D:也要改爲/d
輸入命令 "ls" , 這等價於 "dir"。列出當前目錄下的文件。
輸入 cd ffmpeg,進入ffmpeg 目錄。
在命令行下輸入以下命令:
./configure --enable-memalign-hack --enable-shared
make
make install
即獲得ffmpeg.exe, ffprobe.exe
註釋:
FFmpeg-2.8.6在MinGW下可以編譯成功
Ffmpeg-3.0下make報錯
FFmpeg-3.1.3下make報錯
7. 編譯ffplay
可是在編譯ffmpeg的過程當中,老是不能編譯出來ffplay,查看config.mak文件,找CONFIG_FFPLAY 一行,發現前面老是有!結果make 怎麼都出錯,報告ffplay.c編譯錯誤。
解決辦法:
下載SDL-1.2.15,因爲SDL v2和SDL v1區別比較大,在沒有特殊需求的狀況下建議使用SDL v1,並且SDL v2的發佈版本有明顯的編譯問題。
將壓縮包下的include、lib、bin分別放大mingw安裝目錄的對應目錄下若是採用默認安裝目錄c:\mingw,那麼能夠拷貝到c:\mingw\include、c:\mingw\lib、c:\mingw\bin,特別注意include文件不要包含文件夾,直接拷貝.h文件。
這樣在FFmpeg的configure的時候,就能夠檢測到SDL,並經過配置,編譯生成ffplay.exe。
完成以後檢查下SDL是否正常檢測到,能夠查看FFmpeg編譯目錄下的config.h文件,找到HAVE_SDL、CONFIG_SDL宏,若是都是1,表示SDL配置成功,能夠放心編譯出ffplay了,以及查看config.mak是否CONFIG_FFPLAY=yes。
修改內容SDL-1.2.15\bin\sdl-config
#!/bin/sh prefix=/c/mingw/ exec_prefix=${prefix} exec_prefix_set=no libdir=${exec_prefix}/lib usage="\ Usage: sdl-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--cflags] [--libs]" #usage="\ #Usage: sdl-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--cflags] [--libs] [--static-libs]" if test $# -eq 0; then echo "${usage}" 1>&2 exit 1 fi while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | LC_ALL="C" sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --prefix=*) prefix=$optarg if test $exec_prefix_set = no ; then exec_prefix=$optarg fi ;; --prefix) echo $prefix ;; --exec-prefix=*) exec_prefix=$optarg exec_prefix_set=yes ;; --exec-prefix) echo $exec_prefix ;; --version) echo 1.2.15 ;; --cflags) echo -I${prefix}/include/SDL -D_GNU_SOURCE=1 -Dmain=SDL_main ;; --libs) echo -L${exec_prefix}/lib -lmingw32 -lSDLmain -lSDL -mwindows ;; # --static-libs) ## --libs|--static-libs) # echo -L${exec_prefix}/lib -lmingw32 -lSDLmain -lSDL -mwindows -lm -luser32 -lgdi32 -lwinmm -ldxguid # ;; *) echo "${usage}" 1>&2 exit 1 ;; esac shift done
其中ffplay的編譯參考連接:
http://www.cnblogs.com/tocy/p/windows_mingw_compile_ffmpeg_with_ffplay.html
在經過cmd命令,調用ffplay.exe播放會發現提示缺庫。
下一步研究如何能避免此問題。