ffmpeg 编译Android

Posted 雨中漫步

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg 编译Android相关的知识,希望对你有一定的参考价值。

环境 macOS 10.15.4    NDK 21.3.6528147   ffmpeg 4.2.3

1.执行sudo xcodebuild -license,防止编译的时候找不到一些文件报错

2.下载ffmpeg(4.2.3),解压后进入主目录,修改configure文件,找到

SLIBNAME_WITH_MAJOR=$(SLIBNAME).$(LIBMAJOR)
LIB_INSTALL_EXTRA_CMD=$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"
SLIB_INSTALL_NAME=$(SLIBNAME_WITH_VERSION)
SLIB_INSTALL_LINKS=$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)

改为:

SLIBNAME_WITH_MAJOR=$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)
LIB_INSTALL_EXTRA_CMD=$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"
SLIB_INSTALL_NAME=$(SLIBNAME_WITH_MAJOR)
SLIB_INSTALL_LINKS=$(SLIBNAME)

3.下载NDK,我这里直接在android Studio上下载,路径在~/Library/Android/sdk/ndk/21.3.6528147 ,将NDK路径加入path

编辑~/.bash_profile:

NDK_HOME=~/Library/Android/sdk/ndk/21.3.6528147
PATH=${PATH}:${NDK_HOME}

export PATH
export NDK_HOME

执行source ~/.bash_profile,使得路径实时生效

4.

#!/bin/sh
# 测试通过 sh android.sh armv8-a   sh android.sh armv7a sh android.sh i686 sh android.sh x86-64

NDK=${NDK_HOME}
ANDROID_API=29
# armv8-a armv7a aarch64 i686 x86_64
CPU=armv8-a
# arm aarch64 i686 x86_64
ARCH=arm64
PLATFORM=darwin-x86_64
TOOLCHAIN=${NDK}/toolchains/llvm/prebuilt/${PLATFORM}


#OPTIMIZE_CFLAGS="-march=$CPU"
if [ "$#" -lt 1 ]; then
    CPU=armv8-a
else
    CPU=$(tr [A-Z] [a-z] <<< "$1")
fi
case ${CPU} in
    arm|armv5|armv6|armv7|armeabi)
    echo ${CPU}
    ;;
    armv7a|armeabi-v7a)
    ARCH=arm
    CC=${TOOLCHAIN}/bin/armv7a-linux-androideabi${ANDROID_API}-clang
    CXX=${TOOLCHAIN}/bin/armv7a-linux-androideabi${ANDROID_API}-clang++
    CROSS_PREFIX=${TOOLCHAIN}/bin/arm-linux-androideabi-
    ;;
    hard|armv7a-hard|armeabi-v7a-hard)
    echo ${CPU}
    ;;
    neon|armv7a-neon)
    ;;
    armv8|armv8-a|aarch64|arm64|arm64-v8a)
    # 验证成功
    ARCH=arm64
    CC=${TOOLCHAIN}/bin/aarch64-linux-android${ANDROID_API}-clang
    CXX=${TOOLCHAIN}/bin/aarch64-linux-android${ANDROID_API}-clang++
    CROSS_PREFIX=${TOOLCHAIN}/bin/aarch64-linux-android-
    ;;
    mips|mipsel)
    echo ${CPU}
    ;;
    mips64|mipsel64|mips64el)
    echo ${CPU}
    ;;
    i686)
    ARCH=x86
    CC=${TOOLCHAIN}/bin/i686-linux-android${ANDROID_API}-clang
    CXX=${TOOLCHAIN}/bin/i686-linux-android${ANDROID_API}-clang++
    CROSS_PREFIX=${TOOLCHAIN}/bin/i686-linux-android-
    ;;
    x86-64|x64)
    ARCH=x86_64
    CC=${TOOLCHAIN}/bin/x86_64-linux-android${ANDROID_API}-clang
    CXX=${TOOLCHAIN}/bin/x86_64-linux-android${ANDROID_API}-clang++
    CROSS_PREFIX=${TOOLCHAIN}/bin/x86_64-linux-android-
    ;;
esac
echo "CPU:${CPU}"
echo "ARCH:${ARCH}"
# mac下是darwin-x86_64,Windows是windows-x86_64

#TARGET=${CPU}-linux-androideabi
PREFIX=$(pwd)/android/$CPU
SYSROOT=${TOOLCHAIN}/sysroot
PREFIX=$(pwd)/android/$CPU
CFFLAGS="-Os -fpic -march=${CPU}"
LDFLAGS="-marm"


function build_android
{
    ./configure
    --prefix=${PREFIX}
    --cross-prefix=${CROSS_PREFIX}
    --target-os=android
    --arch=${ARCH}
    --cpu=${CPU}
    --sysroot=${SYSROOT}
    --extra-cflags="-Os -fpic -march=${CPU}"
    --extra-ldflags=${LDFLAGS}
    --cc=${CC}
    --cxx=${CXX}
    --disable-doc
    --disable-ffplay
    --disable-ffprobe
    --disable-symver
    --disable-static
    --enable-ffmpeg
    --enable-avdevice
    --enable-cross-compile
    --enable-shared
    --enable-jni
    --enable-neon
    --enable-hwaccels
    --enable-gpl
    --enable-postproc
    $ADDITIONAL_CONFIGURE_FLAG
    make clean
    make -j16
    make install
}
build_android

 

以上是关于ffmpeg 编译Android的主要内容,如果未能解决你的问题,请参考以下文章

Android集成ffmpeg(一,Linux平台下编译ffmpeg)

Android FFMPeg——FFMpeg+libx264编译

Android 逆向Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(代码片段

FFmpeg移植Android编译生成多库

FFmpeg移植Android编译生成单个库

Android FFMpeg——编译FFmpeg