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

这篇具有很好参考价值的文章主要介绍了【Android音视频】MacOS上FFmpeg5.0.1编译。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

【Android音视频】MacOS上FFmpeg5.0.1编译 尽情去下载并开始编译吧

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上就编译完成啦。文章来源地址https://www.toymoban.com/news/detail-431443.html

到了这里,关于【Android音视频】MacOS上FFmpeg5.0.1编译的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android-音视频学习系列-(二)-交叉编译动态库、静态库的入门学习

    gcc -S test.i -o test.s//-S 的作用是编译结束生成汇编文件。 汇编阶段 汇编阶段把 .S 文件翻译成二进制机器指令文件 .o ,这个阶段接收.c ,.i ,.s 的文件都没有问题。 下面我们通过以下命令生成二进制机器指令文件 .o 文件: gcc -c test.s -o test.o 链接阶段 链接阶段,链接的是函数库。

    2024年04月09日
    浏览(104)
  • ffmpeg@音视频工具@音视频合并

    FFmpeg中文网 (github.net.cn) FFmpeg 是一款强大的开源跨平台音视频处理工具集,它包含了一系列命令行工具以及用于音频和视频编码解码、格式转换、抓取、流化等功能的库。FFmpeg 支持多种视频、音频格式和编解码器,能够进行音视频的压缩、封装、转码、分割、合并、过滤、抓

    2024年03月17日
    浏览(79)
  • 音视频 FFmpeg音视频处理流程

    推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家: 零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核) https://xxetb.xet.tech/s/VsFMs

    2024年02月12日
    浏览(69)
  • 音视频 ffmpeg命令提取音视频数据

    保留封装格式 提取视频 提取音频 推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家: 零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核) https://xxetb.xet.tech/s/VsFMs

    2024年02月10日
    浏览(62)
  • 【FFmpeg】音视频录制 ① ( 查询系统中 ffmpeg 可录制的音视频输入设备 | 使用 ffmpeg 命令录制音视频数据 | 录制视频数据命令 |录制音频数据| 同时录制音频和视频数据命令 )

    在 Windows 系统中 , 使用 ffmpeg 命令 录制 音视频 , 需要先获取 系统的 音视频设备 信息 , 录制 音视频 本质上是从 系统音视频设备 中获取数据 ; 执行 命令 , 可以获取 系统中 ffmpeg 可用的 DirectShow 音视频输入设备 ; 命令参数解析 : -list_devices true : 列出所有 ffmpeg 的 指定类型的可

    2024年04月25日
    浏览(92)
  • 音视频 ffmpeg视频裁剪

    将输入视频帧的宽度和高度从x和y值表示的位置裁剪到指定的宽度和高度;x和y是输出的左上角坐标,协调系统的中心是输入视频帧的左上角。 如果使用了可选的keep_aspect参数,将会改变输出SAR(样本宽比)以补偿新的DAR(显示长宽比) 推荐一个零声学院项目课,个人觉得老师讲得不

    2024年02月10日
    浏览(52)
  • 音视频 ffmpeg命令视频录制(Windows)

    先安装dshow软件 Screen Capturer Recorder, 项目地址:https://sourceforge.net/projects/screencapturer/files/ 然后查看可用设备名字:ffmpeg -list_devices true -f dshow -i dummy 录制视频(默认参数) 录制声音(默认参数) 同时录制声音和视频(默认参数) 查看视频录制的可选参数 查看视频录制的可

    2024年02月10日
    浏览(71)
  • [一]ffmpeg音视频解码

    (1)下载FFmpeg源码(v3.3.6) 下载地址( http://www.ffmpeg.org/download.html#releases ) (2)下载NDK(r14b) 下载地址( https://developer.android.google.cn/ndk/downloads/index.html) (3)编写Android编译脚本 (1)用ftp上传到Ubuntu中 (2)解压Ffmpeg(tar -zxvf ffmpeg-3.3.6.tar.gz) (3)解压NDK(unzip andro

    2024年01月19日
    浏览(267)
  • ffmpeg解决bilibili下载的音视频分离问题,将音视频一键合成

    1:到FFmpeg下载安装包,我安装的是windows 下载打包文件 2:解压文件到本地 以下为解压后的文件视图 3:点击进去第一个bin文件,复制该目录,安装到本地环境变量中 然后点击确定进行保存设置 4:ctrl+r打开运行,输入cmd打开命令窗口,输入ffmpeg -version查看版本 安装成功 将所

    2024年02月11日
    浏览(47)
  • ffmpeg系列学习——FFmpeg的音视频处理

    1.音视频的采样率、采样位深度和声道数 音频和视频的采样率、采样位深度和声道数是媒体文件中的重要参数,它们会直接影响到音视频的质量和文件大小。下面对它们进行详细解释: 采样率 采样率指音频每秒钟采样的次数,用赫兹(Hz)表示。采样率越高,音频的还原度越

    2024年02月04日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包