您的位置:首页 > 移动开发 > Android开发

FFmpeg+x264编译Android库

2016-08-12 14:25 281 查看
参考文章: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!"


遇到的错误跟引文中不太一样,根据提示做相应修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: