通信電纜 網(wǎng)絡(luò)設(shè)備 無線通信 云計算|大數(shù)據(jù) 顯示設(shè)備 存儲設(shè)備 網(wǎng)絡(luò)輔助設(shè)備 信號傳輸處理 多媒體設(shè)備 廣播系統(tǒng) 智慧城市管理系統(tǒng) 其它智慧基建產(chǎn)品
北京漢邦高科數(shù)字技術(shù)股份有限公司
暫無信息 |
閱讀:768發(fā)布時間:2014-4-24
一、簡介
FFmpeg是一個集錄制,轉(zhuǎn)換,音/視頻編碼解碼功能為一體的完整的開源解決方案。FFmpeg的開發(fā)是基于Linux操作系統(tǒng),但是可以在大多數(shù)操作系統(tǒng)中編譯和使用。
由于ffmpeg是基于linux開發(fā)的,源代碼和windows下zui常見的visual studio提供的c/c++編譯器不兼容,因此不能直接使用msvc++編譯,想要使用ffmpeg,需要在windows下配置一個類似Linux的編譯環(huán)境,并將ffmpeg編譯為二進制庫以后,再利用其進行進一步開發(fā)。
目前,windows下可直接使用的版本是由ffmpeg工程組,于2008年4月份發(fā)布的ffmpeg full sdk v3.2。該sdk盡可能的集成了更多的編解碼器。
在應(yīng)用中,使用該開發(fā)包存在2個缺陷,*,該sdk編譯基于ffmpeg r12790,編解碼效率上,當前已經(jīng)有了較大的提升;第二,該開發(fā)包包含了很多不需要的編解碼器,需要盡可能減少開發(fā)包的體積及關(guān)聯(lián)的庫的個數(shù)?;谝陨闲枨?,需要自己編譯出windows下可用動態(tài)庫及靜態(tài)庫。
使用到的庫文件有4個,libavcodec,libavformat,libavutil,libswscale,其中庫libavcodec,libavformat用于對媒體文件進行處理,如編解碼;libavutil是一個通用的小型函數(shù)庫,該庫中實現(xiàn)了CRC校驗碼的產(chǎn)生,128位整數(shù)數(shù)學(xué),zui大公約數(shù),整數(shù)開方,整數(shù)取對數(shù),內(nèi)存分配,大端小端格式的轉(zhuǎn)換等功能,libswscale主要用于圖像格式轉(zhuǎn)換及縮放。因效率的需要,我們選擇了ffmpeg-mt版本,同時通過配置編譯盡量減少相關(guān)文件的體積。
網(wǎng)上類似編譯過程說明較多,但實際編譯過程中碰到一些問題,這些問題的解決花費了不少時間,本文檔對這一過程進行記錄,以便后續(xù)維護及學(xué)習。
二、編譯環(huán)境搭建
windows下ffmpeg編譯環(huán)境有多種可選擇方案。這里我們使用MinGW+MSYS。
1. 下載mingw+msys并安裝
http://sourceforge.net/projects/mingw/
mingw,默認安裝,在choose components時選擇g++ compiler及MinGW Make
Msys,默認安裝,
Do you wish to continue with the post install【yn】,y!
Do you have mingw installed?【yn】, y
Where is your mingw installation? C:/mingw
在c:/mingw/1.0/msys.bat的*行添加
E:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat
2. 編譯
將ffmpeg-mt減壓縮至c:\mysy\1.0\home\Administrator下
啟動msys,
pwd確認當前路徑
cd /home/administrator/ffmpeg-ffmpeg-mt
下載gcc-full-4.4.0-mingw32-bin-2.tar.lzma.tar
減壓縮覆蓋至c:\mingw,這里需要注意的是,如果gcc版本過低,可能導(dǎo)致解碼報錯!
在ffmpeg-ffmpeg-mt創(chuàng)建編譯選項文件compile.sh
在該文件中添加
./configure --disable- static --enable- shared --enable-memalign-hack --disable-debug --disable-network --disable-mpegaudio-hp --disable-ffserver --disable-ffplay --disable-filters --disable-devices --disable-protocols --disable-demuxers --disable-muxers --disable-encoders --disable-parsers --disable-bsfs --enable-pthreads --enable-runtime-cpudetect --disable-decoders --enable-decoder=H264
運行compile.sh,這時會提示:./configure:line 248: pr: command not found
這個需要從coreutils-5.97中提取pr.exe,拷貝至c:/msys/1.0/bin
然后會提示:Error: can’t find pthreads library
這個需要通過下載pthreadsGC2-static-2.9.x-gcc42.tar.bz2(靜態(tài)連接),減壓縮至c:\mingw\mingw32中解決
從其他版本ffmpeg中提取libswscale至當前文件夾內(nèi)
將sdl-devel-1.2.14-mingw32.tar.gz減壓縮至c:\mingw
3. 目標文件生成
通過上述過程,生成的是動態(tài)庫,對應(yīng)的庫有avcodec.dll/avcodec.lib/avcodec-xx.xx.xx.dll/avcodec-xx.dll/avcodec-xx.lib,另外三個庫文件生成類似,選擇所需對應(yīng)dll及l(fā)ib即可直接用于使用。
對于靜態(tài)庫的編譯,僅需修改編譯配置,將--disable- static --enable- shared更改為-- enable - static -- disable – shared即可。
生成靜態(tài)庫文件libavcodec.a/libavformat.a/libavutil.a/libswscale.a,用于windows下vc項目時,還需注意添加相關(guān)庫文件: libgcc.a libmingwex.a libpthreadGC2.a Ws2_32.lib。
三、 編譯選項及注意項
1. gcc版本,gcc版本過低可能導(dǎo)致運行錯誤
2. Pthread庫,使用版靜態(tài)庫,版本過低會有編譯錯誤
3. 碰到問題,可以通過google搜索相關(guān)錯誤說明,這個過程需要有足夠的耐心。
智慧城市網(wǎng) 設(shè)計制作,未經(jīng)允許翻錄必究 .? ? ?
請輸入賬號
請輸入密碼
請輸驗證碼
請輸入你感興趣的產(chǎn)品
請簡單描述您的需求
請選擇省份