红联Linux门户
Linux帮助

ijkplayer ffmpeg android独立编译

发布时间:2016-07-26 10:43:19来源:linux网站作者:xiaoyur347
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
 
本文永久更新地址:http://www.linuxdiyf.com/linux/22717.html