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

Mac下 FFmpeg源碼編譯

安裝

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

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

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

  3. 手動(dòng)編譯: 下載源碼, 然后使用所需的標(biāo)志(可以指定開啟需要的功能)運(yùn)行./configure, 最后使用make或make install。但是, 必須手動(dòng)設(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ò)展,可能會(huì)失敗,因?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 的用戶需要使用來自第三方存儲(chǔ)庫的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. 手動(dòng)編譯

2.1 編譯環(huán)境 - Xcode

手動(dòng)編譯Mac上必須安裝Xcode,然后安裝命令行工具

  • 界面安裝: Preferences > Downloads > Components

  • 命令行安裝: xcode-select --install

2.2 安裝依賴庫

  1. 自動(dòng)安裝依賴庫,只需命令行輸入:

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

opus sdl shtool texi2html theora wget x264 x265 xvid nasm

  1. 手動(dòng)安裝依賴庫

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平臺(tái)下最常用的C語言函數(shù)庫,它具有很好的可移植性和實(shí)用性。

  2. Pkg-config : 維護(hù)了一個(gè)保存各個(gè)代碼庫的路徑的數(shù)據(jù)庫。當(dāng)然這個(gè)”數(shù)據(jù)庫” 非常的簡(jiǎn)單,其實(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. 最簡(jiǎn)編譯:

$ ./configure  && make

  • 安裝

sudo make install

2.5 手動(dòng)編譯步驟

  • 配置腳本 (編輯腳本文件./configure)

  • 編譯 (make)

  • 安裝 (make install)

1>. 配置: 允許創(chuàng)建編譯步驟所需的必要文件,并通過源包通常提供的配置腳本完成。在配置期間,可以定義安裝前綴和已啟用的組件。

2>. 編譯: 編譯通常包括在配置步驟完成后運(yùn)行make。在此階段,將生成所需的庫和二進(jìn)制文件。

3> 安裝: 安裝將在配置步驟中指定的路徑中安裝二進(jìn)制文件和庫。請(qǐng)注意,由于您可以使用編譯路徑中編譯的二進(jìn)制文件,因此不需要執(zhí)行此步驟。


./configure

make

make install

注意: 編譯源目錄中的文件,并將庫安裝在/ usr / local中。第三步可能需要超級(jí)用戶權(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è)變量會(huì)影響您的軟件包安裝。特別是,根據(jù)您的安裝前綴,您可能需要更新其中一些變量,以確保系統(tǒng)工具可以找到已安裝的組件。可以通過命令env顯示環(huán)境變量列表。

以下是受影響變量的列表:

  • PATH: 定義變量簡(jiǎn)化路徑,系統(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)志的前綴?;蛘撸S多構(gòu)建系統(tǒng)允許指定configure選項(xiàng)-extra-ldflags。

  • PKG_CONFIG_PATH: pkg-config使用的路徑,用于檢測(cè)許多編譯系統(tǒng)使用的pkg-config文件,以檢測(cè)特定庫使用的自定義CFLAGS / LDFLAGS。

如果您在非標(biāo)準(zhǔn)路徑中安裝了軟件包,則需要更新這些環(huán)境庫,以便系統(tǒng)工具能夠檢測(cè)軟件包組件。在為依賴于其他已安裝的庫/標(biāo)頭/工具的包運(yùn)行配置腳本時(shí),一定要這樣做。

3. FFmpeg相關(guān)參數(shù)簡(jiǎn)介

  • 常用庫

| 庫名 | 用途 |

| :--: | :--: |

ffmpeg | 一個(gè)命令行工具,用來對(duì)視頻文件轉(zhuǎn)換格式,也支持對(duì)電視卡即時(shí)編碼

ffserver | 一個(gè)HTTP多媒體即時(shí)廣播流服務(wù)器,支持時(shí)光平移

ffplay|一個(gè)簡(jiǎn)單的播放器,基于SDL與FFmpeg庫

libavcodec | 包含全部FFmpeg音頻/視頻編解碼庫

libavformat| 包含demuxers和muxer庫

libavutil | 包含一些工具庫

libpostproc | 對(duì)于視頻做前處理的庫

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/秒。(單位請(qǐng)引用下方注意事項(xiàng))

r| 設(shè)置幀率值,默認(rèn)為25。

s | 設(shè)置畫面的寬與高。

aspect | 設(shè)置畫面的比例。

vn | 不處理視頻,于僅針對(duì)聲音做處理時(shí)使用。

vcodec( -c:v )| 設(shè)置視頻視頻編解碼器,未設(shè)置時(shí)則使用與輸入文件相同之編解碼器。

| 聲音參數(shù)名 | 意義 |

| :--: | :--: |

b:a | 設(shè)置每Channel(最近的SVN版為所有Channel的總合)的流量。(單位請(qǐng)引用下方注意事項(xiàng))

ar| 設(shè)置采樣率。

ac| 設(shè)置聲音的Channel數(shù)。

acodec ( -c:a ) | 設(shè)置聲音編解碼器,未設(shè)置時(shí)與視頻相同,使用與輸入文件相同之編解碼器。

an | 不處理聲音,于僅針對(duì)視頻做處理時(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逐幀播放視頻與顯示視頻幀序號(hào)

macOS下使用ffplay,按下s鍵可單幀播放視頻,配合一個(gè)顯示文字的視頻濾鏡即可顯示當(dāng)前畫面的幀序號(hào),命令示例如下所示:


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版本的源碼編譯會(huì)有問題,不推薦。

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í)候會(huì)遇到這樣的錯(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自動(dòng)配置。

建議參考: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)根目錄對(duì)應(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的對(duì)應(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會(huì)報(bào)錯(cuò)提示,如果不加這個(gè)參數(shù),沒有報(bào)錯(cuò)提示。

遇到問題可以查看config.log中測(cè)試sdl部分的日志,檢查是否存在sdl版本或者指定的庫的位置有問題。我就遇到了prefix指定的sdl位置不對(duì),導(dǎo)致指定的編譯的頭文件位置不對(duì)導(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 編碼簡(jiǎn)介

iOS上編解碼分為兩種,硬編解碼和軟編解碼,可以參考下表:

| 類型 | 工具 | 硬件支持 | 后臺(tái) | 思路 | 備注 |

| :--: | :--: | :--: | :--: | :--: | :--: |

硬編解碼| 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)庫: 即不用手動(dòng)編譯,我們只需要下載得到頭文件及.a庫文件.

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

如果僅僅是想簡(jiǎn)單直接使用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,所以需要改名,也可以改編譯腳本

最好手動(dòng)強(qiáng)制設(shè)置下GCC位置,否則可能會(huì)報(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直接編譯會(huì)報(bào)錯(cuò),原因是gcc一些必要工具找不到.可能是xcode位置換了的原因,因?yàn)槲覀冎饕褂谜鏅C(jī)調(diào)試,所以我們?cè)诰幾g腳本中只保留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í)行腳本會(huì)自動(dòng)下載源碼,如果不想每次自動(dòng)下載,可以手動(dòng)下載源碼,稍微修改下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)槲覀冊(cè)谏弦徊街袃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í)行腳本后,會(huì)先下載源碼:

5. Xcode編譯

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

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

  1. 將FFmpeg編譯好的頭文件與庫拉進(jìn)項(xiàng)目中,并在主控制器測(cè)試代碼,此時(shí)會(huì)有一大堆錯(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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容