2012年(8)
分类: 嵌入式
2012-05-27 14:20:26
一.环境准备
1. Cygwin 1.7.11 ()
2. Android NDK r7b (http://developer.android.com/sdk/ndk/index.html )
3. Eclipse 3.6.2
二.FFMpeg下载
三.FFMpeg编译
1. 解压ffmpeg-0.8.7.tar.gz得到ffmpeg的源码ffmpeg-0.8.7,将源码拷贝到
NDK的Sample目录,我的为:
F:\android-ndk-r7b\samples\ffmpeg-0.8.7
2. 进入到ffmpeg-0.8.7,新建一个jni文件夹,是NDK默认build目录,
后将ffmpeg-0.8.7目录下(除去jni)的所有内容,都剪切进到jni目录下,
目录结构如下:
3. 在F:\android-ndk-r7b\samples\ffmpeg-0.8.7\jni\目录下新建两个文件config.sh、android.mk
config.sh内容如下:
export TMPDIR="D:/temp/android"
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows
PLATFORM=$NDK/platforms/android-8/arch-arm
./configure --target-os=linux \
--arch=arm \
--enable-version3 \
--enable-gpl \
--enable-nonfree \
--disable-doc \
--disable-stripping \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-encoders \
--disable-muxers \
--disable-devices \
--disable-protocols \
--enable-protocol=file \
--enable-avfilter \
--enable-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='-L$PLATFORM/usr/lib -nostdlib' \
注:<1>、TMPDIR是编译时的临时目录,必须有。如果没有,在下一步会执行./config.sh出现如下报错:
F:androidandroid-ndk-r7b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-gcc is unable to create an executable file. C compiler test failed.
<2>、$NDK是Android ndk根目录
<3>、 ./configure是指运行ffmpeg的配置文件,跟在后面的运行参数设置
android.mk内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg
include $(LOCAL_PATH)/config.mak
LOCAL_CFLAGS := -DHAVE_AV_CONFIG_H -std=c99
AVUTIL_C_FILES = adler32.c \
aes.c \
audioconvert.c \
avstring.c \
base64.c \
cpu.c \
crc.c \
des.c \
……
……
……
###########################################
LOCAL_ARM_MODE := arm
#include $(BUILD_STATIC_LIBRARY)
include $(BUILD_SHARED_LIBRARY)
由于android.mk太长,只附上部分,如有需要请mail我,
邮箱:zhaoch86@sina.cn
4. 准备编译
打开Cygwin命令行,cd到ffmpeg源码的jni目录,执行./config.sh,会在当前目录
生成两个文件:config.h、config.mak
在编译之前,还需要做如下修改:
<1>、将config.h中 #define restrict restrict 改为 #define restrict<2>、libavutil/libm.h中所有的static函数全部删掉
5. 编译ffmpeg,生成libffmpeg.so
cd.. à退到上层目录
在bash中输入$NDK/ndk-build
漫长等待(20分钟左右),会在libs\armeabi目录下生成libffmpeg.so
恭喜,成功!!!