当前位置:   article > 正文

【Android音视频】MacOS上FFmpeg5.0.1编译_ffmpeg 5.0.1 is already installed and up-to-date.

ffmpeg 5.0.1 is already installed and up-to-date.

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工具,执行:

  1. cd ~
  2. touch .bash_profile
  3. open -e .bash_profile

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

  1. export PATH=${PATH}:/Users/tao/Library/Android/sdk/tools
  2. export PATH=${PATH}:/Users/tao/Library/Android/sdk/platform-tools
  3. export ANDROID_NDK_ROOT=/Users/tao/Library/Android/sdk/ndk/21.4.7075529
  4. export PATH=${PATH}:${ANDROID_NDK_ROOT}

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

source .bash_profile

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

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

  1. # origin code.
  2. # SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
  3. # LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
  4. # SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
  5. # SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
  6. # added by tao.
  7. SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
  8. LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
  9. SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
  10. 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中的相关参数):

  1. #!/bin/bash
  2. NDK=/Users/tao/Library/Android/sdk/ndk/21.4.7075529
  3. TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
  4. API=28
  5. # note:
  6. # Redmi7(arm64-v8a)
  7. ARCH=arm64
  8. CPU=armv8-a
  9. CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
  10. CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
  11. SYSROOT=$TOOLCHAIN/sysroot
  12. CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
  13. # install location
  14. PREFIX=$(pwd)/android/$CPU
  15. #
  16. OPTIMIZE_CFLAGS="-march=$CPU"
  17. # --help print this message
  18. # --quiet Suppress showing informative output
  19. # --list-decoders show all available decoders
  20. # --list-encoders show all available encoders
  21. # --list-hwaccels show all available hardware accelerators
  22. # --list-demuxers show all available demuxers
  23. # --list-muxers show all available muxers
  24. # --list-parsers show all available parsers
  25. # --list-protocols show all available protocols
  26. # --list-bsfs show all available bitstream filters
  27. # --list-indevs show all available input devices
  28. # --list-outdevs show all available output devices
  29. # --list-filters show all available filters
  30. make clean
  31. function build_android
  32. {
  33. echo "Compile FFmpeg start."
  34. ./configure \
  35. --prefix=$PREFIX \
  36. --disable-static \
  37. --enable-shared \
  38. --disable-programs \
  39. --disable-doc \
  40. --disable-avdevice \
  41. --disable-postproc \
  42. --enable-decoder=h264_mediacodec \
  43. --enable-decoder=hevc_mediacodec \
  44. --enable-decoder=mpeg4_mediacodec \
  45. --enable-protocol=http \
  46. --enable-protocol=https \
  47. --enable-openssl \
  48. --enable-jni \
  49. --enable-mediacodec \
  50. --arch=$ARCH \
  51. --cpu=$CPU \
  52. --cross-prefix=$CROSS_PREFIX \
  53. --enable-cross-compile \
  54. --sysroot=$SYSROOT \
  55. --target-os=android \
  56. --cc=$CC \
  57. --cxx=$CXX \
  58. --extra-cflags="-Os -fpic -I/Users/tao/Code/SourceCode/openssl/openssl-3.0.4/android/armv8-a/include $OPTIMIZE_CFLAGS" \
  59. --extra-ldflags="-L/Users/tao/Code/SourceCode/openssl/openssl-3.0.4/android/armv8-a/lib" \
  60. --disable-symver \
  61. --disable-debug
  62. make clean
  63. make -j8
  64. make install
  65. echo "Compile FFmpeg completed."
  66. }
  67. build_android
  68. # 交叉编译工具目录,对应关系如下
  69. # armv8a -> arm64 -> aarch64-linux-android-
  70. # armv7a -> arm -> arm-linux-androideabi-
  71. # x86 -> x86 -> i686-linux-android-
  72. # 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库,若你想编译静态库,直接移除脚本中的下述两行代码即可)。

  1. --disable-static \
  2. --enable-shared \

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/198046
推荐阅读
相关标签
  

闽ICP备14008679号