Mac版FFmpeg-4.2.1编译教程

mac2024-08-16  54

简要说明

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

环境的搭建

1下载FFmpge这里有两种方式

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

2下载NDK工具包

官网下载地址(官网)我使用的是Android studio sdk中的目前的版本是也是android-ndk-r20

下面就开始准备编译工作

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

cd ffmpeg-4.2.1

找到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

编译出错可能是缺少依赖库可以查看ffmpeg的信息

brew info ffmpeg

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

最新回复(0)