之前嘗試過很多網上利用Windows編譯FFmpeg的文章,都沒有辦法編譯X64位的FFmpeg,有些教程中有專門提到編譯64位的FFmpeg需要下載mingw-w64-install,但是編譯的過程中總是遇到各種錯誤。嘗試了很久依然沒有成功。
然后在網上看見另外一篇教程:VS2015編譯FFMPEG。方法很簡答,並且成功編譯了X64位的FFmpeg。特此記錄:轉自:http://blog.csdn.net/gongxp123456/article/details/52879976
系統環境:Windows 10 64位
需要安裝的軟件和工具:
Visual Studio 2015 With Update 3
MSYS2
YASM
一、VS2015
安裝VS2015時,選擇Git。
二、msys2
1、到這里下載:
http://msys2.github.io. 選擇第二個:msys2-x86_64-20160921.exe
下載后,安裝默認安裝到C:\ msys64
2.安裝后,到msys2窗口執行,安裝編譯程序: pacman -S make gcc diffutils
3. 重命名C:\msys64\usr\bin\link.exe 為C: \msys64\usr\bin\link.bak, 避免和MSVC 的link.exe抵觸。
三、YASM
1. YASM下載地址: http://yasm.tortall.net/Download.html,下載其64位版本Win64 .exe (64 位 Windows 通用)。
2、下載后,將下載回來的yasm-1.3.0-win64.exe 改名為yaml.exe,並放置於 MSYS2 安裝目錄中。就是放置到c:\msys64\usr\bin\ 中。
四,ffmpeg
下載最新版本ffmpeg,本文是在2016.10.21下載,如果速度太慢,可以翻牆后再執行:
進入windows命令行,在C:\FFMPEG目錄下執行:
git clone git://source.ffmpeg.org/ffmpeg.git
四,編譯ffmpeg
1、使用VC2015編輯C:\msys64\msys2_shell.cmd,將其中的:
rem set MSYS2_PATH_TYPE=inherit
“rem”注釋刪除掉,成為:
set MSYS2_PATH_TYPE=inherit
2、到開始菜單,執行“Visual Studio 2015-> VS2015 x64 本機工具命令提示符”,在命令窗口下,CD \msys64,執行:msys2_shell.cmd -mingw64
3、在啟動的 MSYS2 終端中分別運行一下命令觀察各便於工具組件是否被正確找到:
5、修改msys2窗口代碼頁為GBK,避免編譯時顯示亂碼:
4、編譯ffmpeg
在msys2窗口:
cd /
cd /ffmpeg
cd /ffmgeg
進入下載ffmpeg目錄中
./configure --toolchain=msvc --arch=x86 --enable-yasm --enable-asm --enable-shared --disable-static
make
make install
這樣以后,編譯生產的執行文件ffmpeg.exe和DLL文件在目錄C:\msys64\usr\local\bin中,開發頭文件在C:\msys64\usr\local\include中。
需要安裝的軟件和工具:
Visual Studio 2015 With Update 3
MSYS2
YASM
一、VS2015
安裝VS2015時,選擇Git。

二、msys2
1、到這里下載:
http://msys2.github.io. 選擇第二個:msys2-x86_64-20160921.exe
下載后,安裝默認安裝到C:\ msys64
2.安裝后,到msys2窗口執行,安裝編譯程序: pacman -S make gcc diffutils
3. 重命名C:\msys64\usr\bin\link.exe 為C: \msys64\usr\bin\link.bak, 避免和MSVC 的link.exe抵觸。
三、YASM
1. YASM下載地址: http://yasm.tortall.net/Download.html,下載其64位版本Win64 .exe (64 位 Windows 通用)。
2、下載后,將下載回來的yasm-1.3.0-win64.exe 改名為yaml.exe,並放置於 MSYS2 安裝目錄中。就是放置到c:\msys64\usr\bin\ 中。
四,ffmpeg
下載最新版本ffmpeg,本文是在2016.10.21下載,如果速度太慢,可以翻牆后再執行:
進入windows命令行,在C:\FFMPEG目錄下執行:
git clone git://source.ffmpeg.org/ffmpeg.git
四,編譯ffmpeg
1、使用VC2015編輯C:\msys64\msys2_shell.cmd,將其中的:
rem set MSYS2_PATH_TYPE=inherit
“rem”注釋刪除掉,成為:
set MSYS2_PATH_TYPE=inherit
2、到開始菜單,執行“Visual Studio 2015-> VS2015 x64 本機工具命令提示符”,在命令窗口下,CD \msys64,執行:msys2_shell.cmd -mingw64
3、在啟動的 MSYS2 終端中分別運行一下命令觀察各便於工具組件是否被正確找到:

5、修改msys2窗口代碼頁為GBK,避免編譯時顯示亂碼:

4、編譯ffmpeg
在msys2窗口:
cd /
cd /ffmpeg
cd /ffmgeg
進入下載ffmpeg目錄中
./configure --toolchain=msvc --arch=x86 --enable-yasm --enable-asm --enable-shared --disable-static
make
make install
這樣以后,編譯生產的執行文件ffmpeg.exe和DLL文件在目錄C:\msys64\usr\local\bin中,開發頭文件在C:\msys64\usr\local\include中。
最近新提出了一個問題,解碼的時候傳入一個錯誤的rtsp流地址,會怎么樣?結果測試發現會卡死在avformat_open_input里,一直不返回。
后來在網上查發現,avformat_open_input是阻塞的,但是可以設置超時,設置的方法:
av_dict_set(&dic, "stimeout", "2000000", 0);
注意!是stimeout,網上有些寫的是timeout,不行的,寫timeout,無論是傳入正確的rtsp流地址還是錯誤的,都會返回無法連接的。改成stimeout就正確了。