利用NDK(r20) 编译FFmpeg 4.2.1 Android版本

FFMpeg编译

介绍

编译FFmpeg Android版本太难了,搜了各种民间教程,教程的操作系统、NDK版本、FFmpeg版本都不一样。那如果想整一个最新的版本怎么办呢?今天我就来试试,我的系统是Mac os,也同样适用于Linux,Window系统的话暂时不行

下载

  1. 下载FFmpeg源码 源码下载
  2. 如果你是用Mac或Linux用户并且安装了AndroidStudio,用AndroidStudio更新NDK即可,不需要重新下载
  3. Windows用户暂时不知道怎么整
  4. 你想重新下载也可以 下载地址

解压

tar -xvf ffmpeg-4.2.1.tar.bz2

开始编译

1. 修改so文件命名规则

# 将ffmpeg-4.2.1目录中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)'

2. 创建并粘贴编译脚本文件

  1. 将终端切换到ffmpeg-4.2.1目录下,创建build_android.sh
cd ffmpeg-4.2.1
touch build_android.sh
  1. 粘贴以下内容到build_android.sh并保存
#!/bin/bash
NDK=/Users/julian/Library/Android/sdk/ndk-bundle
HOST_TAG=darwin-x86_64
#HOST_TAG 的值根据系统修改
#macOS  darwin-x86_64
#Linux   linux-x86_64
#32-bit Windows  windows
#64-bit Windows  windows-x86_64
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG
API=21

function build_android
{
echo "Compiling FFmpeg for $CPU and prefix is $PREFIX"
./configure \
    --prefix=$PREFIX \
    --disable-x86asm \
    --disable-neon \
    --disable-hwaccels \
    --disable-gpl \
    --disable-postproc \
    --enable-shared \
    --enable-jni \
    --disable-mediacodec \
    --disable-decoder=h264_mediacodec \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$CROSS_PREFIX \
    --target-os=android \
    --arch=$ARCH \
    --cpu=$CPU \
    --cc=$CC \
    --cxx=$CXX \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
# make clean
# make -j2
# make install
echo "The Compilation of FFmpeg for $CPU is completed"
}


# arm64-v8a   aarch64-linux-android

# ARCH=arm64
# CPU=armv8-a
# TRIPLE=aarch64-linux-android
# STRIP=aarch64-linux-android
# OPTIMIZE_CFLAGS="-march=$CPU"


# armeabi-v7a armv7a-linux-androideabi

ARCH=arm
CPU=armv7-a
TRIPLE=armv7a-linux-androideabi
STRIP=arm-linux-androideabi
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "

# # x86 i686-linux-android

# ARCH=x86
# CPU=x86
# TRIPLE=i686-linux-android
# STRIP=i686-linux-android
# OPTIMIZE_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"

# x86-64  x86_64-linux-android

# ARCH=x86_64
# CPU=x86-64
# TRIPLE=x86_64-linux-android
# STRIP=x86_64-linux-android
# OPTIMIZE_CFLAGS="-march=$CPU -msse4.2 -mpopcnt -m64 -mtune=intel"

CC=$TOOLCHAIN/bin/$TRIPLE$API-clang
CXX=$TOOLCHAIN/bin/$TRIPLE$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/$HOST_TAG/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/$STRIP-
PREFIX=$(pwd)/android/$CPU
build_android


3. 配置build_android.sh参数

  1. 配置NDK路径,示例中我配置的是AndroidStudio安装后的bundle

NDK=/Users/julian/Library/Android/sdk/ndk-bundle

  1. 修改HOST_TAG的配置

HOST_TAG 的值根据系统修改,由于我的是mac 所以我的HOST_TAG=darwin-x86_64

电脑操作系统 HOST_TAG 的值
macOS darwin-x86_64
Linux linux-x86_64
32-bit Windows windows
64-bit Windows windows-x86_64
  1. 选择需要编译的版本 默认为 armv7-a

一次只能编译一种版本 通过注释和取消注释

  1. 修改build_android.sh权限
chmod +x build_android.sh

4. 编译

./build_android.sh

5. 等待

你可能感兴趣的:(利用NDK(r20) 编译FFmpeg 4.2.1 Android版本)