6. 编译ffmpeg,链接libx264,libfaac,libfaad

确保libx264,libfaac,libfaad都是静态库

Ffmpeg编译会出现很多问题,我们首先从配置configure文件开始

#cd ffmpeg

#./configure \

--enable-memalign-hack \

--target-os=mingw32ce \

--arch=arm \

--enable-cross-compile \

--prefix=/wm \

--extra-cflags=-I/wm/include \

--extra-ldflags=-L/wm/lib \

--cross-prefix=arm-mingw32ce- \

--enable-small \

--enable-gpl \

--enable-shared \

--disable-static \

--disable-mmx \

--disable-zlib \

--disable-ipv6 \

--disable-debug \

--disable-ffmpeg \

--disable-ffserver \

--disable-ffplay \

--disable-vhook \

--disable-encoders \

--disable-network \

--disable-muxers \

--disable-decoders \

--disable-filters \

--disable-demuxers \

--disable-devices \

--disable-protocols \

--disable-bsfs \

--disable-parsers \

--enable-libfaac \

--enable-encoder=libfaac \

--enable-libfaad \

--enable-decoder=libfaad \

--enable-libx264 \

--enable-encoder=libx264 \

--enable-decoder=h264 \

--extra-cflags="-march=armv4 -mtune=xscale"

由于命令过长,可以写一个shell脚本,然后把这些贴过去

此时,大部分都会出现libx264 not found错误

解决方法:

打开configure文件,找到"enable libx264 && require llibx264 x264.h x264_encoder_open -lx264 -lm"这一行,改为"enabled libx264    && require2 libx264 "stdint.h x264.h" x264_encoder_open_84 -lx264 -lm",有的ffmpeg中不是x264_encoder_open而是x264_encoder_init,照样可以这样更改。

#cd libavutil

#make

这里面不会有错误,但是请注意:

如果在cygwin中导入了微软提供的lib命令,你注意看命令行就会发现有问题:

Lib /MACHINE:i386 /DEF:libavutil-49.def /OUT:libavutil-49.lib

注意到了没:i386

我们是要放到手机上运行了,所以最起码得是arm

所以我们自己手动输入如下命令:

Lib /MACHINE:arm /DEF:libavutil-49.def /OUT:libavutil-49.lib

#make install

#cd libavcodec

#make

这里会出现错误,一般都是文件后缀为.s的文件,可悲的是,我对汇编感冒,只能到网上求助,不过幸好有解决方法:

打开出错的文件,将所有的func替换为.global,注释掉endfunc,再次编译,出现新的错误,然后根据错误提示的行数,注释掉!

#make install

#cd libavformat

#make

#make install

这个format太好了,什么错误都没有

从此可以运行在wince上的ffmpeg包括libx264,libaac,libaad编译完成,可以运行了。