2020年7月14日 星期二

android_ffmpeg compile

ffmpeg:
https://ffmpeg.org/download.html

------------------------------------------------------
build ffmpeg on linux:
https://juejin.im/post/5d831333f265da03c61e8a28

ffmpeg-4.1.3 -> 4.1.5
Ndk r17c -> r21b

失敗

利用linux server(82.225), 製作xxx.sh檔 並執行,
主要注意:
cc& cxx 設定為clang & clang++
--prefix 設為$(pwd)/android/armv8-a (or armv7-a or x86 or x86-64)
Cflags 設定在各abi不同


1.
build_android
    --cc=$CC
    --cxx=$CXX
後面沒 “\”

2.
X86 or x86-64 => build_android =>新增 --disable-x86asm


3.
Gcc 改為 clang 




--------------------Android ffmpeg (以下為舊版,測試正常)----------------------------

* ndk r17c + ffmpeg 4.1.3 + linux server compile

---------------------------build_android.sh-------------------

#!/bin/bash
NDK=/home/chinghungpan/Android/android-ndk-r17c
SYSROOT_v7a=$NDK/platforms/android-21/arch-arm/
SYSROOT_v8a=$NDK/platforms/android-21/arch-arm64/
SYSROOT_x86=$NDK/platforms/android-21/arch-x86/
SYSROOT_x86_64=$NDK/platforms/android-21/arch-x86_64/

TOOLCHAIN_v7a=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
TOOLCHAIN_v8a=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
TOOLCHAIN_x86=$NDK/toolchains/x86-4.9/prebuilt/linux-x86_64
TOOLCHAIN_x86_64=$NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64

PREFIX_v7a=$(pwd)/../AS_SixFfmpeg/app/src/main/jni/armeabi-v7a
PREFIX_v8a=$(pwd)/../AS_SixFfmpeg/app/src/main/jni/arm64-v8a
PREFIX_x86=$(pwd)/../AS_SixFfmpeg/app/src/main/jni/x86
PREFIX_x86_64=$(pwd)/../AS_SixFfmpeg/app/src/main/jni/x86_64

ADDI_CFLAGS="-marm"
function build_v7a
{
if [ -f config.h ]; then
    rm config.h
fi
./configure \
--prefix=$PREFIX_v7a \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--disable-asm --enable-pic \
--disable-linux-perf \
--cross-prefix=$TOOLCHAIN_v7a/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT_v7a \
--extra-cflags="-Os -fpic $ADDI_CFLAGS -isysroot $NDK/sysroot -I$NDK/sysroot/usr/include/arm-linux-androideabi" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4
make install
cp -rf $PREFIX_v7a/include/* $PREFIX_v7a/..
}
function build_v8a
{
if [ -f config.h ]; then
    rm config.h
fi
./configure \
--prefix=$PREFIX_v8a \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--disable-asm --enable-pic \
--disable-linux-perf \
--cross-prefix=$TOOLCHAIN_v8a/bin/aarch64-linux-android- \
--target-os=android \
--arch=aarch64 \
--enable-cross-compile \
--sysroot=$SYSROOT_v8a \
--extra-cflags="-Os -fpic -isysroot $NDK/sysroot -I$NDK/sysroot/usr/include/aarch64-linux-android -D__ANDROID_API__=21" \
--extra-ldflags="$ADDI_LDFLAGS -shared" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4
make install
}

function build_x86
{
if [ -f config.h ]; then
    rm config.h
fi
./configure \
--prefix=$PREFIX_x86 \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--disable-asm --enable-pic \
--disable-linux-perf \
--cross-prefix=$TOOLCHAIN_x86/bin/i686-linux-android- \
--target-os=android \
--arch=i686 \
--enable-cross-compile \
--sysroot=$SYSROOT_x86 \
--extra-cflags="-Os -fpic -isysroot $NDK/sysroot -I$NDK/sysroot/usr/include/i686-linux-android -D__ANDROID_API__=21" \
--extra-ldflags="$ADDI_LDFLAGS -shared" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4
make install
}


function build_x86_64
{
if [ -f config.h ]; then
    rm config.h
fi
./configure \
--prefix=$PREFIX_x86_64 \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--disable-asm --enable-pic \
--disable-linux-perf \
--cross-prefix=$TOOLCHAIN_x86_64/bin/x86_64-linux-android- \
--target-os=android \
--arch=x86_64 \
--enable-cross-compile \
--sysroot=$SYSROOT_x86_64 \
--extra-cflags="-Os -fpic -isysroot $NDK/sysroot -I$NDK/sysroot/usr/include/x86_64-linux-android -D__ANDROID_API__=21" \
--extra-ldflags="$ADDI_LDFLAGS -shared" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4
make install
}

#build_v7a
#build_v8a
#build_x86
build_x86_64