Mac版FFmpeg-4.2.1编译教程

简要说明

随着各个方面的硬件和软件的快速发展,尤其是5g的来临,网速更加的快,移动端的音视频和手游会更加的得倒快速的发展。所以不管是为了工作还是技能储备,很有必要学习下音视频的编解码、openGL等级技术。
下面以很有名的开源库FFmpeg的编译为开端:

环境的搭建

1下载FFmpge这里有两种方式

  1. 直接去官网下载(官网)
  2. 去github上下载源码(github),用版本管理下载有个好处就是你自己可以随意切换版本,想编译那个版本就编译那个版本,编译那个版本有问题了直接google或者百度慢慢解决问题,要有耐心终会编译成功。

2下载NDK工具包

  1. 官网下载地址(官网)我使用的是Android studio sdk中的目前的版本是也是android-ndk-r20Mac版FFmpeg-4.2.1编译教程_第1张图片

下面就开始准备编译工作

我这里下载的是FFmpeg的压缩包,直接解压进入目录

cd  ffmpeg-4.2.1

Mac版FFmpeg-4.2.1编译教程_第2张图片

找到configure文件

#将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)'

编写编译脚本build_android.sh(修改一位大神写的)

#!/bin/bash
#这里修改的是最低支持的android sdk版本(r20版本ndk中armv8a、x86_64最低支持21,armv7a、x86最低支持16)
API=29
# NDK的路径,根据自己的安装位置进行设置
export NDK=/Users/sundy/Documents/Development/Android/SDK/ndk-bundle
export SYSROOT=$NDK/platforms/android-27/arch-arm64
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/ # 这里找到对应得文件
function build_android
{
#相当于Android中Log.i
echo "Compiling FFmpeg for $CPU"
./configure \
    --prefix=$PREFIX \
    --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
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}

#armv8-a
ARCH=arm64
CPU=armv8-a
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"
build_android

#armv7-a
ARCH=arm
CPU=armv7-a
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
build_android

#x86
ARCH=x86
CPU=x86
CC=$TOOLCHAIN/bin/i686-linux-android$API-clang
CXX=$TOOLCHAIN/bin/i686-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/i686-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
build_android

#x86_64
ARCH=x86_64
CPU=x86-64
CC=$TOOLCHAIN/bin/x86_64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/x86_64-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU -msse4.2 -mpopcnt -m64 -mtune=intel"
build_android

将脚本文本放到ffmpeg根目录中,查看是否有读写权限ls -l

如果没有请添加权限

chmod 777 build_android.sh

准备工作都做好了,下面就可以开始编译了,如果没有错误就是漫长的等待。执行脚本文件

sudo ./build_android.sh

Mac版FFmpeg-4.2.1编译教程_第3张图片
编译出错可能是缺少依赖库可以查看ffmpeg的信息

brew info ffmpeg

Mac版FFmpeg-4.2.1编译教程_第4张图片
根据提示安装。在这里希望大家都能编译成功。有什么问题希望大家一起讨论,共同学习共同进步,谢谢大家。
以后会慢慢讲解如何使用,做一个简单的音视频播放器,尽情期待!!!

你可能感兴趣的:(android,音视频)