引言:最近一直致力于多媒體應用開發,一說起編碼解碼就不得不說下FFmpeg。FFmpeg是一個集錄制、轉換、音/視頻編碼解碼功能為一體的完整的開源解決方案。FFmpeg的開發是基于Linux操作系統,但是可以在大多數操作系統中編譯和使用。下面就詳細介紹下在Windows操作系統中如何編譯并且使用FFmpeg做應用開發。
下載源碼
到FFmpeg官方下載最新的FFmpeg版本。CVS服務器地址如下:
cvs -z9 -d:pserver:anonymous@mplayerhq.hu:/cvsroot/ffmpeg co ffmpeg。
現在已改成SVN下載:
svn://svn.mplayerhq.hu/ffmpeg/trunk
編譯需要的工具
1)MinGW-5.0.2.exe?
2)MSYS-1.0.11.exe(安裝的時候需要注意,將MSYS-1.0.10.exe裝到MinGW的bin目錄下:我的安裝目錄為C:/MinGW/bin/1.0),由于新版的ffmpeg需要較高的MSYS,將bash-3.1-MSYS-1.0.11-snapshot.tar.bz2解壓,然后將bin的文件拷貝到C:/MinGW/bin/1.0/bin下面
3)如果提示沒有yasm,下載yasm-0.6.0.tar.gz,并按下提示安裝
/*************yasm begin**************
要安裝x264,就需要用yasm來編譯。那就先裝個yasm吧。
yasm下載網址:http://www.tortall.net/projects/yasm/releases/yasm-0.6.0.tar.gz
#tar xzvf yasm-0.6.0.tar.gz
#cd yasm-0.6.0
#./configure --prefix=/usr/local/yasm
#make
#make install
/*************that is ok here*********************/
#export PATH="$PATH:/usr/local/yasm/bin"
#vi /etc/profile
--[在最後,插入]—
export PATH="$PATH:/usr/local/yasm/bin"
/*************yasm end**************
編譯步驟
1、配置
用記事本打開C:/MinGW/bin/MSYS-1.0.10下msys.bat文件。在第一行添加對vcvars32.bat的引用。vcvars32.bat在VC7的bin下面,如下:
call D:/WindowsXP/Microsoft Visual Studio .NET 2003/Vc7/bin/vcvars32.bat
@echo off
rem Copyright (C):? 2001, 2002? Earnie Boyd
rem?? mailto:earnie@users.sf.net ............
2、運行msys.bat,效果如下:
3、編譯x264
1)下載x264源碼
???? 地址:svn://svn.videolan.org/x264/trunk
????????? 或svn co svn://svn.videolan.org/x264/trunk x264
?
2)編譯x264
編譯靜態庫:
svn co svn://svn.videolan.org/x264/trunk x264
cd x264
./configure --prefix=/static
make
make install
編譯動態庫
svn co svn://svn.videolan.org/x264/trunk x264
cd x264
patch -p0 < dll.patch
./configure --prefix=/shared --enable-shared
make
make install
如果make install報錯,沒關系,將x264庫文件拷貝過去,如:cp libx264.* /shared/lib/.
4.configure ffmpeg
./configure --enable-shared --disable-static --enable-memalign-hack --enable-libx264 --enable-gpl (--enable-libx264 --enable-gpl:表示支持x264)
注:按照上述步驟,好像有時會提示沒有找到x264,經過幾翻周折,決定采用最笨的方法:
1)將x264.h文件拷貝到C:/MinGW/include下面
2)將libx264.a,libx264.so,libx264.so.47文件拷貝到C:/MinGW/mingw32/lib
3)./configure --enable-shared --disable-static --enable-memalign-hack --enable-libx264 --enable-gpl
5、make ffmpeg
下面就執行make了。如果沒有出現什么錯誤的話,就再執行make install。
6合并libavcodec和libavutil
1) 新建一個目錄make_my
2) 拷貝需要的.o文件
a) #cp ffmpeg/libavcodec/*.o make_my
b) #mkdir make_my/i386
c) #cp ffmpeg/libavcodec/i386/*.o make_my/i386
d) #cp ffmpeg/libavutil/*.o make_my
3) 合并libavcodec和libavutil成一個庫(注意路徑問題)
gcc -shared -Wl,--output-def,avcodec-51.def,--out-implib,libavcodec.dll.a -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base -Wl, --warn-common -Wl,-rpath-link,"/e/H323Codec/VideoCodec/ffmpeg/ffmpeg_build/ffmpeg.r9450"/libavcodec -Wl,-rpath-link, "/e/H323Codec/VideoCodec/ffmpeg/ffmpeg_build/ffmpeg.r9450"/libavformat -Wl,-rpath-link, "/e/H323Codec/VideoCodec/ffmpeg/ffmpeg_build/ffmpeg.r9450"/libavutil -o libavcodec.dll bitstream.o utils.o allcodecs.o mpegvideo.o jrevdct.o jfdctfst.o jfdctint.o resample.o resample2.o dsputil.o motion_est.o imgconvert.o mpeg12.o simple_idct.o ratecontrol.o eval.o error_resilience.o raw.o faandct.o parser.o rangecoder.o h263.o opt.o bitstream_filter.o audioconvert.o imgresample.o i386/fdct_mmx.o i386/cputest.o i386/dsputil_mmx.o i386/mpegvideo_mmx.o i386/motion_est_mmx.o i386/simple_idct_mmx.o i386/idct_mmx_xvid.o i386/fft_sse.o i386/fft_3dn.o i386/fft_3dn2.o aasc.o ac3enc.o ac3tab.o ac3.o alac.o asv1.o atrac3.o mdct.o fft.o avs.o bethsoftvideo.o bmp.o bmpenc.o c93.o cavs.o cavsdsp.o golomb.o cinepak.o cljr.o cook.o cscd.o cyuv.o dca.o dnxhddec.o dsicinav.o dvbsubdec.o dvbsub.o dvdsubdec.o dvdsubenc.o dv.o 8bps.o ffv1.o huffyuv.o flac.o flacenc.o flicvideo.o 4xm.o fraps.o gifdec.o lzw.o gif.o h261dec.o h261.o h261enc.o h263dec.o h264.o h264idct.o cabac.o idcinvideo.o imc.o indeo2.o indeo3.o interplayvideo.o dpcm.o jpeglsdec.o jpegls.o mjpegdec.o mjpeg.o jpeglsenc.o kmvc.o ljpegenc.o mjpegenc.o loco.o mace.o mjpegbdec.o mmvideo.o mpegaudiodec.o mpegaudiodecheader.o mpegaudio.o mpegaudiodata.o mpegaudioenc.o mpc.o msmpeg4.o msmpeg4data.o msrle.o msvideo1.o lcl.o nuv.o rtjpeg.o pnmenc.o pnm.o ptx.o qdm2.o qdrw.o qpeg.o qtrle.o ra144.o ra288.o roqvideodec.o roqvideo.o roqvideoenc.o elbg.o roqaudioenc.o rpza.o rv10.o sgidec.o sgienc.o rle.o shorten.o smacker.o smc.o snow.o sonic.o sp5xdec.o svq1.o targa.o targaenc.o vp3.o xiph.o vp3dsp.o tiertexseqv.o tiff.o tiffenc.o lzwenc.o truemotion1.o truemotion2.o truespeech.o tscc.o tta.o txd.o s3tc.o ulti.o vc1.o vc1data.o vc1dsp.o vcr1.o vmdav.o vmnc.o vorbis_dec.o vorbis.o vorbis_data.o vorbis_enc.o vp5.o vp56.o vp56data.o vp6.o vqavideo.o wavpack.o wmadec.o wma.o wmaenc.o wnv1.o ws-snd1.o xan.o xl.o pcm.o adpcm.o adx.o g726.o libx264.o aac_parser.o aac_ac3_parser.o ac3_parser.o cavs_parser.o dca_parser.o dvbsub_parser.o dvdsub_parser.o h261_parser.o h263_parser.o h264_parser.o mjpeg_parser.o mpeg4video_parser.o mpegaudio_parser.o mpegvideo_parser.o pnm_parser.o vc1_parser.o dump_extradata_bsf.o remove_extradata_bsf.o noise_bsf.o mp3_header_compress_bsf.o mp3_header_decompress_bsf.o mjpega_dump_header_bsf.o imx_dump_header_bsf.o i386/idct_mmx.o i386/cavsdsp_mmx.o i386/snowdsp_mmx.o i386/vp3dsp_mmx.o i386/vp3dsp_sse2.o mathematics.o rational.o intfloat_readwrite.o crc.o md5.o lls.o adler32.o log.o mem.o fifo.o tree.o lzo.o random.o aes.o base64.o -L"/e/H323Codec/VideoCodec/ffmpeg/ffmpeg_build/ffmpeg.r9450"/libavutil -lavutil -lm -lx264