引言:最近一直致力于多媒体应用开发,一说起编码解码就不得不说下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