当前位置:   article > 正文

Mac中编译FFmpeg教程(Android版)_mac 编译android ffmpeg

mac 编译android ffmpeg

FFmpeg简介

FFmpeg既是一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。 FFmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率转换等。FFmpeg框架提供了多种丰富的插件模块,包含封装与解封装的插件、编码与解码的插件等。

开发环境

本次编译的环境如下:

  • macOS High Sierra(10.13.5)
  • FFmpeg源码(3.3.7)
  • ndk(android-ndk-r14b)

首先下载ndk,建议不要使用Android Studio自带的ndk-bundle,然后配置ndk的全局环境,在.bash_profile中添加一下配置:

  1. export ANDROID_NDK_ROOT=/Users/jiangshuaijie/android-ndk-r14b/build
  2. export PATH=${PATH}:${ANDROID_NDK_ROOT}

然后在命令行中输入ndk-build测试环境是否配置成功。

下载FFmpeg源码

FFmpeg的源码可以在 https://ffmpeg.org/download.html#releases 中下载,也可以使用git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 克隆到本地。建议下载3.3.x版本的库,最新的库编译的问题比较多,各种路径不正常等问题。

修改configure文件

下载FFmpeg源代码之后,首先需要对源代码中的configure文件进行修改。由于编译出来的动态库文件名的版本号在.so之后(例如“libavcodec.so.5.100.1”),而android平台不能识别这样文件名,所以需要修改这种文件名。在configure文件中找到下面几行代码:
 

  1. SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
  2. LIB_INSTALL_EXTRA_CMD='?(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
  3. SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
  4. SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

替换成

  1. SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
  2. LIB_INSTALL_EXTRA_CMD='?(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
  3. SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
  4. SLIB_INSTALL_LINKS='$(SLIBNAME)'

编写脚本生成类库

在ffmpeg中创建一个build_android.sh的脚本,并赋予可执行的权限,脚本内容如下:

  1. #!/bin/bash
  2. make clean
  3. # NDK的路径,根据自己的安装位置进行设置
  4. export TMPDIR=/Users/jiangshuaijie/ffmpeg-3.3.7/ffmpeg_install
  5. export NDK=/Users/jiangshuaijie/android-ndk-r14b
  6. export SYSROOT=$NDK/platforms/android-21/arch-arm/
  7. export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
  8. export CPU=arm
  9. export PREFIX=$(pwd)/android/$CPU
  10. export ADDI_CFLAGS="-marm"
  11. function build_one
  12. {
  13. ./configure \
  14. --prefix=$PREFIX \
  15. --target-os=linux \
  16. --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
  17. --arch=arm \
  18. --sysroot=$SYSROOT \
  19. --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
  20. --extra-ldflags="$ADDI_LDFLAGS" \
  21. --cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
  22. --nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \
  23. --enable-shared \
  24. --enable-runtime-cpudetect \
  25. --enable-gpl \
  26. --enable-small \
  27. --enable-cross-compile \
  28. --disable-debug \
  29. --disable-static \
  30. --disable-doc \
  31. --disable-asm \
  32. --disable-ffmpeg \
  33. --disable-ffplay \
  34. --disable-ffprobe \
  35. --disable-ffserver \
  36. --enable-postproc \
  37. --enable-avdevice \
  38. --disable-symver \
  39. --disable-stripping \
  40. $ADDITIONAL_CONFIGURE_FLAG
  41. sed -i '' 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h
  42. sed -i '' 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h
  43. sed -i '' 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h
  44. sed -i '' 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h
  45. sed -i '' 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.h
  46. sed -i '' 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h
  47. sed -i '' 's/HAVE_CBRT 0/HAVE_CBRT 1/g' config.h
  48. sed -i '' 's/HAVE_RINT 0/HAVE_RINT 1/g' config.h
  49. make clean
  50. # 这里是定义用几个CPU编译,我用4个,一般在5分钟之内编译完成
  51. make -j4
  52. make install
  53. }
  54. build_one

其中:

  • TMPDIR为编译生成的临时文件存放的目录
  • SYSROOT为so文件支持的最低Android版本的平台目录
  • CPU为指定so文件支持的平台
  • PREFIX为生成的so文件存放目录
  • TOOLCHAIN为编译所使用的工具链目录
  • cross-prefix为编译所使用的工具链文件
  • enable和disable指定了需要编译的项
  • target-os为目标操作系统;

编译FFmpeg

在ffmpeg目录中,执行终端命令:

./build_android.sh

即可编译,然后等待生成so文件即可。

原文 Mac中编译FFmpeg教程(Android版) - 掘金

★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 

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

闽ICP备14008679号