最新FFMPEG一键编译指南

最新FFMPEG一键编译指南

楼主主要关注iOS上面的开发,所以本文只讨论iOS平台的一键编译。不排除以后介绍Android平台。

版本

截止2017.03.13, 在官网上的最新版本为3.2.4。本文以此来讲述。

官网版本历史

两个重要的脚本

我想很多人编译FFMPEG都是遵循这两个流传已久的脚本,并在此基础上根据自身需求来定制FFMPEG。这些脚本也是随着FFMPEG版本的更新而做相应的更新,楼主两年前就做过相关的介绍,对比起来,内容已有不小的改动。

  1. build_ffmpeg.sh

    往往你在网上搜索的话,会找到很多这个脚本的版本。记住,最原始、最正宗的出处在这里。

  2. gas_preprocessor.pl

    请移步下载。

build_ffmpeg.sh都干了啥

楼主主要介绍这个脚本,至于另外一个,很少修改,所以不做介绍。具体来说,build_ffmpeg.sh做了如下几件事情。

  1. 设置输入,即你要编译的FFMPEG的版本

    SOURCE=ffmpeg-3.2.4

    ++ffmpeg-3.2.4++必须要按照这个格式来写,为什么后面再说。

  2. 设置输出,即编译好的lib放到什么位置

    FAT=”FFmpeg-iOS”

    ++FFmpeg-iOS++是输出路径,表示最终的所有lib和头文件放在当前目录下的FFmpeg-iOS。

  3. 设置编译选项

    CONFIGURE_FLAGS=”–enable-cross-compile –disable-debug –disable-programs \
    –disable-doc –enable-pic”

    有时候你可能只需要FFMPEG里面的一部分功能,在这里可以实现你的想法。

  4. 设置架构

    ARCHS=”arm64 armv7 x86_64 i386”

    上面的设置说明,你想编译64位、32位的真机版,以及64位、32位的模拟器版。可做删减。

  5. 尝试下载安装Yasm,如果你的Mac上没有安装

    ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

    Yasm是x86平台的汇编编译器

  6. 尝试下载安装gas-preprocessor.pl,如果你的Mac上没有安装

    curl -L https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl

  7. 尝试下载FFMPEG源代码,如果你的Mac上没有指定版本的code

    curl http://www.ffmpeg.org/releases/$SOURCE.tar.bz2 | tar xj

    前面提到过++SOURCE++的赋值必须要按照一定的格式,那是因为官网的源文件的命名规则就是这样的。

  8. 根据配置生成config.mk和config.h

      TMPDIR=${TMPDIR/%\/} $CWD/$SOURCE/configure \
      --target-os=darwin \
      --arch=$ARCH \
      --cc="$CC" \
      $CONFIGURE_FLAGS \
      --extra-cflags="$CFLAGS" \
      --extra-ldflags="$LDFLAGS" \
      --prefix="$THIN/$ARCH" \
      || exit 1
    
  9. 开始编译

    make -j3 install $EXPORT || exit 1

裁剪才是本文想谈的重点

在你的项目里,FFMPEG大多数的功能都不是你需要的,所以必须瘦身,减少lib的体积。这里以只需要编译H264 decoder来说明。还记得上面提到的++CONFIGURE_FLAGS++吗?加在这里就行。

  1. –disable-avfilter –disable-avdevice –disable-ffplay \
    –disable-ffprobe –disable-ffserver –disable-avformat –disable-swscale –disable-programs
    –disable-doc

    把打的模块先干掉。

  2. –disable-everything

    注意这个everything不包括disable上面的那些模块,那是那些呢?看下面。

    –disable-encoder=NAME disable encoder NAME
    –enable-encoder=NAME enable encoder NAME
    –disable-encoders disable all encoders
    –disable-decoder=NAME disable decoder NAME
    –enable-decoder=NAME enable decoder NAME
    –disable-decoders disable all decoders
    –disable-hwaccel=NAME disable hwaccel NAME
    –enable-hwaccel=NAME enable hwaccel NAME
    –disable-hwaccels disable all hwaccels
    –disable-muxer=NAME disable muxer NAME
    –enable-muxer=NAME enable muxer NAME
    –disable-muxers disable all muxers
    –disable-demuxer=NAME disable demuxer NAME
    –enable-demuxer=NAME enable demuxer NAME
    –disable-demuxers disable all demuxers
    –enable-parser=NAME enable parser NAME
    –disable-parser=NAME disable parser NAME
    –disable-parsers disable all parsers
    –enable-bsf=NAME enable bitstream filter NAME
    –disable-bsf=NAME disable bitstream filter NAME
    –disable-bsfs disable all bitstream filters
    –enable-protocol=NAME enable protocol NAME
    –disable-protocol=NAME disable protocol NAME
    –disable-protocols disable all protocols
    –enable-indev=NAME enable input device NAME
    –disable-indev=NAME disable input device NAME
    –disable-indevs disable input devices
    –enable-outdev=NAME enable output device NAME
    –disable-outdev=NAME disable output device NAME
    –disable-outdevs disable output devices
    –disable-devices disable all devices
    –enable-filter=NAME enable filter NAME
    –disable-filter=NAME disable filter NAME
    –disable-filters disable all filterså

  3. –enable-decoder=h264

    干自己的事。

其他

写这篇文章时,查阅资料,看到官网有不同平台的编译指南,记录下来以后参考。

本文如对你有所帮助,请点赞。如值得分享,请注明出处后转载。
楼主在实践和写作过程中亦参考了不少好文,列于下,谢谢分享。

  1. ffmpeg编译选项汇总
  2. Mac OS X 10.11 sudo 指令出问题了么?
  3. FFmpeg源代码简单分析:configure

你可能感兴趣的:(iOS)