ffmpeg编译(生成Windows Mobile或Wince平台dll, lib)
介绍:本文简要介绍通过cygwin环境来编译生成ffmpeg。
包括解码组件libfaad与libopencore-amrnb的编译。
1)安装cygwin环境
具体安装过程可以看网上教程
假设装在c:/cygwin
2)安装最新cegcc_mingw32ce_cygwin
从网站http://sourceforge.net/projects/cegcc/files/下载
我安装的是:cegcc_mingw32ce_cygwin1.7_r1375.tar.bz2
解压缩至c:/cygwin/目录下,可以看到目录C:/cygwin/opt/mingw32ce_59/(我将mingw32ce改成了mingw32ce_59)
3)修改mingw32ce_59/arm-mingw32ce/include/errno.h文件,如下
//change for wince
//#ifdef __COREDLL__
#if 0
3)下载最新ffmpeg源码
我用的是:ffmpeg-export-2009-12-22版(即:SVN-r20910-snapshot)
解压缩至e:/ffmpeg_r20910_wm
4)修改e:/ffmpeg_r20910_wm/common.h文件,如下:
#ifndef av_cold
//GCC on MinGW has bug on "cold" feature
//#if (!defined(__ICC) || __ICC > 1110) && AV_GCC_VERSION_AT_LEAST(4,3)
#if 0
如果文件存在,可能还需修改e:/ffmpeg_r20910_wm/libavodec/dsputil_arm.S文件尾部,如下:
将bx lr 替换成:
#if defined(__ARM_ARCH_2__) || defined(__ARM_ARCH_3__) /
|| defined(__ARM_ARCH_3M__) || defined(__ARM_ARCH_4__)
mov pc, lr
#else
bx lr
#endif
5)按需下载各解码组件,如
faad2-2.7.zip (AAC解码组件)
opencore-amr-0.1.2.tar.gz (amr解码组件)
新建e:/ffmpeg_r20910_wm/codecs目录,将组件放入其中
6)编译各解码组件
6.1)设置编译环境
PATH=$PATH:/opt/mingw32ce_59/bin
6.2)libfaad
解压缩faad2-2.7.zip,依次执行
autoreconf -ivf
./configure --host=arm-mingw32ce --enable-static --disable-shared --prefix=/mobile
make (编译时出错mp4ffint.h什么的,不用管,libfaad.a已经生成)
make install
6.3)libopencore-amr
解压缩opencore-amr-0.1.2.tar.gz,依次执行
./configure --host=arm-mingw32ce --enable-static --disable-shared --prefix=/mobile
make (编译时出错perrror什么的,不用管,libopencore-amrnb.a libopencore-amrwb.a已经生成)
make install
7)编译ffmpeg
./configure --enable-memalign-hack --prefix=/mobile --target-os=mingw32ce --arch=arm --enable-cross-compile --cross-prefix=arm-mingw32ce- --
enable-libfaad --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-small --disable-static --enable-shared --enable-gpl --enable-
version3 --disable-mmx --disable-zlib --disable-ipv6 --disable-debug --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-encoders
--disable-network --disable-muxers --extra-ldflags="-L/mobile/lib" --extra-cflags="-I/mobile/include -march=armv4 -mtune=xscale"
此命令太长,可以将命令写入到sh文件(如doConfigure.sh)来执行。(出现libvdpau>=0.2提示,不用管)
make
make install
8)生成lib文件
将/mobile/bin/下的所有DLL拷贝出来(通过Windows查找),放入/Microsoft Visual Studio 8/VC/bin/DLL目录中,
按大小排序,删除一些1k左右的DLL,剩下的DLL改名,如avcodec-52.43.0.dll->avcodec-52.dll。
将生成的所有def文件也拷贝出来,放入同一目录下。
添加本机系统环境变量PATH->C:/Program Files/Microsoft Visual Studio 8/Common7/IDE;,注意结尾最后用“;”
在cmd命令行下,用/Microsoft Visual Studio 8/VC/bin/lib.exe /def:*.def /MACHINE:ARM 来生成LIB
以上编译后的DLL我自己在Windows Mobile平台上运行过,可以播放。有问题欢迎回贴讨论。