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