最近有個項目需要用到傳屏,看了一些文章後,決定使用ffmpeg庫實現功能(錄屏,H264 解編碼),在編譯FFMPEG時遇到了很多坑,還好都一 一化解,最後成功的在Windows 下編譯出支持X264編碼的ffmpeg庫,將經驗總結如下:
1. mingw windows安裝,目前的版本自動在線安裝容易失敗,會對後面的編譯造成影響,如果自動安裝失敗時,建議從“離線安裝”突破。
2. yasm、sdl、x264庫的安裝,參照“https://www.cnblogs.com/dwdxdy/p/3625766.html”這篇文章可實現順利編譯和安裝。
3. ffmpeg 編譯時,如果使用上面文章的命令會出現錯誤,下面按錯誤進行說明:
錯誤1: "libx264 Not Found"錯誤,此時是因爲找不到libx264的文件,導致報錯。
方法:重新打開mingw命令行
命令更改爲下面:
export PATH="$PATH:/usr/local/yasm/bin"
export PATH="$PATH:/usr/local/SDL/bin"
export C_INCLUDE_PATH="$C_INCLUDE_PATH:/usr/local/SDL/include/SDL2"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/SDL/lib"
export PATH="$PATH:/usr/local/x264/bin"
export C_INCLUDE_PATH="$C_INCLUDE_PATH:/usr/local/x264/include"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/x264/lib"
./configure --enable-shared --disable-static --extra-cflags=-I/usr/local/x264/include --extra-ldflags=-L/usr/local/x264/lib --enable-libx264 --enable-gpl --prefix=/usr/local/ffmpeg4.0
進行上面操作後,如果仍提示相同錯誤,此時可能是x264編譯安裝的dll文件名上有版本號,將版本號去掉,重新試一下。
錯誤2:make 命令時“missing separator.Stop.”錯誤。
參考文章https://blog.csdn.net/hutianyou123/article/details/77054091 解決,內容如下:
當我們從gitlab或github中克隆ffmpeg, 配置完成後執行make時,會遇到下面的錯誤:
common.mak:159: *** missing separator. Stop.
1
那是因爲本地git配置中的一個叫做autocrlf的參數打開了,解決方法:
打開git bash, 執行:
git config --global core.autocrlf false
1
接下來,刪除當前的ffmpeg文件夾,使用命令:
git rm --cached -r ffmpeg/
1
如果本地git倉庫沒有修改,直接刪除本地的ffmpeg文件夾即可。
rm -rf ffmpeg/
1
最後,從gitlab中獲取ffmpeg鏡像,比如:
git clone git@gitlab/ffmpeg (此處是比如,之前怎麼下載的,還怎麼下)
1
再重新執行命令,錯誤就消失了。
./configure --enable-shared
make && make install
錯誤3:undeclared 'ERROR_NOT_ENOUGH_MEMORY'錯誤
Add winerror.h header in your os_support.h will solve the problem.//注這兩個頭文件都在mingw安裝路徑中,可以使用搜索確定
至此,make、make install 命令應該可以成功運行,生成的編譯文件就在local文件夾下。
4. 生成的庫文件,沒有lib文件,而是def文件。vs開發,需要將def文件生成lib文件,需要參考文章:
https://blog.csdn.net/leixiaohua1020/article/details/42069383,關鍵內容如下
使用VC自帶的lib生成工具“LIB”,生成“libx264.lib”文件。使用“Visual Studio command prompt”,切換至x264源代碼目錄,輸入以下命令:
LIB /DEF:libx264.def
然後根據上面的方法,生成自己需要的lib文件,至此ffmpeg windows開發用的庫編譯完成。
注:ffmpeg windows 下使用的庫,官網有編譯好的,個人建議最好使用自己編譯的庫。