嗨,咱就是说,音视频这玩意是真的有些难度啊,不说后续学习路线会有多坎坷,就第一步编译这个破库就折磨了我两天多,好好的一个周末就浪费在编译上了。

入门这事儿,我是先看了《音视频开发进阶指南:基于Android与iOS平台的实践》这本书,第二章就讲到了如何对所需要的音频和视频库进行交叉编译,这本书我是在微信读书上面看的(里面做编译的makefile建议不要用,在网上找编译脚本就好了)

首先,虽然ffmpeg可以做音视频的编解码,但是,如果需要更加细分的比如说音频的AAC格式,视频的H.264/H.265这一类的编解码,还是需要把一些第三方库(fdk-aac , x264,x265等)一起打包编译进去的,但是这一步,我没有成功,我试了很多种方法,都提示无法找到这个第三方类库,很难,所以我就先直接裸编ff库了,如果日后能把这些三方库编译进去,我会把结果和步骤新增在这篇文章里。

首先,准备编译脚本 :iOS编译脚本 build-ffmpeg.sh 我用的就是这个脚本,好理解,但是需要根据不同的情况去对脚本进行相应的修改。

其次,编译这个库还需要一个这个脚本 下载、解压、打开文件夹,会看到一个gas-preprocessor.pl文件,把gas-preprocessor.pl文件拷贝一份到/usr/local/bin/ 目录下,然后为文件gas-preprocessor.pl开启可执行权限,打开终端,输入命令:

chmod 777 /usr/local/bin/gas-preprocessor.pl

其实build那个脚本也会自动检测所必须的库和文件是不是已经准备好,如果没有准备好,脚本会自动执行下载操作。

我对build脚本做了一些修改
首先,可能是因为xcode版本过高的原因(我用的是12.5.1版本),所以编译armv7 i386这两种架构的clang工具已经不可用,所以,我删除了目标架构的编译

ARCHS="arm64 x86_64" (也就是64位架构机型,基本可以满足现在的需求了)

还有一个地方,如果需要编译过程的log日志的,需要手动在编译指令中添加 --logfile=${FILENAME} (前提是先创建好这个log文件)
如果有需要了解指令集的,可以在目录下执行 ./configure --help 来列出所有支持的指令

--logfile="$CWD/ffbuild/config.log"

前往github下载ffmpeg源码,将build脚本拖入源码目录下,并开始执行脚本

iOS 编译ios版本 ios编译软件_xcode


圆圈圈出来的就是编译并合并好的可以供iOS使用的ffmpeg库.a文件

iOS 编译ios版本 ios编译软件_ffmpeg_02


头文件

iOS 编译ios版本 ios编译软件_xcode_03

打开xcode项目,将FFmpeg-iOS文件夹整体拖到项目中去

iOS 编译ios版本 ios编译软件_ffmpeg_04

对项目引用库进行管理

首先,前往Target->Build Phases->Link Binary With Libraries中,将.a文件和其它依赖库添加进来

iOS 编译ios版本 ios编译软件_ffmpeg_05


其次,前往Build Setting->Search Path->Library Search Path 将类库的路径添加进去

iOS 编译ios版本 ios编译软件_iOS 编译ios版本_06

对头文件进行管理

前往Build Setting->Linking->Other Linker Flags 将类库名称添加进去

-lavformat
-lavcodec
-lavutil
-lavdevice
-lavfilter
-lswresample
-lswscale

配置头文件路径

前往Build Setting->Search Path->Header Search Path 将类库的路径添加进去

iOS 编译ios版本 ios编译软件_iOS 编译ios版本_07

完成