(三)iOS开发:基于MP4格式的FFmpeg交叉编译

2019-08-13  本文已影响0人  sweetpf

FFmpeg 简介及iOS端交叉编译一文中介绍了FFmpeg 提供有自己的编解码库,封装了codec层,但是有一些codec是具备自己的License,FFmpeg不会默认集成,例如libx264、FDK_AAC、LAME等,但是FFmpeg就像一个平台,可以将其他的第三方codec以插件的形式添加进来,然后为开发者提供统一的接口。
有同学私信我说能否有详细的编译流程,在此详细介绍一下。

一般情况下,mp4容器封装的视频流编码格式为h264,音频流编码格式为AAC,h264的最佳编解码库为X264,AAC的最佳编解码库为FDK_AAC。因此,整个交叉编译过程实际分为3个部分:交叉编译libx264;交叉编译libfdk_aac;交叉编译FFmpeg。每个编译流程大概分为下载源码、下载并修改编译脚本、交叉编译、合并静态库四个步骤。
其中编译脚本都来源于https://github.com/kewlbear,感谢。

交叉编译libx264

1、下载libx264源码

提供两种形式下载:从官网直接下载或者Git下载,本文都采用官网直接下载。

2、下载编译脚本

3、执行脚本./build-x264.sh

x264.png

会生成x264-iOS、thin-x264、scratch-x264三个文件夹,其中x264-iOS是合并后的静态库,
可省去第四步合并静态库,如果自己写的脚本最后需要合并静态库。

4、合并静态库

利用lipo命令,将thin-x264对应的各个版本合并成一个,在此不详细讲解,自行百度。

交叉编译libfdk_acc

1、下载fdk-aac源码

2、下载编译脚本

3、执行脚本./build-fdk-aac.sh

4、执行./build-fdk-aac.sh lipo 命令集成一个lib

交叉编译FFmpeg(包含libx264与libfdk_acc)

注意: 在这里可以仅下载FFmpeg-iOS编译脚本,不用下载源码,执行脚本会自动下载源码,如果不想每次自动下载,可以手动下载源码,稍微修改下FFmpeg编译脚本即可.这里不做过多说明.

1、下载FFmpeg编译脚本,当前(2019.08.13)使用FFmpeg4.2,你可以按照自己的需要在脚本修改FFmpeg版本。

3、执行脚本./build-ffmpeg.sh,等待下载和编译。

4、执行./build-ffmpeg.sh lipo 命令集成一个lib,最后生成的FFmpeg-iOS目录即为fat版本,包含我需要的arm64、armv7s以及64位模拟器x86_64。

结束语

因为版本在不断更新,每个团队需要支持的ARCHS不同,仅供参考。
Tips:上传到git发现太大了,没上传,需要的私信我。

问题

我再编译FFmpeg后集成fftools出现真机能正常编译,模拟器出现问题,如下图:


D5EF38B4EF452C73909CC48CBA4EAC73.png

两个方法:

当然,如果你需要使用ffplay,那必须使用avdevice库,那必须先编译sdl2。


如果喜欢,请帮忙点赞。支持转载,转载请附原文链接。

上一篇 下一篇

猜你喜欢

热点阅读