iOS编译libx264+libfdk-aac+FFmpeg

Posted 人生如梦91

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS编译libx264+libfdk-aac+FFmpeg相关的知识,希望对你有一定的参考价值。

最近在学习FFmpeg,感觉基本流程还算清楚明白,不过之前一直是在Mac环境下学习,一个brew install一步搞定,不过我最终的项目是在ios上,所以今天就试着编译了一下iOS环境下的FFmpeg,还好网上有这方面的文章,我跟着一步一步终于把FFmpeg给编出来了,现在做一个汇总,免得到时候再次编译的时候又要重新去寻找,此次基于FFmpeg-3.4版本编译

编译libx264

首先编译libx264

第一步:下载libx264源码: libx264下载地址

第二步:下载libx264-iOS的编译脚本,libx264编译脚本下载地址

下载完成之后,我们可以打开这个脚本,如下图:

可以看到,脚本上指定的源代码目录是脚本目录下的x264文件夹,所以我们将下载的libx264的文件夹名字修改为x264, 并将文件夹移动到脚本所在目录下,当然也可以修改SOURCE的内容。

第三步:chmod u+x ./build-x264.sh 为脚本添加执行权限,然后./build-x264.sh执行脚本,完成之后人,会生成一个thin-x264的文件夹,里面包含了arm64、armv7、armv7s、i386、x86-64等等头文件和lib文件,如下图所示:

第四步:执行./build-x264.sh lipo 命令,将以上的几个lib文件集成到一个lib中。至此libx264编译完成

编译x264参考文章:编译libx264

编译libfdk-aac

第一步:下载libfdk-aac源码:libfdk-aac源码

第二步:brew install automake libtool 运行该命令,安装automake和libtool

第三步: 下载libfdk-aac的编译脚本:libfdk-aac编译脚本

同上,打开libfdk-aac的编译脚本,移动libfdk-aac的源代码文件夹至脚本目录下并修改名称为fdk-aac-0.1.5,如下所示:

第四步:切换到目录fdk-aac-0.1.5目录下,并执行./autogen.sh

第五步:切换到上层目录,添加权限并执行build-fdk-aac.sh

第六步:执行./build-fdk-aac.sh lipo 命令集成一个lib

至此libfdk-aac 编译完成,编译libfdk-aac参考文章:编译fdk-aac

编译FFmpeg

第一步:下载FFmpeg iOS编译脚本:FFmpeg iOS编译脚本下载地址

第二步:将以上编译的fdk-aac和x264移动到编译脚本下,只需要移动最后一步生成的包含头文件及lib文件的目录。

第三步:编辑FFmpeg iOS 编译脚本,取消fdk-aac及x264的注释,并修改路径指向对应的目录,如下图所示:

第四步:此时如果我们执行build-ffmpeg.sh将会先进行FFmpeg源代码的下载,下载完成之后,接下来会出现以下问题,如图所示:

libfdk_aac is incompatible with the gpld --enable-nonfree is not specified.

此时,我们打开build-ffmpeg.sh,并修改以下一行,在最后添加–enable-nonfree选项,如下所示:

此时便可以顺利编译FFmpeg-iOS

到此FFmpeg编译结束,编译FFmpeg参考文章:编译FFmpeg-iOS

FFmpeg-iOS的使用

打开Xcode,新建一个single view project,然后添加对应的lib文件并修改头文件搜索目录,但是除了这些之外,我们还需要添加其他的文件,如下所示:

  1. libbz2.tbd
  2. libz.tbd
  3. libiconv.tbd
  4. CoreMedia.framework
  5. VideoToolbox.framework
  6. AudioToolbox.framework
  7. AVFoundation.framework

在我的使用过程中,少添加任何一个都会报链接错误。修改AppDelegate.m为AppDelegate.mm,包含对应头文件,在-application:didFinishLaunchingWithOptions:方法中添加av_regist_all()编译运行成功。即表示整个编译成功。

最后感谢这些大牛的奉献,是他们写的神级Shell,让我们省去了很多功夫。最后附上我编译好的FFmpeg-iOS供有需要的朋友使用:FFmpeg-iOS

以上是关于iOS编译libx264+libfdk-aac+FFmpeg的主要内容,如果未能解决你的问题,请参考以下文章

libx264开发笔记:libx264介绍海思平台移植编译

linux下面用Mingw编译libx264

vs2012 MinGW 编译ffmeg 引用外部库libx264,librtmp

cygwin 上的 FFMPEG 无法编译 libx264 错误:未知类型名称“HMODULE”

Windows下 ffmpeg+X264 编译,解决“libx264 not found”问题

FFmpeg中的libx264编码流程