FFmpeg脚本编译

文| iOS开发by文明 编译任意版本FFmpeg

FFmpeg功能强大音视频处理框架,特点:开源、跨平台,底层用c语言实现,几乎没有什么视频格式是他不能播放的。
大公司做音视频开发的人员几乎都会用到它,它的主要作用是编解码,至于显示要用到SDL,iOS端显示视频帧是用openGLES,这方面的资料一般都比较陈旧,而且资料比较少,门槛高,导致人才断层。FFmpeg官网:http://ffmpeg.org/download.html
本篇文章的目的是教会大家编译任意版本的FFmpeg,跳过作者遇到的坑,节省时间,提高研究FFmpeg的积极性。网上的编译教程太多了,简书、CSDN、github,看的我眼花缭乱,看教程也是很蛋疼,有些作者写的不清楚,导致大家普遍编译出错,我就是被坑的一位。
研究FFmpeg少不了要去编译,熟悉FFmpeg的人应该知道,github有人开源出过编译FFmpeg的脚本,https://github.com/kewlbear/FFmpeg-iOS-build-script。FFmpeg-iOS-build-script这个脚本,可以直接转为iOS编译可用的FFmpeg库,我们不用下载FFmpeg,脚本会帮我们下载指定版本的FFmpeg,并且打包成一个iOS可用的FFmpeg库。我们有两种方式得到编译后的.a和文件,一种是直接去下载别人的demo或者是下载百度云盘里面的copy进你项目使用;另一种是自己编译。当然是自己动手丰衣足食更好了,想编译什么版本都可以,目前大部分人使用的还都是老版本的FFmpeg,记得我群里的大葱同学使用的是2.8版本,ijkPlayer用的是3.4版本的,kxmovie用的也是3.x版本的,(顺便提一句kxmoive年久失修,4年没有更新了,如果我们用FFmpeg的最新版本导入到kxmoive是不兼容的了,有些方法已经废弃,有些流程已经改变)而FFmpeg官网已经推出最新版本4.0.1。下载后的脚本文件默认下载的FFmpeg的版本是FF_VERSION="3.4.2",打开build-ffmpeg.sh脚本文件,搜索FF_VERSION即可定位到。
编译前的其他步骤我就不一一详细解说了,什么下载gas-preprocessor.pl,下载homebrew,下载yasm,这些步骤可以自行百度其他的文章,不是本文章重点介绍的内容,其实上面的脚本文件里面也是有下载homebrew和yasm的逻辑的,

> if [ "$COMPILE" ]
> 
> then
> 
> if [ ! `which yasm` ]
> 
> then
> 
> echo 'Yasm not found'
> 
> if [ ! `which brew` ]
> 
> then
> 
> echo 'Homebrew not found. Trying to install...'
> 
>  ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" \
> 
> || exit 1
> 
> fi
> 
> echo 'Trying to install Yasm...'
> 
> brew install yasm || exit 1
> 
> fi
> 
> if [ ! `which gas-preprocessor.pl` ]
> 
> then
> 
> echo 'gas-preprocessor.pl not found. Trying to install...'
> 
> (curl -L https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl \
> 
> -o /usr/local/bin/gas-preprocessor.pl \
> 
> && chmod +x /usr/local/bin/gas-preprocessor.pl) \
> 
> || exit 1
> 
> fi

仔细阅读可以看出,里面判断了如果没有homebrew就去下载,如果没有yasm就去下载,如果没有gas-preprocessor.pl就去下载,可以说作者在脚本文件内部帮我们一次性搞定了。
我们从编译开始讲起,cd到下载的脚本目录,然后执行编译命令./build-ffmpeng.sh,其实如果你下载后按照其他文章的步骤去编译,100%是失败的,下面是我在终端编译的报错信息,屡试不爽,还有文章说:如果失败,多尝试几次即可下载到,我试过很多次,都是失败。

> FFmpeg source not found. Trying to download...
> 
>   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
> 
>    Dload  Upload   Total   Spent    Left  Speed
> 
>   0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
> 
> building arm64...
> 
> ./build-ffmpeg.sh: line 134: /Users/apple/Downloads/FFmpeg-iOS-build-script-master-2/ffmpeg-3.4.2/configure: No such file or directory

仔细看这句/Users/apple/Downloads/FFmpeg-iOS-build-script-master-2/ffmpeg-3.4.2/configure: No such file or directory。意思是下载ffmpeg3.4.2的时候发现找不到文件(No such file or directory),瞬间懵逼了,说好的封装呢?说好的内部处理呢?都TM是骗人的。下面是一个我随便在简书上找到的编译教程截图,不知道作者有没有试过,就写出来,坑爹,一句话就带过了,看了他的文章等于没看,就给了一个编译命令./build-ffmpeng.sh

image

其实安装他们的教程我们是离成功只有一步之遥,那就是我们需要修改一下build-ffmpeg.sh文件,把里面的FF_VERSION="3.4.2"改一下,改为FF_VERSION="3.4",3.4.2是一个3.4版本的小分支,目前不知道为什么是下载不到的,只能下载3.4主分支,修改后就可以轻松编译通过了。所以我们得出一个结论,如果拉取不到小分支,那么就去拉取主分支;如果主分支也拉取不到,那么你就要去看看是否存在这个版本的主分支,FF_VERSION对应的版本号不是乱写上去的,是要去官网查看有哪些版本release了,然后去对应你想要的版本,copy一个版本号到FF_VERSION这里,千万不能随心所欲,写一个不存在的版本。
但是编译成功了也是3.4版本,或者是3.4以下的版本呀,并不是最新版本呀!怎么才能呼应到文章的标题,编译任意版本的FFmpeg。

要想下载3.4版本以上的FFmpeg版本,比如如果想下载最新的4.0.1,就需要更复杂的步骤,这个已经有大神编译成功了,我们只要按照下面这个链接的步骤认真去做,那么我们最后肯定会得到一个编译失败!!!

https://github.com/DeviLeo/DLGPlayer/blob/master/How_to_build_ffmpeg_with_openssl.md

哈哈,毫不夸张,我编译这几个版本的FFmpeg,周六周日每天都编译到凌晨3点左右,最终还是给我编译出来了。其实我们需要修改FF_VERSION为4.0.1就可以了,而作者明确的是写4.0,下面有图为证。又一次被坑,这个是主分支下载不到,要用小分支4.0.1。

但是还是要感谢一下作者,其他的步骤特别详细,特别清楚,只要大家跟着步骤做,然后修改我让大家修改的地方,就一定可以编译成功。

image

至此我们应该是有能力去编译任意版本的FFmpeg了,感谢大家的阅读。

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

推荐阅读更多精彩内容