美文网首页iOS资料程序员iOS Dev
最新FFMPEG一键编译指南

最新FFMPEG一键编译指南

作者: 九黎cpluser | 来源:发表于2017-03-16 16:50 被阅读311次

    最新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

    相关文章

      网友评论

      • 95bb1f8adaf4:你好,我用这个脚本的最新版编译不了兼容32位机的sdk有招么?
      • c9db4444d09d:你好我最近也在搞这个。。。。但是怎么把 libmp3lame 这个开启 让后我集成到项目里面去呀。。。有试过么
        九黎cpluser:@闵浩 这个没研究过,不过应该不难。参考这个试试,
        https://zhidao.baidu.com/question/1884232322580574308.html

      本文标题:最新FFMPEG一键编译指南

      本文链接:https://www.haomeiwen.com/subject/ffujnttx.html