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

ijkplayer ffmpeg android独立编译

2016-06-05 18:08 447 查看
ijkplayer中ffmpeg编译前会需要生成android standalone工具链,其他的编译步骤基本跟标准ffmpeg的编译相同。

其编译主要依赖两个脚本,

(1)是顶级目录下config/module.sh

(2)是android/contrib/tool/do-compile-ffmpeg.sh中关于cross compile相关的内容。

于是我就自助了一个ffmpeg编译脚本。简单说明下,ijkplayer中是通过link *.o 成shared library。我查了下gcc本身支持将.a直接链接成.so库,即通过-Wl,–whole-archive参数。

#!/bin/bash
export candidates_dir="/xx/candidates"

build_ffmpeg()
{
source ijkplayer/config/module.sh

cd ffmpeg
make distclean
FF_CFG_FLAGS=""
FF_CFLAGS=""

if [ "$1" = "armv7a" ]; then
FF_CROSS_PREFIX=arm-linux-androideabi
FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=arm --enable-neon --enable-thumb"
fi

BUILD="--enable-static --disable-shared"
FF_CFG_FLAGS="$FF_CFG_FLAGS --cross-prefix=${FF_CROSS_PREFIX}- --enable-cross-compile --target-os=linux --enable-pic --enable-asm --enable-inline-asm --enable-optimizations --enable-debug --enable-small"
FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS -march=armv7-a -mfloat-abi=softfp -mthumb"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"

./configure --prefix=${candidates_dir} ${FF_CFG_FLAGS} ${COMMON_FF_CFG_FLAGS} $BUILD --extra-cflags="-I${candidates_dir}/include $FF_CFLAGS $FF_EXTRA_CFLAGS" --extra-ldflags="-L${candidates_dir}/lib $FF_DEP_LIBS $FF_EXTRA_LDFLAGS" --extra-libs="-ldl"
make -j4
make install
cd -
cd ${candidates_dir}/lib
${FF_CROSS_PREFIX}-gcc -shared -fPIC -o libijkffmpeg.so -Wl,--no-undefined -Wl,--whole-archive -lm -lz libavformat.a libavcodec.a libavutil.a libavfilter.a libswresample.a libswscale.a -Wl,--no-whole-archive -lgcc
}

build_ffmpeg armv7a
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: