ijkplayer ffmpeg android独立コンパイル
3253 ワード
ijkplayerでffmpegをコンパイルする前にandroid standaloneツールチェーンを生成する必要があります.他のコンパイル手順は基本的に標準ffmpegのコンパイルと同じです.そのコンパイルは主に2つのスクリプトに依存し、(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