现在的位置: 首页 > 综合 > 正文

Cygwin下用Android NDK r6b编译ffmpeg -0.8.1

2013年01月07日 ⁄ 综合 ⁄ 共 2017字 ⁄ 字号 评论关闭

经历了N多Error,终于编译出了libffmpeg.so,这个版本到底能不能用还有待验证。

开发环境搭建参考这篇文章:http://hi.baidu.com/lizhengjun2010/blog/item/08b7fb1b79dc9befe1fe0b09.html

ffmpeg编译参考这篇文章:http://abitno.me/compile-ffmpeg-android-ndk

这里想说的是注意你的NDK版本,我用的是r6b,下载地址参考:  http://www.cnblogs.com/yaotong/archive/2011/01/25/1943615.html

编译ffmpeg之前必须得先configure一下,configure是一个shell脚本,根据命令行参数不同来裁剪模块,生成特定的config.h文件,这是关键的一步。confiure脚本文件在ffmpeg目录里可以找到。为了方便我们重新建立以个shell脚本文件config.sh,这个文件只是为了编译方便,如果你不讨厌每次编译都敲一长串命令的话完全可以不用这个文件。
注意:1.编写config脚本时候,其中的路径需要使用windows形式的路径,不能使用/cygwindriver/d/android 这种格式的路径。
            2.一定要手动指定临时目录,否则很可能因为无法写入windows系统临时目录而失败(和权限无关)。
我的NDK目录是C:/android-ndk-r6b,ffmpeg-0.8.1放在C:/jni目录下,jni是我自己建的临时文件夹。编写config.sh脚本如下:

#!/bin/bash
export TEMPDIR="C:/jni"
export NDKROOT="C:/android-ndk-r6b"
PREBUILT=$NDKROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows
PLATFORM=$NDKROOT/platforms/android-9/arch-arm
./configure --target-os=linux \
	--arch=arm \
	--enable-version3 \
	--enable-gpl \
	--enable-nonfree \
	--disable-stripping \
	--disable-ffmpeg \
	--disable-ffplay \
	--disable-ffserver \
	--disable-ffprobe \
	--disable-encoders \
	--disable-muxers \
	--disable-devices \
	--disable-protocols \
	--enable-protocol=file \
	--enable-avfilter \
	--disable-network \
	--disable-avdevice \
	--enable-cross-compile \
	--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
	--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
	--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
	--extra-cflags="-fPIC -DANDROID" \
	--disable-asm \
	--enable-neon \
	--enable-armv5te \
	--extra-ldflags="-Wl,-T,$PREBUILT/arm-linux-androideabi/lib/ldscripts/armelf_linux_eabi.x -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/crtbegin.o $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/crtend.o -lc -lm -ldl"

应该根据自己的情况设定NDKROOT,configure命令选项的含义可以参考configure文件(直接打开即可)。

编写完后,执行如下命令:

chmod +x config.sh

./config.sh

运行成功的话,会在ffmpeg的目录下生成config.h, config.mak两个文件。这是后面编写Android.mk文件所需要的。

接下来的工作可以完全参考:http://abitno.me/compile-ffmpeg-android-ndk

经过一段时间的编译后会在jni的同层目录下生成两个文件夹obj,libs,这里面就包含了编译后生产的一推.so文件。这些文件怎么应用我也正在学习,以后会慢慢写出来。

抱歉!评论已关闭.