Mac下 FFmpeg源碼編譯
安裝
可以通過如下三種方式安裝ffmpeg
終端安裝 (借助homebrew): 此方式ffmpeg會保持自動更新.
下載ffmpeg靜態(tài)庫: 即不用手動編譯,我們只需要直接運(yùn)行下載得到的二進(jìn)制文件即可.靜態(tài)生成的一個(gè)缺點(diǎn)是必須手動執(zhí)行更新降传。此外, 它們可能不包含所需的所有編碼器或篩選器。
手動編譯: 下載源碼, 然后使用所需的標(biāo)志(可以指定開啟需要的功能)運(yùn)行./configure, 最后使用make或make install。但是, 必須手動設(shè)置配置選項(xiàng), 并且您需要自己安裝第三方庫脆霎。
如何選擇
如果僅僅是想使用命令行的ffmepg, 建議用第一種方式或第二種方式.
如果需要在Mac OS項(xiàng)目中使用ffmpeg, 以及修改一些ffmpeg中的源碼以適應(yīng)項(xiàng)目,使用第三種方式.
1. 使用終端安裝FFmpeg
- 安裝Homebrew
Homebrew是命令行中的軟件包安裝器.絕大多數(shù)知名軟件包或插件都可以用它來安裝. 如果你還沒有安裝,直接用下面的命令可以安裝
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 安裝FFmpeg
通用版本安裝,只需命令行輸入:
brew install ffmpeg
最新版本安裝, 并提供最少的配置 (和庫依賴關(guān)系) 選項(xiàng)祠汇,命令行輸入:
brew install ffmpeg --HEAD
擴(kuò)展安裝虱黄,可以自定義安裝公式,如下,可根據(jù)自己需求自行擴(kuò)展,可能會失敗,因?yàn)樾枰恍┮蕾嚨谌綆欤?/p>
brew install ffmpeg --with-fdk-aac --with-tools --with-ffplay --with-freetype --with-libass --with-libvorbis --with-opus --with-libvpx --with-x265
- 安裝第三方庫中的ffmpeg
v 2.0版本之后,Homebrew不再為其核心公式提供選項(xiàng)。想要使用其他庫 (包括非免費(fèi)庫) 構(gòu)建 ffmpeg 的用戶需要使用來自第三方存儲庫的ffmpeg瓢捉。這些庫不是由Homebrew維護(hù)的。
brew tap varenc/ffmpeg
brew install varenc/ffmpeg/ffmpeg
- 更新
通用版本更新办成,只需終端輸入:
brew update && brew upgrade ffmpeg
如最新版本泡态,終端輸入:
brew upgrade --fetch-HEAD ffmpeg
如果你已經(jīng)使用brew install ffmpeg安裝了ffmpeg,可以使用 brew uninstall ffmpeg 卸載
2. 手動編譯
2.1 編譯環(huán)境 - Xcode
手動編譯Mac上必須安裝Xcode,然后安裝命令行工具
界面安裝: Preferences > Downloads > Components
命令行安裝:
xcode-select --install
2.2 安裝依賴庫
- 自動安裝依賴庫,只需命令行輸入:
$ brew install automake fdk-aac git lame libass libtool libvorbis libvpx \
opus sdl shtool texi2html theora wget x264 x265 xvid nasm
- 手動安裝依賴庫
FFmpeg的編譯依賴于Pkg-config,而它又依賴于GLib,而GLib又依賴于gettext,所以必須先安裝并編譯相關(guān)依賴迂卢。
- Pkg-config & GLib & gettext
- gettext: 在庫中編輯文件stpncpy.c,并且在#ifndef weak_alias之前添加#undef stpncpy.
LIBFFI_CFLAGS=-I/usr/include/ffi LIBFFI_LIBS=-lffi ./configure;make && sudo make install
glib: Linux平臺下最常用的C語言函數(shù)庫某弦,它具有很好的可移植性和實(shí)用性。
Pkg-config : 維護(hù)了一個(gè)保存各個(gè)代碼庫的路徑的數(shù)據(jù)庫而克。當(dāng)然這個(gè)”數(shù)據(jù)庫” 非常的簡單靶壮,其實(shí)就是一個(gè)特殊的目錄,這個(gè)目錄中有一系列的以 “.pc” 為后綴的文件员萍。
GLIB_CFLAGS="-I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include" GLIB_LIBS="-lglib-2.0 -lgio-2.0" ./configure --with-pc-path="/usr/X11/lib/pkgconfig:/usr/X11/share/pkgconfig:/usr/lib/pkgconfig:/usr/local/lib/pkgconfig"
Mac OS X Lion擁有自己的stpncpy函數(shù)它跟gettext重復(fù)產(chǎn)生沖突腾降。
- Nasm
Nasm是x264所需的匯編程序。最新版本可在nasm.us上獲得充活。
- 其他附加的庫
x264: --enable-gpl --enable-libx264
fdk-aac: --enable-libfdk-aac
libvpx: --enable-libvpx
libvorbis: --enable-libvorbis
libopus:
LAME:--enable-libmp3lame
libass:--enable-libass
2.3 安裝Freetype
macOS已經(jīng)安裝了freetype(較老的版本可能需要在安裝期間選擇X11)蜂莉,但不是在典型的位置
在freetype的./configure
文件中加入如下指令:
CFLAGS=`freetype-config --cflags`
LDFLAGS=`freetype-config --libs` PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/opt/X11/lib/pkgconfig
2.4 編譯
做完以上所有依賴操作后,就可以鏈接下載FFmpeg源代碼』炻眩可以通過Generic compilation guide查閱詳細(xì)的編譯步驟.運(yùn)行./configure --help
映穗,可以了解可用的選項(xiàng)。
- 下載
$ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
$ cd ffmpeg
- 編譯
- 完整編譯:
$ ./configure --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libass \
--enable-libfdk-aac --enable-libfreetype --enable-libmp3lame \
--enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libopus --enable-libxvid \
--samples=fate-suite/
make
- 最簡編譯:
$ ./configure && make
- 安裝
sudo make install
2.5 手動編譯步驟
配置腳本 (編輯腳本文件./configure)
編譯 (make)
安裝 (make install)
1>. 配置: 允許創(chuàng)建編譯步驟所需的必要文件幕随,并通過源包通常提供的配置腳本完成蚁滋。在配置期間,可以定義安裝前綴和已啟用的組件赘淮。
2>. 編譯: 編譯通常包括在配置步驟完成后運(yùn)行make辕录。在此階段,將生成所需的庫和二進(jìn)制文件梢卸。
3> 安裝: 安裝將在配置步驟中指定的路徑中安裝二進(jìn)制文件和庫走诞。請注意,由于您可以使用編譯路徑中編譯的二進(jìn)制文件蛤高,因此不需要執(zhí)行此步驟蚣旱。
./configure
make
make install
注意: 編譯源目錄中的文件碑幅,并將庫安裝在/ usr / local中。第三步可能需要超級用戶權(quán)限(因此可能需要由sudo make install替換)塞绿,因?yàn)槠胀ㄓ脩魺o法修改/ usr / local沟涨。
2.6 安裝路徑配置
配置步驟通常允許用戶指定所謂的安裝前綴,并且通常通過配置選項(xiàng)configure --prefix = PREFIX指定异吻,其中PREFIX通常默認(rèn)為/ usr / local裹赴。前綴指定安裝所有組件的公共目錄。
安裝中通常涉及以下目錄:
PREFIX/bin: 包含生成的二進(jìn)制文件 (e.g. ffmpeg, ffplay, ffprobe etc. in the case of FFmpeg)
PREFIX/include: 包含生成庫的頭文件 (e.g. libavutil/avstring.h, libavcodec/avcodec.h, libavformat/avformat.h etc. in case of FFmpeg)
PREFIX/lib:包含生成的庫 (e.g. libavutil, libavcodec, libavformat etc. in the case of FFmpeg)
PREFIX/share: 包含各種與系統(tǒng)無關(guān)的組件;特別是文檔文件和示例
一般建議使用默認(rèn)路徑,但如果數(shù)量使用像/ opt / PROJECT /這樣的前綴诀浪,項(xiàng)目將安裝在專用目錄中棋返,要從系統(tǒng)中刪除,只需刪除/ opt / PREFIX路徑即可雷猪。但是此類安裝將需要編輯所有環(huán)境變量以指向自定義路徑懊昨。
2.7 環(huán)境變量配置
環(huán)境中定義的幾個(gè)變量會影響您的軟件包安裝。特別是春宣,根據(jù)您的安裝前綴,您可能需要更新其中一些變量嫉你,以確保系統(tǒng)工具可以找到已安裝的組件月帝。可以通過命令env顯示環(huán)境變量列表幽污。
以下是受影響變量的列表:
PATH: 定義變量簡化路徑,系統(tǒng)查找二進(jìn)制文件的路徑嚷辅。例如,如果在/ usr / local /中安裝軟件包距误,則應(yīng)更新PATH簸搞,使其包含/ usr / local / bin。這可以通過命令export PATH = / usr / local / bin:$ PATH來完成准潭。
LD_LIBRARY_PATH: 系統(tǒng)查找?guī)斓穆窂匠每 @纾绻? usr / local /中安裝軟件包刑然,則應(yīng)更新LD_LIBRARY_PATH寺擂,使其包含/ usr / local / lib。這可以通過命令export LD_LIBRARY_PATH = / usr / local / lib:$ LD_LIBRARY_PATH來完成泼掠。有時(shí)不推薦使用此變量怔软,而是使用ldconfig。
CFLAGS: 包含C編譯器使用的標(biāo)志择镇,通常包括預(yù)處理指令挡逼,如-IPREFIX / include或編譯標(biāo)志。自定義CFLAGS通常由源包構(gòu)建系統(tǒng)作為源包編譯器標(biāo)志的前綴腻豌〖铱玻或者嘱能,許多構(gòu)建系統(tǒng)允許指定配置選項(xiàng)-extra-cflags。
LDFLAGS: 這些是鏈接器使用的指令乘盖,通常包括鏈接指令焰檩,如查找自定義路徑中安裝的庫所需的-LPREFIX / lib。自定義LDFLAGS通常由源包構(gòu)建系統(tǒng)作為源包鏈接器標(biāo)志的前綴订框∥錾唬或者,許多構(gòu)建系統(tǒng)允許指定configure選項(xiàng)-extra-ldflags穿扳。
PKG_CONFIG_PATH: pkg-config使用的路徑衩侥,用于檢測許多編譯系統(tǒng)使用的pkg-config文件,以檢測特定庫使用的自定義CFLAGS / LDFLAGS矛物。
如果您在非標(biāo)準(zhǔn)路徑中安裝了軟件包茫死,則需要更新這些環(huán)境庫,以便系統(tǒng)工具能夠檢測軟件包組件履羞。在為依賴于其他已安裝的庫/標(biāo)頭/工具的包運(yùn)行配置腳本時(shí),一定要這樣做峦萎。
3. FFmpeg相關(guān)參數(shù)簡介
- 常用庫
| 庫名 | 用途 |
| :--: | :--: |
ffmpeg | 一個(gè)命令行工具,用來對視頻文件轉(zhuǎn)換格式忆首,也支持對電視卡即時(shí)編碼
ffserver | 一個(gè)HTTP多媒體即時(shí)廣播流服務(wù)器爱榔,支持時(shí)光平移
ffplay|一個(gè)簡單的播放器,基于SDL與FFmpeg庫
libavcodec | 包含全部FFmpeg音頻/視頻編解碼庫
libavformat| 包含demuxers和muxer庫
libavutil | 包含一些工具庫
libpostproc | 對于視頻做前處理的庫
libavutil | 包含一些工具庫
libswscale | libswscale
- 主要參數(shù)
| 參數(shù)名 | 意義 |
| :--: | :--: |
-i | 設(shè)置輸入檔名糙及。
-f | 設(shè)置輸出格式详幽。
-y | 若輸出文件已存在時(shí)則覆蓋文件。
-fs | 超過指定的文件大小時(shí)則結(jié)束轉(zhuǎn)換浸锨。
-ss | 從指定時(shí)間開始轉(zhuǎn)換唇聘。
-t | 從-ss時(shí)間開始轉(zhuǎn)換(如-ss 00:00:01.00 -t 00:00:10.00即從00:00:01.00開始到00:00:11.00)。
-title | 設(shè)置標(biāo)題柱搜。
-timestamp | 設(shè)置時(shí)間戳迟郎。
-vsync | 增減Frame使影音同步。
| 視頻參數(shù)名 | 意義 |
| :--: | :--: |
b:v | 設(shè)置視頻流量聪蘸,默認(rèn)為200Kbit/秒谎亩。(單位請引用下方注意事項(xiàng))
r| 設(shè)置幀率值,默認(rèn)為25宇姚。
s | 設(shè)置畫面的寬與高匈庭。
aspect | 設(shè)置畫面的比例。
vn | 不處理視頻浑劳,于僅針對聲音做處理時(shí)使用阱持。
vcodec( -c:v )| 設(shè)置視頻視頻編解碼器,未設(shè)置時(shí)則使用與輸入文件相同之編解碼器魔熏。
| 聲音參數(shù)名 | 意義 |
| :--: | :--: |
b:a | 設(shè)置每Channel(最近的SVN版為所有Channel的總合)的流量衷咽。(單位請引用下方注意事項(xiàng))
ar| 設(shè)置采樣率鸽扁。
ac| 設(shè)置聲音的Channel數(shù)。
acodec ( -c:a ) | 設(shè)置聲音編解碼器镶骗,未設(shè)置時(shí)與視頻相同桶现,使用與輸入文件相同之編解碼器。
an | 不處理聲音鼎姊,于僅針對視頻做處理時(shí)使用骡和。
vol | 設(shè)置音量大小,256為標(biāo)準(zhǔn)音量相寇。(要設(shè)置成兩倍音量時(shí)則輸入512慰于,依此類推。)
- 查看 FFmpeg官方文檔
- 查看h265的數(shù)據(jù)的基本信息
ffmpeg -i /Users/tomxiang/Desktop/h265/test_tomxiang.h265
- 用libx265轉(zhuǎn)mp4.
ffmpeg -i /Users/tomxiang/Desktop/test_tomxiang.h265 -c:v libx265 /Users/tomxiang/xxtest/test265.mp4
- ffplay逐幀播放視頻與顯示視頻幀序號
macOS下使用ffplay唤衫,按下s鍵可單幀播放視頻婆赠,配合一個(gè)顯示文字的視頻濾鏡即可顯示當(dāng)前畫面的幀序號,命令示例如下所示:
ffplay -vf "drawtext=fontfile=/Library/Fonts/Arial.ttf:text=%{n}:box=1:x=(w-tw)/2:y=h-(2*lh)" sample.mp4
window下 FFmpeg源碼編譯
1. 編譯環(huán)境配置
準(zhǔn)備工作佳励,先把下面四個(gè)軟件下載下來休里。
2) SDL 注意:在此環(huán)境下2.0.3版本的源碼編譯會有問題,不推薦赃承。
3)yasm
4)FFmpeg
1.1 安裝WinGW編譯環(huán)境
MinGW(Minimalist GNU for Windows):輔助編譯Windows程序的工具鏈份帐。通過minGW installation manager來安裝。
MSYS(Minimal SYStem):是一個(gè)小型的GNU環(huán)境楣导,包括基本的bash,make等等畜挨。它也可以通過minGW installation manager進(jìn)行安裝筒繁。
打開minGW installation manager,按照下圖進(jìn)行勾選:
點(diǎn)擊Installation->Apply Changes 進(jìn)行安裝基本包巴元。
1.2 安裝yasm
yasm是匯編編譯器毡咏,因?yàn)閒fmpeg中為了提高效率用到了匯編指令,比如MMX和SSE逮刨。因此需要安裝這個(gè)工具呕缭。
如果沒有安裝yasm或nasm,在編譯的時(shí)候會遇到這樣的錯(cuò)誤“nasm/yasm not found or too old.”
下載 yasm 修己,并將可執(zhí)行行文件重命名為yasm.exe復(fù)制到
%MINGW_PATH%/bin
目錄下恢总。其中MINGW_PATH是MINGW的安裝目錄。把yasm源碼包解壓到F:\Work\ffmpeg-2.4\yasm1.2.0目錄睬愤。進(jìn)入yasm目錄片仿,分別執(zhí)行命令:
./configure --prefix=/usr/local/yasm
make
make install
- 通過下面命令導(dǎo)入yasm環(huán)境變量
export PATH="$PATH:/usr/local/yasm/bin"
1.3 安裝pkg-config
pkg-config是一個(gè)輔助的配置、鏈接工具尤辱,可以方便的支持gcc自動配置砂豌。
建議參考:pkg-config for mingw 安裝及配置
注意配置好環(huán)境變量厢岂,PKG_CONFIG_PATH(pkg-config默認(rèn)的庫依賴項(xiàng)查找目錄)。
也可以把pkg-config.exe放到%MINGW_PATH%/bin
下阳距。
1.4 下載安裝SDL
由于編譯ffplay需要SDL塔粒,所以需要先安裝SDL。
- SDL安裝方式1:
- 把SDL源碼解壓縮到F:\Work\ffmpeg-2.4\SDL-1.2.15目錄筐摘。進(jìn)入SDL目錄卒茬,分別執(zhí)行
./configure --prefix=/usr/local/SDL
make
make install
完成SDL的安裝。
SDL編譯完成之后蓄拣,生成的bin文件扬虚、include文件、lib文件存放在
C:\msys\1.0\local\SDL
目錄下球恤。通過下面命令導(dǎo)入SDL環(huán)境變量.
export PATH="$PATH:/usr/local/SDL/bin:/usr/local/SDL/include:/usr/local/SDL/lib"
如果沒有設(shè)置環(huán)境變量辜昵,在執(zhí)行ffmpeg configure
時(shí),SDL support項(xiàng)顯示為no.(注:mingw默認(rèn)根目錄對應(yīng)與windows下的C:\msys\1.0\目錄咽斧,可以通過echo $PATH查看當(dāng)前的系統(tǒng)路徑)
- SDL安裝方式2:
下載SDL2堪置,解壓之后,把include/sdl张惹、lib舀锨、bin目錄下的文件拷貝到
%MINGW_PAH%/msys/1.0
的對應(yīng)目錄下。把l
ib/pkg-config/sdl2.pc
中prefix=/opt/local/x86_64-w64-mingw32
的prefix的路徑修改為%MINGW_PAH%/msys/1.0
宛逗,還有幾處prefix指定為/opt/local/x86_64-w64-mingw32
的地方也需要修改一下坎匿,可以全局搜索替換一下(沒有找到更好的方法)。
說明:
當(dāng)編譯參數(shù)加上--enable-sdl時(shí)如果沒有找到匹配的sdl會報(bào)錯(cuò)提示雷激,如果不加這個(gè)參數(shù)替蔬,沒有報(bào)錯(cuò)提示。
遇到問題可以查看config.log中測試sdl部分的日志屎暇,檢查是否存在sdl版本或者指定的庫的位置有問題承桥。我就遇到了prefix指定的sdl位置不對,導(dǎo)致指定的編譯的頭文件位置不對導(dǎo)致找不到頭文件的問題根悼。
1.5
2. 編譯FFmpeg
- 把ffmpeg源碼(ffmpeg-2.4.tar.bz2)解壓到F:\Work\ffmpeg-2.4\ffmpeg-2.4凶异,進(jìn)入ffmpeg代碼目錄, 分別執(zhí)行下面命令:
# 進(jìn)入FFmpeg源碼目錄
cd FFmpeg
# 配置編譯參數(shù)
./configure --prefix=../buildout --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl
# 編譯
make
make install
完成之后檢查FFmpeg編譯目錄下的config.h文件挤巡,找到HAVE_SDL剩彬、CONFIG_SDL宏,如果都是1矿卑,表示SDL配置成功襟衰。
可能存在的問題:
- 執(zhí)行make時(shí)遇到下面的錯(cuò)誤ffbuild/common.mak:174 missing separator. Stop
解決方法:
運(yùn)行g(shù)it config --global core.autocrlf false
然后運(yùn)行下面的命令刪除ffmpeg代碼,并重新獲取一下即可
- 運(yùn)行ffplay.exe的時(shí)候提示找不到SDL2.dll
解決方法:
把下載的sdl中的bin目錄下的SDL2.dll拷貝到ffplay.exe所在的目錄。
linux下 FFmpeg源碼編譯
IOS下 FFmpeg源碼編譯
IOS 編碼簡介
iOS上編解碼分為兩種瀑晒,硬編解碼和軟編解碼绍坝,可以參考下表:
| 類型 | 工具 | 硬件支持 | 后臺 | 思路 | 備注 |
| :--: | :--: | :--: | :--: | :--: | :--: |
硬編解碼| VideoToolBox | 非CPU或者專用處理器 | 編碼(iOS>=10.0),解碼不支持 | VideoVTToolBox | - |
|硬編解碼| AVAssetWriter| 非CPU或者專用處理器 | 支持編碼| 需要將視頻寫入本地文件,然后通過實(shí)時(shí)監(jiān)聽文件內(nèi)容的改變苔悦,讀取文件并處理封包 | - |
| 軟編解碼 | FFmpeg | CPU| 支持| - | - |
IOS 編譯FFmpeg
- IOS 可以通過如下兩種方式安裝ffmpeg:
下載iOS版本ffmpeg靜態(tài)庫: 即不用手動編譯,我們只需要下載得到頭文件及.a庫文件.
手動編譯: 下載源碼, 可以在更改一些flag或源碼后再編譯腳本,較為靈活.
如果僅僅是想簡單直接使用ffmeg可以下載一個(gè)穩(wěn)定版本的靜態(tài)庫, 建議用第一種方式.
如果需要在iOS項(xiàng)目中自定義使用ffmpeg, 以及修改一些ffmpeg中的源碼以適應(yīng)項(xiàng)目,使用第二種方式.
- IOS 編譯所需的資源可以從這個(gè)百度云下載:IOS編譯FFmpeg所需資源下載
提取碼: 5400
百度云 鏈接:https://pan.baidu.com/s/1xeHNgHHGAU1nru35ewjVFA 密碼:5400
1. 下載 gas-preprocessor
此文件是編譯FFmpeg必備的腳本文件,使用如下命令將其拷貝進(jìn)bin下
cp -f /xxx/gas-preprocessor.pl /usr/local/bin/
2. 安裝 yasm
下載yasm
yasm是一個(gè)完全重寫的NASM匯編并且支持x86和AMD64指令集.
brew install yasm
3. 下載 x264-iOS編譯腳本及源碼
下載 x264-iOS編譯腳本 及 源碼
- 下載x264編譯腳本解壓后如下
- 然后下載最新版源碼解壓后如下
- 將源碼文件夾改名為x264并放至編譯腳本文件夾(x264-ios-master)下
修改后如圖:
因?yàn)榫幾g腳本中指定文件目錄為x264,所以需要改名,也可以改編譯腳本
最好手動強(qiáng)制設(shè)置下GCC位置,否則可能會報(bào)錯(cuò),然后執(zhí)行命令:
cd 到你的x264-ios-master文件夾下轩褐,然后執(zhí)行命令:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
./build-x264.sh
- 執(zhí)行完成之后可以看到生成了x264-iOS文件夾
- 可能存在的編譯報(bào)錯(cuò):
-
No working C compiler found
: 新版mac直接編譯會報(bào)錯(cuò),原因是gcc一些必要工具找不到.可能是xcode位置換了的原因,因?yàn)槲覀冎饕褂谜鏅C(jī)調(diào)試,所以我們在編譯腳本中只保留arm64即可,如下修改后,可以直接編譯通過. 不過像模擬器這樣的設(shè)置是無法使用x264的,因?yàn)槲覀兿喈?dāng)于僅編譯了真機(jī)所需的庫.
ARCHS="arm64 x86_64 i386 armv7 armv7s"
改為如下
ARCHS="arm64"
4. 下載FFmpeg-iOS編譯腳本及源碼
注意: 在這里可以僅下載FFmpeg-iOS編譯腳本,不用下載源碼,執(zhí)行腳本會自動下載源碼,如果不想每次自動下載,可以手動下載源碼,稍微修改下FFmpeg編譯腳本即可.這里不做過多說明.
- 修改腳本(build-ffmpeg.sh文件)內(nèi)容
- x264編譯好的文件夾必須在當(dāng)前目錄并且命名為fat-x264,所以我們第3步編譯后生成的x264-iOS文件夾改名成fat-264,放在FFmpeg-iOS-build-script這個(gè)文件夾中玖详。目錄結(jié)構(gòu)如下:
- 修改如下內(nèi)容:
CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET -fembed-bitcode"
修改為
CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET"
在build-ffmpeg.sh中找到104行把介,修改為CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET"
如下圖:
- 因?yàn)槲覀冊谏弦徊街袃H僅編譯arm64的x264,所以這里我們也僅僅編譯arm64的FFmpeg.稍微修改腳本文件即可.
ARCHS="arm64 armv7 x86_64 i386"
修改為
ARCHS="arm64"
在build-ffmpeg.sh中找到37行:ARCHS="arm64 armv7 x86_64 i386"
修改為:ARCHS="arm64"
。如下圖所示:
- 如果要使用avutil.h相關(guān)功能,需要更改腳本
FFmpeg框架中的一個(gè)結(jié)構(gòu)體命名為"AVMediaType"與蘋果自帶框架產(chǎn)生沖突,所以,我們必須修改編譯腳本,使用"FFmpegAVMediaType"帶替換"AVMediaType".這里需要在腳本文件中添加如下命令行,即將AVMediaType
替換為FFmpegAVMediaType
. 注意: $SOURCE為ffmpeg的根目錄.
grep -rl AVMediaType ./$SOURCE | xargs sed -i .bak s@AVMediaType@FFmpegAVMediaType@g
- 編譯腳本文件
./build-ffmpeg.sh
執(zhí)行腳本后蟋座,會先下載源碼:
5. Xcode編譯
- Xcode新建iOS項(xiàng)目
新建一個(gè)iOS工程,然后將ViewController.m
重命名為 ViewController.mm
,因?yàn)?FFmpeg中涉及C,C++混編,所以需要做此操作.
將FFmpeg編譯好的頭文件與庫拉進(jìn)項(xiàng)目中,并在主控制器測試代碼,此時(shí)會有一大堆錯(cuò)誤拋出,下面逐個(gè)解決.
添加依賴庫
- 在Build Setting中禁止Bitcode
- 在Build Setting中設(shè)置頭文件與庫的位置
這里特別要注意,因?yàn)樵诖蠖鄶?shù)項(xiàng)目中以及FFmpeg自身源代碼中,都是以以下格式來導(dǎo)入的頭文件