参考文章:http://blog.csdn.net/chance_yin/article/details/17711003
1. 准备
(1)版本 ffmpeg-3.1.1.tar.bz2 last_x264.tar.bz2
(2) 目录
根目录:/home/lsj/ffmpeg_x264
生成文件目录:/home/lsj/ffmpeg_x264/build
ffmpeg目录:/home/lsj/ffmpeg_x264/ffmpeg
x264目录:/home/lsj/ffmpeg_x264/x264
2. 编译x264
将android_x264.sh文件放在x264目录下并运行。
export NDK=$NDK_HOME
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt
export PLATFORM=$NDK/platforms/android-19/arch-arm
export PREFIX=../build
./configure --prefix=$PREFIX \
--enable-static \
--enable-pic \
--disable-asm \
--disable-cli \
--host=arm-linux \
--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
--sysroot=$PLATFORM
再执行以下操作:
3. 编译ffmpeg
将android_ffmpeg_config.sh和android_ffmpeg_make.sh文件放在根目录下。
(1)更改ffmpeg/configure文件,以修改生成后的so文件命名:
(2) 运行android_ffmpeg_config.sh。
T=`pwd`/build/ffmpeg && rm -rf $DEST
SOURCE=`pwd`/ffmpeg
BUILD_HOME=/home/lsj/ffmpeg_x264/build
echo $DEST
echo $SOURCE
if [ -d ffmpeg ]; then
cd ffmpeg
else
echo "can not find ffmpeg source code"
exit 1
fi
if [ "$PIPESTATUS" != "0" ] ; then
echo "error in FFmpeg-Android.sh : 14 "
fi
TOOLCHAIN=/home/lsj/ffmpeg_x264/toolchain
SYSROOT=$TOOLCHAIN/sysroot/
$NDK_HOME/build/tools/make-standalone-toolchain.sh --platform=android-19 --install-dir=$TOOLCHAIN
export PATH=$TOOLCHAIN/bin:$PATH
export CC="arm-linux-androideabi-gcc"
export LD=arm-linux-androideabi-ld
export AR=arm-linux-androideabi-ar
#CFLAGS="-O3 -Wall -mthumb -pipe -fpic -fasm \
# -finline-limit=300 -ffast-math \
# -fstrict-aliasing \
# -fmodulo-sched -fmodulo-sched-allow-regmoves \
# -Wno-psabi -Wa,--noexecstack \
# -DANDROID -DNDEBUG"
CFLAGS="-Os -fPIC -marm"
FFMPEG_FLAGS="--target-os=linux \
--arch=arm \
--sysroot=$SYSROOT \
--enable-cross-compile \
--cross-prefix=arm-linux-androideabi- \
--enable-shared \
--enable-static \
--disable-symver \
--disable-doc \
--disable-ffplay \
--disable-ffmpeg \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-avfilter \
--disable-filters \
--disable-devices \
--disable-pthreads \
--disable-everything \
--enable-gpl \
--enable-muxers \
--enable-encoders \
--enable-protocols \
--enable-parsers \
--enable-demuxers \
--enable-decoders \
--enable-bsfs \
--enable-network \
--enable-swscale \
--enable-libx264 \
--enable-encoder=libx264 \
--enable-decoder=h264 \
--enable-muxer=h264 \
--enable-demuxer=h264 \
--disable-demuxer=sbg \
--disable-demuxer=dts \
--disable-parser=dca \
--disable-decoder=dca \
--extra-libs=-lx264 \
--enable-asm \
--enable-version3"
VERSION=armv7
cd $SOURCE
EXTRA_CFLAGS="-I$BUILD_HOME/include -march=armv7-a"
EXTRA_LDFLAGS="-L$BUILD_HOME/lib"
echo "EXTRA_CFLAGS= $EXTRA_CFLAGS"
echo $EXTRA_LDFLAGS
#PREFIX="$DEST/$VERSION" && mkdir -p $PREFIX
PREFIX="$BUILD_HOME/armv7" && mkdir -p $PREFIX
FFMPEG_FLAGS="$FFMPEG_FLAGS --prefix=$PREFIX"
echo "PREFIX=$PREFIX"
echo $FFMPEG_FLAGS
sh ./configure $FFMPEG_FLAGS --extra-cflags="$CFLAGS $EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" | tee $PREFIX/configuration.txt
echo "$?"
if [ "$?" = "0" ] ; then
echo "./configure success in shell-script"
else
echo "./configure erroe in shell-script"
exit 1
fi
cp config.* $PREFIX
再执行以下操作:
(3)运行android_ffmpeg_make.sh文件。
T=`pwd`/build/ffmpeg && rm -rf $DEST
SOURCE=`pwd`/ffmpeg
BUILD_HOME=/home/lsj/ffmpeg_x264/build
TOOLCHAIN=/home/lsj/ffmpeg_x264/toolchain
SYSROOT=$TOOLCHAIN/sysroot/
export PATH=$TOOLCHAIN/bin:$PATH
export CC="arm-linux-androideabi-gcc"
export LD=arm-linux-androideabi-ld
export AR=arm-linux-androideabi-ar
CFLAGS="-Os -fPIC -marm"
VERSION=armv7
cd $SOURCE
#PREFIX="$DEST/$VERSION" && mkdir -p $PREFIX
PREFIX="$BUILD_HOME/armv7" && mkdir -p $PREFIX
EXTRA_LDFLAGS="-L$BUILD_HOME/lib"
make clean
make -j4 || exit 1
make install || exit 1
#rm libavcodec/log2_tab.o
rm libavutil/log2_tab.o
#rm libavcodec/reverse.o
rm libavutil/reverse.o
rm libavformat/golomb_tab.o
rm libavformat/log2_tab.o
rm libswscale/log2_tab.o
rm libswresample/log2_tab.o
$CC -llog -lm -lz -shared --sysroot=$SYSROOT -Wl,--no-undefined -Wl,-z,noexecstack $EXTRA_LDFLAGS libavutil/*.o libavutil/arm/*.o libavcodec/*.o libavcodec/arm/*.o libavformat/*.o libswresample/*.o libswscale/*.o libswscale/arm/*.o libswresample/arm/*.o compat/strtod.o -o $PREFIX/libffmpeg.so -lx264 -L$BUILD_HOME/lib/-lx264
cp $PREFIX/libffmpeg.so $PREFIX/libffmpeg-debug.so
arm-linux-androideabi-strip --strip-unneeded $PREFIX/libffmpeg.so
echo "build successfully!"
遇到的错误跟引文中不太一样,根据提示做相应修改。