当前位置: 首页>移动开发>正文

FFMPEG-Android利用ndk(r21)编译最新版本ffmpeg4.2.2

前言
在Mac系统下编译ffmpeg真是太痛苦了,网上旧版的编译文档挺多的,但是程序员喜欢新东西,所以我就花费1天时间研究成功编译了目前最新版的ffmpeg(当前官网为4.2.2),而且用的是最新版的ndk(当前为r21)
准备工作

  • 1、下载最新的ffmpeg压缩文件
    地址:http://ffmpeg.org/download.html
    FFMPEG-Android利用ndk(r21)编译最新版本ffmpeg4.2.2,第1张
    ffmpeg.png
  • 2、下载最新的ndk
    地址:https://developer.android.google.cn/ndk/downloads/
    FFMPEG-Android利用ndk(r21)编译最新版本ffmpeg4.2.2,第2张
    NDK.png
  • 3、解压下载的两个文件
    FFMPEG-Android利用ndk(r21)编译最新版本ffmpeg4.2.2,第3张
    解压.png

    开始编译
    cd /ffmpeg-4.2.2目录下
    touch build_android.sh文件
    将以下shell代码粘贴到build_android.sh文件中
#!/bin/bash

NDK=/Volumes/TOOLS/android-ndk-r21
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
API=21

function build_android
{
echo "Compiling FFmpeg for $CPU"
./configure \
    --prefix=$PREFIX \
    --libdir=$LIB_DIR \
    --enable-shared \
    --disable-static \
    --enable-jni \
    --disable-doc \
    --disable-symver \
    --disable-programs \
    --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" \
    --disable-asm \
    $COMMON_FF_CFG_FLAGS
make clean
make -j8
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}

# # armv8-a
# source "config-env.sh"
# OUTPUT_FOLDER="arm64-v8a"
# ARCH=arm64
# CPU="armv8-a"
# TOOL_CPU_NAME=aarch64
# TOOL_PREFIX="$TOOLCHAIN/bin/$TOOL_CPU_NAME-linux-android"

# CC="$TOOL_PREFIX$API-clang"
# CXX="$TOOL_PREFIX$API-clang++"
# SYSROOT="$NDK/toolchains/llvm/prebuilt/darwin-x86_64/sysroot"
# PREFIX="${PWD}/android/$OUTPUT_FOLDER"
# LIB_DIR="${PWD}/android/libs/$OUTPUT_FOLDER"
# OPTIMIZE_CFLAGS="-march=$CPU"
# build_android

# armv7-a
source "config-env.sh"
OUTPUT_FOLDER="armeabi-v7a"
ARCH="arm"
CPU="armv7-a"
TOOL_CPU_NAME=armv7a
TOOL_PREFIX="$TOOLCHAIN/bin/arm-linux-androideabi"

CC="$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang"
CXX="$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++"
SYSROOT="$NDK/toolchains/llvm/prebuilt/darwin-x86_64/sysroot"
PREFIX="${PWD}/android/$OUTPUT_FOLDER"
LIB_DIR="${PWD}/android/libs/$OUTPUT_FOLDER"
OPTIMIZE_CFLAGS="-march=$CPU"
build_android

# x86
source "config-env.sh"
OUTPUT_FOLDER="x86"
ARCH="x86"
CPU="x86"
TOOL_CPU_NAME="i686"
TOOL_PREFIX="$TOOLCHAIN/bin/${TOOL_CPU_NAME}-linux-android"

CC="$TOOL_PREFIX$API-clang"
CXX="$TOOL_PREFIX$API-clang++"
SYSROOT="$NDK/toolchains/llvm/prebuilt/darwin-x86_64/sysroot"
PREFIX="${PWD}/android/$OUTPUT_FOLDER"
LIB_DIR="${PWD}/android/libs/$OUTPUT_FOLDER"
OPTIMIZE_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
build_android

# x86_64
# source "config-env.sh"
# OUTPUT_FOLDER="x86_64"
# ARCH="x86_64"
# CPU="x86-64"
# TOOL_CPU_NAME="x86_64"
# TOOL_PREFIX="$TOOLCHAIN/bin/${TOOL_CPU_NAME}-linux-android"

# CC="$TOOL_PREFIX$API-clang"
# CXX="$TOOL_PREFIX$API-clang++"
# SYSROOT="$NDK/toolchains/llvm/prebuilt/darwin-x86_64/sysroot"
# PREFIX="${PWD}/android/$OUTPUT_FOLDER"
# LIB_DIR="${PWD}/android/libs/$OUTPUT_FOLDER"
# OPTIMIZE_CFLAGS="-march=$CPU"
# build_android


里面NDK的目录替换为自己的真实目录
接着执行 ./build_android.sh


FFMPEG-Android利用ndk(r21)编译最新版本ffmpeg4.2.2,第4张
编译.png

编译完成查看文件

在/ffmpeg-4.2.2/android/目录下


FFMPEG-Android利用ndk(r21)编译最新版本ffmpeg4.2.2,第5张
结果.png

https://www.xamrdz.com/mobile/43b1848723.html

相关文章: