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編譯完成,可以運行了。