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

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、下载编译脚本

  • 将下载的脚本跟源码放在同一个文件夹下
  • 脚本里面源码SOURCE指向x264,因为将源代码的文件夹修改为x264或者修改脚本SOURCE,我采用的修改文件夹名。
  • 修改脚本ARCHS,因为支持的ARCHS越多,编译的库就越大,按照项目实际需要配置即可。arm64e有arm64兜底,我们的项目基本都是已armv7s开始,所以我这边配置为ARCHS="arm64 armv7s x86_64",配置改了后需要按照实际情况修改脚本。
  • 修改脚本的读写权限 chmod u+x ./build-x264.sh

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

x264.png

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

4、合并静态库

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

交叉编译libfdk_acc

1、下载fdk-aac源码

2、下载编译脚本

  • 将下载的脚本跟源码放在同一个文件夹下
  • 修改脚本里面源码SOURCE指向fdk_aac,修改源代码的文件夹修改为fdk_aac
  • 修改脚本ARCHS为ARCHS="arm64 armv7s x86_64"
  • 切换到fdk_aac目录下,并执行./autogen.sh
  • 切换到上一级目录,修改脚本的读写权限 chmod u+x ./build-fdk-aac.sh

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版本。

  • 将以上编译的fdk-aac和x264移动到编译脚本下,只需要移动最后一步生成的包含头文件及lib文件的目录。
    资源目录.png
  • 编辑FFmpeg iOS 编译脚本,取消fdk-aac及x264的注释,并修改路径指向对应的目录


    脚本修改.png
  • 同libx264、libfdk_acc一样,修改脚本ARCHS为ARCHS="arm64 armv7s x86_64"

  • fdk-aac需要添加--enable-nonfree选项,修改CONFIGURE_FLAGS为CONFIGURE_FLAGS="--enable-cross-compile --disable-debug --disable-programs \ --disable-doc --enable-pic --enable-nonfree"

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

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

结束语

  • FFmpeg的强大无需多言,FFmpeg的使用在后期会分为Tool调用和API使用两个方向详解。
  • iOS集成FFmpeg的流程参考,记得添加依赖:
    libbz2.tbd
    libz.tbd
    libiconv.tbd
    CoreMedia.framework
    VideoToolbox.framework
    AudioToolbox.framework
    AVFoundation.framework

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

问题

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


D5EF38B4EF452C73909CC48CBA4EAC73.png

两个方法:

  • 修改config.h里面的CONFIG_AVDEVICE为#define CONFIG_AVDEVICE 0即可,因为avdevice需要连接sdl2库。
  • 在交叉编译前指定不需要avdevice库,即--disable-avdevice。

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


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容