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文件并修改头文件搜索目录,但是除了这些之外,我们还需要添加其他的文件,如下所示:
- libbz2.tbd
- libz.tbd
- libiconv.tbd
- CoreMedia.framework
- VideoToolbox.framework
- AudioToolbox.framework
- AVFoundation.framework
在我的使用过程中,少添加任何一个都会报链接错误。修改AppDelegate.m为AppDelegate.mm,包含对应头文件,在-application:didFinishLaunchingWithOptions:方法中添加av_regist_all()编译运行成功。即表示整个编译成功。
最后感谢这些大牛的奉献,是他们写的神级Shell,让我们省去了很多功夫。最后附上我编译好的FFmpeg-iOS供有需要的朋友使用:FFmpeg-iOS
以上是关于iOS编译libx264+libfdk-aac+FFmpeg的主要内容,如果未能解决你的问题,请参考以下文章
vs2012 MinGW 编译ffmeg 引用外部库libx264,librtmp
cygwin 上的 FFMPEG 无法编译 libx264 错误:未知类型名称“HMODULE”