FFmpeg學(xué)習(xí)之一(FFmpeg源碼編譯)

Mac下 FFmpeg源碼編譯

安裝

可以通過如下三種方式安裝ffmpeg

  1. 終端安裝 (借助homebrew): 此方式ffmpeg會保持自動更新.

  2. 下載ffmpeg靜態(tài)庫: 即不用手動編譯,我們只需要直接運(yùn)行下載得到的二進(jìn)制文件即可.靜態(tài)生成的一個(gè)缺點(diǎn)是必須手動執(zhí)行更新降传。此外, 它們可能不包含所需的所有編碼器或篩選器。

  3. 手動編譯: 下載源碼, 然后使用所需的標(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是命令行中的軟件包安裝器.絕大多數(shù)知名軟件包或插件都可以用它來安裝. 如果你還沒有安裝,直接用下面的命令可以安裝

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 安裝FFmpeg
  1. 通用版本安裝,只需命令行輸入:brew install ffmpeg

  2. 最新版本安裝, 并提供最少的配置 (和庫依賴關(guān)系) 選項(xiàng)祠汇,命令行輸入:brew install ffmpeg --HEAD

  3. 擴(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

  • 更新
  1. 通用版本更新办成,只需終端輸入:brew update && brew upgrade ffmpeg

  2. 如最新版本泡态,終端輸入:brew upgrade --fetch-HEAD ffmpeg

  3. 如果你已經(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 安裝依賴庫

  1. 自動安裝依賴庫,只需命令行輸入:

$ brew install automake fdk-aac git lame libass libtool libvorbis libvpx \

opus sdl shtool texi2html theora wget x264 x265 xvid nasm

  1. 手動安裝依賴庫

FFmpeg的編譯依賴于Pkg-config,而它又依賴于GLib,而GLib又依賴于gettext,所以必須先安裝并編譯相關(guān)依賴迂卢。

  • Pkg-config & GLib & gettext
  1. gettext: 在庫中編輯文件stpncpy.c,并且在#ifndef weak_alias之前添加#undef stpncpy.

LIBFFI_CFLAGS=-I/usr/include/ffi LIBFFI_LIBS=-lffi ./configure;make && sudo make install

  1. glib: Linux平臺下最常用的C語言函數(shù)庫某弦,它具有很好的可移植性和實(shí)用性。

  2. 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上獲得充活。

  • 其他附加的庫
  1. x264: --enable-gpl --enable-libx264

  2. fdk-aac: --enable-libfdk-aac

  3. libvpx: --enable-libvpx

  4. libvorbis: --enable-libvorbis

  5. libopus:

  6. LAME:--enable-libmp3lame

  7. 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

  • 編譯
  1. 完整編譯:

$ ./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

  1. 最簡編譯:

$ ./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慰于,依此類推。)

  1. 查看h265的數(shù)據(jù)的基本信息

ffmpeg -i /Users/tomxiang/Desktop/h265/test_tomxiang.h265

  1. 用libx265轉(zhuǎn)mp4.

ffmpeg -i /Users/tomxiang/Desktop/test_tomxiang.h265  -c:v libx265 /Users/tomxiang/xxtest/test265.mp4

  1. 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è)軟件下載下來休里。

1)MinGW-MSYS Bundle

2) SDL 注意:在此環(huán)境下2.0.3版本的源碼編譯會有問題,不推薦赃承。

3)yasm

4)FFmpeg

1.1 安裝WinGW編譯環(huán)境

  1. MinGW(Minimalist GNU for Windows):輔助編譯Windows程序的工具鏈份帐。通過minGW installation manager來安裝。

  2. MSYS(Minimal SYStem):是一個(gè)小型的GNU環(huán)境楣导,包括基本的bash,make等等畜挨。它也可以通過minGW installation manager進(jìn)行安裝筒繁。

  3. 打開minGW installation manager,按照下圖進(jìn)行勾選:

點(diǎn)擊Installation->Apply Changes 進(jìn)行安裝基本包巴元。

1.2 安裝yasm

  1. yasm是匯編編譯器毡咏,因?yàn)閒fmpeg中為了提高效率用到了匯編指令,比如MMX和SSE逮刨。因此需要安裝這個(gè)工具呕缭。

  2. 如果沒有安裝yasm或nasm,在編譯的時(shí)候會遇到這樣的錯(cuò)誤“nasm/yasm not found or too old.”

  3. 下載 yasm 修己,并將可執(zhí)行行文件重命名為yasm.exe復(fù)制到%MINGW_PATH%/bin目錄下恢总。其中MINGW_PATH是MINGW的安裝目錄。

  4. 把yasm源碼包解壓到F:\Work\ffmpeg-2.4\yasm1.2.0目錄睬愤。進(jìn)入yasm目錄片仿,分別執(zhí)行命令:


./configure --prefix=/usr/local/yasm

make

make install

  1. 通過下面命令導(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。

  1. 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)路徑)

  1. SDL安裝方式2:
  • 下載SDL2堪置,解壓之后,把include/sdl张惹、lib舀锨、bin目錄下的文件拷貝到%MINGW_PAH%/msys/1.0的對應(yīng)目錄下。

  • 把lib/pkg-config/sdl2.pcprefix=/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

  1. 把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

  1. 完成之后檢查FFmpeg編譯目錄下的config.h文件挤巡,找到HAVE_SDL剩彬、CONFIG_SDL宏,如果都是1矿卑,表示SDL配置成功襟衰。

  2. 可能存在的問題:

  • 執(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:
  1. 下載iOS版本ffmpeg靜態(tài)庫: 即不用手動編譯,我們只需要下載得到頭文件及.a庫文件.

  2. 手動編譯: 下載源碼, 可以在更改一些flag或源碼后再編譯腳本,較為靈活.

如果僅僅是想簡單直接使用ffmeg可以下載一個(gè)穩(wěn)定版本的靜態(tài)庫, 建議用第一種方式.

如果需要在iOS項(xiàng)目中自定義使用ffmpeg, 以及修改一些ffmpeg中的源碼以適應(yīng)項(xiàng)目,使用第二種方式.

百度云 鏈接:https://pan.baidu.com/s/1xeHNgHHGAU1nru35ewjVFA 密碼:5400

1. 下載 gas-preprocessor

下載 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編譯腳本源碼

  1. 下載x264編譯腳本解壓后如下
  1. 然后下載最新版源碼解壓后如下
  1. 將源碼文件夾改名為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

  1. 執(zhí)行完成之后可以看到生成了x264-iOS文件夾
image
  1. 可能存在的編譯報(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編譯腳本源碼

注意: 在這里可以僅下載FFmpeg-iOS編譯腳本,不用下載源碼,執(zhí)行腳本會自動下載源碼,如果不想每次自動下載,可以手動下載源碼,稍微修改下FFmpeg編譯腳本即可.這里不做過多說明.

  1. 修改腳本(build-ffmpeg.sh文件)內(nèi)容
  1. x264編譯好的文件夾必須在當(dāng)前目錄并且命名為fat-x264,所以我們第3步編譯后生成的x264-iOS文件夾改名成fat-264,放在FFmpeg-iOS-build-script這個(gè)文件夾中玖详。目錄結(jié)構(gòu)如下:
  1. 修改如下內(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"如下圖:

  1. 因?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"。如下圖所示:

  1. 如果要使用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

  1. 編譯腳本文件

./build-ffmpeg.sh

執(zhí)行腳本后蟋座,會先下載源碼:

5. Xcode編譯

  1. Xcode新建iOS項(xiàng)目

新建一個(gè)iOS工程,然后將ViewController.m重命名為 ViewController.mm ,因?yàn)?FFmpeg中涉及C,C++混編,所以需要做此操作.

  1. 將FFmpeg編譯好的頭文件與庫拉進(jìn)項(xiàng)目中,并在主控制器測試代碼,此時(shí)會有一大堆錯(cuò)誤拋出,下面逐個(gè)解決.

  2. 添加依賴庫

  1. 在Build Setting中禁止Bitcode
  1. 在Build Setting中設(shè)置頭文件與庫的位置

這里特別要注意,因?yàn)樵诖蠖鄶?shù)項(xiàng)目中以及FFmpeg自身源代碼中,都是以以下格式來導(dǎo)入的頭文件

Android 下 FFmpeg源碼編譯

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拗踢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子向臀,更是在濱河造成了極大的恐慌巢墅,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件券膀,死亡現(xiàn)場離奇詭異君纫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)芹彬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門蓄髓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人舒帮,你說我怎么就攤上這事会喝。” “怎么了玩郊?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵肢执,是天一觀的道長。 經(jīng)常有香客問我瓦宜,道長,這世上最難降的妖魔是什么岭妖? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任临庇,我火速辦了婚禮,結(jié)果婚禮上昵慌,老公的妹妹穿的比我還像新娘假夺。我一直安慰自己,他們只是感情好斋攀,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布已卷。 她就那樣靜靜地躺著,像睡著了一般淳蔼。 火紅的嫁衣襯著肌膚如雪侧蘸。 梳的紋絲不亂的頭發(fā)上裁眯,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機(jī)與錄音讳癌,去河邊找鬼穿稳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛晌坤,可吹牛的內(nèi)容都是我干的逢艘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼骤菠,長吁一口氣:“原來是場噩夢啊……” “哼它改!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起商乎,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤央拖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后截亦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爬泥,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年崩瓤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袍啡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡却桶,死狀恐怖境输,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颖系,我是刑警寧澤嗅剖,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站嘁扼,受9級特大地震影響信粮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜趁啸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一强缘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧不傅,春花似錦旅掂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春秘车,著一層夾襖步出監(jiān)牢的瞬間典勇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工鲫尊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痴柔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓疫向,卻偏偏與公主長得像咳蔚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子搔驼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容