用Android NDK编译FFmpeg

Android内置的编解码器实在太少,于是我们需要FFmpeg。Android提供了NDK,为我们使用FFmpeg这种C语言代码提供了方便。

不过为了用NDK编译FFmpeg,还真的花费了不少时间,也得到了很多人的帮助,最应该谢谢havlenapetr。我觉得我现在这些方法算是比较简洁的了--

下面就尽量詳細的说一下我是怎么在项目中使用FFmpeg的,但是基于我混乱的表达能力,有不明白的就问我。

你得了解JNI和Android NDK的基本用法,若觉得我的文章还不错,可以看之前写的JNI简单入门和Android NDK入门

--------------------------------------------------------------------------------

首先创建一个标准的Android项目vPlayer

android create project -n vPlayer -t 8 -p vPlayer -k me.abitno.vplayer -a PlayerView然后在vPlayer目录里

mkdir jni && cd jni
wget http://ffmpeg.org/releases/ffmpeg-0.6.tar.bz2
tar xf ffmpeg-0.6.tar.bz2 && mv ffmpeg-0.6 ffmpeg && cd ffmpeg在ffmpeg下新建一个config.sh,内容如下,注意把PREBUILT和PLATFORM设置正确。另外里面有些参数你也可以自行调整,我主要是为了配置一个播放器而这样设置的。

#!/bin/bash

PREBUILT=/home/abitno/Android/android-ndk-r4/build/prebuilt/linux-x86/arm-eabi-4.4.0
PLATFORM=/home/abitno/Android/android-ndk-r4/build/platforms/android-8/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-mpegaudio-hp \
 --disable-avdevice \
 --enable-cross-compile \
 --cc=$PREBUILT/bin/arm-eabi-gcc \
 --cross-prefix=$PREBUILT/bin/arm-eabi- \
 --nm=$PREBUILT/bin/arm-eabi-nm \
 --extra-cflags="-fPIC -DANDROID" \
 --disable-asm \
 --enable-neon \
 --enable-armv5te \
 --extra-ldflags="-Wl,-T,$PREBUILT/arm-eabi/lib/ldscripts/armelf.x -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtbegin.o $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtend.o -lc -lm -ldl"运行config.sh开始configure

chmod +x config.sh
./config.shconfigure完成后,编辑刚刚生成的config.h,找到这句

#define restrict restrictAndroid的GCC不支持restrict关键字,于是修改成下面这样

#define restrict编辑libavutil/libm.h,把其中的static方法都删除。

分别修改libavcodec、libavfilter、libavformat、libavutil、libpostproc和libswscale下的Makefile,把下面两句删除

相关推荐