闲话不说,直接上代码!
1、编绎环境
宿主机:ubuntu12.04 x64 3.5.0-44-generic交叉编绎器:arm-linux-gcc 4.6.2目标平台:FreeScale I.MAX6 4核1.2G
2、准备工作
下载以下源码:
ffmpeg-1.0.1.tar.bz2
lame-3.99.5.tar.gz
last_x264.tar.bz2
SDL-1.2.15.tar.gz
xvidcore-1.3.2.tar.bz2
3、开始编绎
将下载源码包放到/opt/EmbedSky/freescale/E9/document/ffmpeg目录下,下面开始编绎过程。1、设置编绎用到的环境变量设置编绎后的安装目录lkp@lkp-desktop:/opt/EmbedSky/freescale/E9/document$ cd /opt/EmbedSky/freescale/E9/document/ffmpeg lkp@lkp-desktop:/opt/EmbedSky/freescale/E9/document/ffmpeg$ export ffmpeg_install=$PWD/__install lkp@lkp-desktop:/opt/EmbedSky/freescale/E9/document/ffmpeg$ echo $ffmpeg_install /opt/EmbedSky/freescale/E9/document/ffmpeg/__install lkp@lkp-desktop:/opt/EmbedSky/freescale/E9/document/ffmpeg$
2、编译支持264格式解码的库完成编绎和安装tar jxvf last_x264.tar.bz2 -C ./ cd x264-snapshot-20121205-2245/ CC=arm-linux-gcc AR=arm-linux-ar LD=arm-linux-gcc RANLIB=arm-linux-ranlib STRIP=arm-linux-strip ./configure --enable-shared --host=arm-linux --disable-asm --prefix=$ffmpeg_install make make install
3、编译支持libxvid库4、编译支持mp3的libmp3lame库cd /opt/EmbedSky/freescale/E9/document/ffmpeg tar jxvf xvidcore-1.3.2.tar.bz2 -C ./ cd xvidcore/build/generic/ ./configure --prefix=$ffmpeg_install --host=arm-linux --disable-assembly make make install
5、编译SDL库(生成ffplay需要SDL支持)cd /opt/EmbedSky/freescale/E9/document/ffmpeg/ tar zxvf lame-3.99.5.tar.gz -C ./ cd lame-3.99.5/ ./configure CC=arm-linux-gcc --host=arm-linux --target=linux --disable-shared --prefix=$ffmpeg_install make make install
6、编译ffmpegcd /opt/EmbedSky/freescale/E9/document/ffmpeg/ tar zxvf SDL-1.2.15.tar.gz -C ./ cd SDL-1.2.15/ ./configure --prefix=$ffmpeg_install --enable-shared --host=arm-linux CC=arm-linux-gcc AR=arm-linux-ar RANLIB=arm-linux-ranlib --disable-arts --disable-nasm --disable-video-x11 --disable-nas --disable-joystick --disable-cdrom make make install
这一步是最容易出错的地方,以下红色部分需要格外注意。将/opt/EmbedSky/freescale/E9/document/ffmpeg/__install/lib目录中生成的库拷贝到/opt/EmbedSky/toolchains/gcc-4.6.2/tq-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/default/lib目录下将/opt/EmbedSky/freescale/E9/document/ffmpeg/__install/include目录中生成的头文件拷贝到/opt/EmbedSky/toolchains/gcc-4.6.2/tq-linaro-toolchain/arm-fsl-linux-gnueabi/include目录下将/opt/EmbedSky/freescale/E9/document/ffmpeg/__install/bin目录中生成的可执行程序拷贝到/opt/EmbedSky/toolchains/gcc-4.6.2/tq-linaro-toolchain/arm-fsl-linux-gnueabi/bin/目录下
到此ffmpeg已经编绎完成!cd /opt/EmbedSky/freescale/E9/document/ffmpeg tar jxvf ffmpeg-1.0.1.tar.bz2 -C ./ cd ffmpeg-1.0.1/ ./configure --prefix=$ffmpeg_install --enable-shared --enable-libmp3lame --enable-static --enable-gpl --enable-cross-compile --arch=arm --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-linux-gcc --enable-swscale --cross-prefix=/opt/EmbedSky/toolchains/gcc-4.6.2/tq-linaro-toolchain/arm-fsl-linux-gnueabi/bin/ make make install
将生成的库和可执行程序拷贝到E9文件系统中的/opt/PDA/目录下,就可以播放视频和音频了。
4、常见问题
1、配置时出现错误
ERROR: libmp3lame >= 3.98.3 not found
If you think configure made a mistake, make sure you are using the latest
version from Git. If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "config.log" produced by configure as this will help
solving the problem.
这是在配置的时候选项中加入了--enable-libmp3lame选项(来支持mp3),然而配置时却找不到libmp3lame的库。通过咨询天嵌售后支持,建议将libmp3lame的库和头文件放到交叉编译器对应目录去。于是按照建议,复制相关库和头文件到编译器目录下,重新配置,OK通过。
2、顺利编译完成,但没生成ffplay可执行文件
这是由于SDL没加入到编译中去。要生成ffplay,配置的时候,这个选项是必须的:--cross-prefix=/opt/EmbedSky/toolchains/gcc-4.6.2/tq-linaro-toolchain/arm-fsl-linux-gnueabi/bin/,并把前面编译SDL生成的bin下面的sdl-config,拷贝到/opt/EmbedSky/toolchains/gcc-4.6.2/tq-linaro-toolchain/arm-fsl-linux-gnueabi/bin/这个目录下。做完这个,编译完成就可生成ffplay了。
ffmpeg编绎到此结束,下一篇介绍opencv的交叉编绎,敬请期待!