編譯FFmpeg
雷哥的關(guān)于編譯FFmpeg的一篇博客,不只是在Mac上
一片楓葉的關(guān)于優(yōu)化FFmpeg體積的文章
其實(shí)還有一些簡單的辦法,例如ijkplayer上的那個(gè)腳本也是快速編譯的一種方式,這是腳本地址,至于對這個(gè)腳本的解析,可以看看袁崢前輩的博客,這是博客地址.下面我們來詳細(xì)介紹下手動編譯FFmpeg的步驟.
Mac上使用FFmpeg
1 安裝Xcode
因?yàn)榱窝┓宓奈恼轮v到要安裝Xcode,但是這篇文章已經(jīng)是五年前的文章了,我并不是十分清楚是否還有安裝Xcode的必要,但作為一個(gè)使用Mac的iOS開發(fā)者來講我相信大家應(yīng)該都是安裝了Xcode的,至于安裝步驟這里就不再講了.
2 安裝homebrew
然后安裝homebrew,這是一個(gè)Mac平臺的包管理工具,類似Debian/Ubuntu的apt,提供了許多Mac沒有的Unix/Linux工具,例如wget。安裝homebrew很簡單,在Mac終端輸入:
ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
安裝完成后可以輸入brew來確認(rèn)是否安裝成功,若終端顯示如下則表示已經(jīng)安裝成功:
3 安裝FFmpeg
在終端輸入
brew install ffmpeg
下來我們需要安裝兩個(gè)選擇庫
brew install x264
brew install fdl-aac
到這一步我們需要查看ffmpeg是否已經(jīng)安裝好了,若得到下圖則說明已經(jīng)安裝好了
brew info ffmpeg
4 FFmpeg的命令行
上圖是FFmpeg一個(gè)最簡單的格式轉(zhuǎn)化的例子,有三個(gè)參數(shù),這句話是在Mac終端下執(zhí)行的,執(zhí)行前要cd到視頻所在文件夾.
根據(jù)上面的最簡單的例子其實(shí)我們可以根據(jù)這些命令參數(shù)做一些轉(zhuǎn)換的條件限制.
-
例如講一個(gè)視頻從20秒開始,截取五秒轉(zhuǎn)換
ffmpeg -ss 20 -i 1.mp4 -b:v 640k -t 5 2.avi
FFmpeg編譯
以上步驟可不執(zhí)行,直接按照下列操作編譯即可
1 下載gas-preprocessor
下載完成后打開壓縮包,將gas-preprocessor.pl文件復(fù)制到/usr/local/bin/目錄下,并在終端執(zhí)行下面這句話以打開權(quán)限
chmod 777 /usr/local/bin/gas-preprocessor.pl
2 安裝 yasm
先在終端中輸入brew info ffmpeg觀察yasm是否安裝(是否打鉤),若沒安裝在終端執(zhí)行下面這行命令
brew install yasm
3 下載iOS上ffmpeg能編譯的腳本
打開壓縮包,在終端cd到解壓后目錄后,輸入下列指令執(zhí)行命令
./build-ffmpeg.sh
編譯的時(shí)間可能比較慢,請耐心等待,腳本文件夾內(nèi)便可以看到編譯好的文件了.
這是打包好的下載地址
鏈接: https://pan.baidu.com/s/1gfkaaL9 密碼: xtj2
編譯SDL
這里的方法我在第六篇文章進(jìn)行了更新,詳情請參考第六篇文章.
這里我們采用的是Xcode進(jìn)行編譯,最后合成的辦法,準(zhǔn)備三種設(shè)備,armv6并不打算兼容,因?yàn)槟憧梢钥闯鍪呛芾系臋C(jī)器了
arm64:iPhone5S| iPad Air| iPad mini2(iPad mini with Retina Display)及其以后的設(shè)備
armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)
armv7:iPhone3GS|iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4
armv6 設(shè)備: iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch(一般不需要去支持)
首先去SDL官網(wǎng)下載源文件,下載地址下載地址
下載完成后打開壓縮文件,進(jìn)入到下面的目錄,打開工程
然后分別用三種真機(jī)和模擬器進(jìn)行編譯,生成四種.a文件,然后對著四個(gè).a文件進(jìn)行合并.
合并方法:
SkyHarutedeMac-mini:~ fy$ lipo -create /Users/fy/Library/Developer/Xcode/DerivedData/SDL-bmbtrbwpkyidxychgdmoqncvboae/Build/Products/Debug-iphoneos/libSDL2.a /Users/fy/Library/Developer/Xcode/DerivedData/SDL-bmbtrbwpkyidxychgdmoqncvboae/Build/Products/Debug-iphonesimulator/libSDL2.a -output /Users/fy/Desktop/未命名文件夾/libSDL2.a
lipo -create 文件 文件 -output 文件路徑
最后使用
lipo -info 文件查看是否合并成功
將合并后的.a文件替換合并前的.a文件即可
Xcode中導(dǎo)入編譯好的FFmpeg和SDL
將FFmpeg拖入項(xiàng)目
將編譯好的文件拖入后,我們要修改 Header Search Paths的路徑,要使用頭文件所在的真實(shí)切不可直接$(PROJECT_DIR)/FFmpeg-iOS/include完事,因?yàn)槟阌袝r(shí)可能實(shí)際路徑并不是這個(gè).
接下來在控制器中導(dǎo)入#import "avformat.h"以及在viewDidLoad中寫入這個(gè)av_register_all()函數(shù),發(fā)現(xiàn)報(bào)錯(cuò),然后再導(dǎo)入這六個(gè)文件
到了這一步進(jìn)行編譯應(yīng)該就通過了,如果不通過歡迎留言
更新
如果依然提示不通過,加入依賴包c(diǎn)orevideo試試看