【Android音视频】MacOS上FFmpeg5.0.1编译

1. FFmpeg官网下载链接(推荐下载release的版本):Download FFmpeghttp://ffmpeg.org/download.html#releases

 尽情去下载并开始编译吧

2. 下载压缩包,解压至自己想要的文件路径下即可。个人习惯用全英文路径,避免出现奇怪的问题。

3. Android Studio请预先下载好。点击AS右上角“SDK Manager”--“SDK Tools”,可在列表中找到ndk,不同版本的AS有默认的NDK版本,详见以下指导文章:

安装及配置 NDK 和 CMake  |  Android 开发者  |  Android Developers (google.cn)https://developer.android.google.cn/studio/projects/install-ndk#apply-specific-versionAndroid Gradle 插件版本说明  |  Android 开发者  |  Android Developers (google.cn)https://developer.android.google.cn/studio/releases/gradle-plugin#compatibility-7-1-04. 同理,点击右上角“SDK Manager”--“SDK Tools”,可在列表中找到CMake,比如3.10.2版本。

5. 配置环境变量。在用户目录下创建配置文件( .bash_profile )。打开你的shell工具,执行:

cd ~
touch .bash_profile
open -e .bash_profile

在编辑器中写入Android NDK路径等(请修改下述路径为你机器上的目标路径),当然你也可以将相应动作延迟到后续的脚本中去: 

export PATH=${PATH}:/Users/tao/Library/Android/sdk/tools
export PATH=${PATH}:/Users/tao/Library/Android/sdk/platform-tools

export ANDROID_NDK_ROOT=/Users/tao/Library/Android/sdk/ndk/21.4.7075529
export PATH=${PATH}:${ANDROID_NDK_ROOT}

写完后保存并关闭该文件。执行更新环境变量命令:

source .bash_profile

可以使用 env 查看当前的所有环境变量。若不小心把路径写错了,则重新执行上述编辑、保存、更新等操作即可(重新开一个shell标签页,然后再进行步骤5是个不错的选择)。

6. 修改FFmpeg文件夹下的configure文件。使用VS Code或者其它编辑软件打开configure文件。将以下代码进行修改:

# origin code.
# 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)'

# added by tao.
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

7. 请确定你要想要运行的目标Android设备的平台,例如 arm64-v8a。可使用以下命令获取你的Android设备的平台版本:

adb shell getprop ro.product.cpu.abi

8. 在该FFmpeg文件夹下创建编译脚本,可参考以下脚本(文件名自定义即可,例如 build_ffmpeg.sh)。在编写脚本之前,请你打开目录下的configure文件查看一下内容。比较直观的是,你会看到它提供了 --help 参数支持。执行它,然后认认真真看一下输出吧,这很有帮助。

./configure --help

9. 看完help的输出,你应该能看到,默认编译的是静态库(若你想编译动态库,则需要使用输入--enable-shared参数,详见下文,此脚本中按照--help的输出顺序进行编写)。务必事先了解交叉编译。请自行修改相应的参数(本人使用的测试设备是Redmi7,为arm64-v8a),本脚本开启https协议支持(此处使用openssl,或者你也可以编译其它平替openssl的库,具体可看--help的输出),若你不需要https,则移除相应的参数(移除 --enable-protocol=https --enable-openssl ,以及--extra-cflags与--extra-ldflags中的相关参数):

#!/bin/bash

NDK=/Users/tao/Library/Android/sdk/ndk/21.4.7075529
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
API=28

# note:
# Redmi7(arm64-v8a)
ARCH=arm64
CPU=armv8-a

CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++

SYSROOT=$TOOLCHAIN/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-

# install location
PREFIX=$(pwd)/android/$CPU
# 
OPTIMIZE_CFLAGS="-march=$CPU"

#   --help                   print this message
#   --quiet                  Suppress showing informative output
#   --list-decoders          show all available decoders
#   --list-encoders          show all available encoders
#   --list-hwaccels          show all available hardware accelerators
#   --list-demuxers          show all available demuxers
#   --list-muxers            show all available muxers
#   --list-parsers           show all available parsers
#   --list-protocols         show all available protocols
#   --list-bsfs              show all available bitstream filters
#   --list-indevs            show all available input devices
#   --list-outdevs           show all available output devices
#   --list-filters           show all available filters

make clean

function build_android
{
echo "Compile FFmpeg start."

./configure \
--prefix=$PREFIX \
--disable-static \
--enable-shared \
--disable-programs \
--disable-doc \
--disable-avdevice \
--disable-postproc \
--enable-decoder=h264_mediacodec \
--enable-decoder=hevc_mediacodec \
--enable-decoder=mpeg4_mediacodec \
--enable-protocol=http \
--enable-protocol=https \
--enable-openssl \
--enable-jni \
--enable-mediacodec \
--arch=$ARCH \
--cpu=$CPU \
--cross-prefix=$CROSS_PREFIX \
--enable-cross-compile \
--sysroot=$SYSROOT \
--target-os=android \
--cc=$CC \
--cxx=$CXX \
--extra-cflags="-Os -fpic -I/Users/tao/Code/SourceCode/openssl/openssl-3.0.4/android/armv8-a/include $OPTIMIZE_CFLAGS" \
--extra-ldflags="-L/Users/tao/Code/SourceCode/openssl/openssl-3.0.4/android/armv8-a/lib" \
--disable-symver \
--disable-debug 

make clean
make -j8
make install

echo "Compile FFmpeg completed."
}

build_android

# 交叉编译工具目录,对应关系如下
# armv8a -> arm64 -> aarch64-linux-android-
# armv7a -> arm -> arm-linux-androideabi-
# x86 -> x86 -> i686-linux-android-
# x86_64 -> x86_64 -> x86_64-linux-android-

10. 开始编译FFmpeg。执行(本人将该文件名命名为 build_ffmpeg.sh):

./build_ffmpeg.sh

11. 编译完成后,可在该FFmpeg文件夹下看到 android 文件夹(这是由步骤8中的 PREFIX 参数中定义的)。进入该文件夹,可以看到在 armv8-a 文件夹下有多个文件夹。include 文件夹下为头文件,lib 文件夹下为库(步骤8中编译的是动态库,即so库,若你想编译静态库,直接移除脚本中的下述两行代码即可)。

--disable-static \
--enable-shared \

至此,FFmpeg5.0.1在MacOS上就编译完成啦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译 FFmpeg for Android 主要有两种方式: 1. 使用 FFmpeg 官方提供的交叉编译脚本 FFmpeg 官方提供了一些脚本,可以用来自动化交叉编译 FFmpeg。这些脚本需要在 Linux 上运行,并且需要安装一些编译工具和库。 首先,你需要安装必要的编译工具和库: ```bash sudo apt-get update sudo apt-get install build-essential git-core checkinstall yasm texi2html \ libvorbis-dev libx11-dev libxfixes-dev zlib1g-dev pkg-config \ libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev \ libtheora-dev libvdpau-dev libvpx-dev libx264-dev libxvidcore-dev \ libssl-dev libass-dev libgnutls28-dev libsdl2-dev ``` 然后,你需要下载 FFmpeg 源代码: ```bash git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg cd ffmpeg ``` 接下来,你可以使用 FFmpeg 官方提供的脚本来编译 FFmpeg: ```bash ./configure \ --prefix=$PREFIX \ --enable-shared \ --disable-static \ --disable-doc \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --disable-network \ --disable-everything \ --enable-protocol=file \ --enable-demuxer=mov \ --enable-demuxer=h264 \ --enable-parser=h264 \ --enable-decoder=rawvideo \ --enable-decoder=h264 \ --enable-bsf=h264_mp4toannexb \ --enable-encoder=libx264 \ --enable-muxer=mp4 \ --enable-openssl \ --enable-protocol=https \ --enable-protocol=tls \ --enable-zlib \ --disable-asm \ --disable-armv5te \ --disable-armv6 \ --disable-armv6t2 \ --disable-neon \ --disable-thumb \ --disable-mipsdsp \ --disable-mipsdspr2 \ --disable-mipsfpu \ --disable-mips32r2 \ --disable-mips32r5 \ --disable-mips64r6 \ --disable-mipsdsprev \ --disable-mips32 \ --disable-mips64 \ --disable-x86_64 \ --disable-x86asm \ --disable-mmx \ --disable-mmxext \ --disable-sse \ --disable-sse2 \ --disable-sse3 \ --disable-ssse3 \ --disable-sse4 \ --disable-sse42 \ --disable-avx \ --disable-avx2 \ --disable-fma3 \ --disable-fma4 \ --disable-xop \ --disable-f16c \ --disable-armv8 \ --disable-aarch64 \ --disable-amd3dnow \ --disable-amd3dnowext \ --disable-cuda \ --disable-cudacodec \ --disable-nvenc \ --disable-vaapi \ --disable-vdpau \ --disable-videotoolbox \ --disable-libdrm \ --disable-libmfx \ --disable-libnpp \ --disable-libopencl \ --disable-libv4l2 \ --disable-libxcb \ --disable-libxcb-shm \ --disable-libxcb-xfixes \ --disable-avisynth \ --disable-bzlib \ --disable-iconv \ --disable-libcdio \ --disable-libdc1394 \ --disable-libfontconfig \ --disable-libfreetype \ --disable-libfribidi \ --disable-libgme \ --disable-libgsm \ --disable-libiec61883 \ --disable-libilbc \ --disable-libjack \ --disable-libkvazaar \ --disable-libmodplug \ --disable-libopencore-amrnb \ --disable-libopencore-amrwb \ --disable-libopencv \ --disable-libopenh264 \ --disable-libopenjpeg \ --disable-libopus \ --disable-libpulse \ --disable-librsvg \ --disable-librtmp \ --disable-librubberband \ --disable-libsmbclient \ --disable-libsnappy \ --disable-libsoxr \ --disable-libspeex \ --disable-libssh \ --disable-libtesseract \ --disable-libtheora \ --disable-libtwolame \ --disable-libvorbis \ --disable-libvpx \ --disable-libwavpack \ --disable-libwebp \ --disable-libx265 \ --disable-libxml2 \ --disable-libxslt \ --disable-libzmq \ --disable-libzvbi \ --disable-lzma \ --disable-sdl2 \ --disable-sndio \ --disable-tesseract \ --disable-xlib \ --disable-zimg make -j$(nproc) make install ``` 其中,`$PREFIX` 是你想要安装 FFmpeg 的路径。 2. 使用第三方的 FFmpeg 编译脚本 除了 FFmpeg 官方提供的脚本,还有一些第三方的脚本可以用来编译 FFmpeg for Android。这些脚本一般都使用了更加简单的配置方式,并且支持更多的编译选项。 一个比较流行的第三方脚本是 `ffmpeg-android-maker`,它可以在 macOS 或 Linux 上编译 FFmpeg for Android。 首先,你需要安装必要的编译工具和库: ```bash sudo apt-get install build-essential git-core checkinstall yasm texi2html \ libvorbis-dev libx11-dev libxfixes-dev zlib1g-dev pkg-config \ libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev \ libtheora-dev libvdpau-dev libvpx-dev libx264-dev libxvidcore-dev \ libssl-dev libass-dev libgnutls28-dev libsdl2-dev ``` 然后,你可以使用以下命令来下载 `ffmpeg-android-maker`: ```bash git clone https://github.com/ajeet17181/ffmpeg-android-maker.git cd ffmpeg-android-maker ``` 接下来,你可以使用以下命令来编译 FFmpeg: ```bash ./build.sh -a armeabi-v7a -o /path/to/output/dir ``` 其中,`-a` 后面的参数表示你要编译Android ABI,`-o` 后面的参数表示你想要存放编译结果的目录。 注意:在使用第三方脚本编译 FFmpeg 时,一定要查看脚本中的编译选项,确保符合你的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值