簡介
做音視頻開發(fā),除了平臺提供的SDK外,我們經(jīng)常會用到一些優(yōu)秀的第三方開源庫,這里我們將介紹下lame, fad-aac, x264的編譯及使用。
lame
目前,LAME被認為是中高比特率和VBR的最佳MP3編碼器,主要得益于其開發(fā)人員的專注工作和開源許可模式,使該項目能夠利用來自世界各地的工程資源。 質(zhì)量和速度的提升仍在繼續(xù),可能使LAME成為唯一仍在積極開發(fā)的MP3編碼器。
fdk-aac
Fraunhofer FDK AAC是由Fraunhofer IIS開發(fā)的高質(zhì)量開源AAC編碼器庫。 它是針對Android正式發(fā)布的,但已被移植到其他平臺。 Winamp中包含的許可Fraunhofer AAC編解碼器(通常稱為FhG AAC)與FDK AAC編解碼器不同。FDK AAC是一個目前效率很高的aac編解碼庫。
x264
x264是一個免費的開源軟件庫和VideoLAN開發(fā)的命令行實用程序,用于將視頻流編碼為H.264 / MPEG-4 AVC格式。 它是根據(jù)GNU通用公共許可證條款發(fā)布的。
編譯
lame, fad-aac, x264的編譯其實很簡單,github上有現(xiàn)成的build shell, 但有些并非在機器上就能跑起來。所以針對一些錯誤,我對一些build shell做了少許改動,支持 x86_64, arm64e, arm64, armv7s, armv7架構(gòu)的編譯。
接下來我們就要開始編譯了,請先從這里下載編譯需要用的代碼、腳本和一些說明,下載后,直接進行編譯就行,省時省力。
Build lame
- 進入目錄 lame-3.100 ,
cd lame-3.100. - 更改腳本文件的權(quán)限,
sudo chmod 777 build-lame.sh. - 運行腳本,
./build-lame.sh
你也可以參考腳本使用說明 lame shell 腳本使用說明.
Build fdk-aac
- 進入目錄 fdk-aac-2.0.0 ,
cd fdk-aac-2.0.0. - 更改腳本文件的權(quán)限,
sudo chmod 777 build-fdk-aac.sh. - 運行腳本,
./build-fdk-aac.sh
你也可以參考腳本使用說明 fdk-aac shell 腳本使用說明.
Build x264
- 進入目錄 x264-20190809-2245 ,
cd x264-20190809-2245. - 更改腳本文件的權(quán)限,
sudo chmod 777 build-x264.sh. - 運行腳本,
./build-x264.sh
你也可以參考腳本使用說明 x264 shell 腳本使用說明.
ffmpeg
一種完整的跨平臺解決方案,用于錄制,轉(zhuǎn)換和流式傳輸音頻和視頻。
Build ffmpeg
- 進入目錄
ffmpeg-4.2,cd x264-20190809-2245. - 更改腳本文件的權(quán)限,
sudo chmod 777 build-ffmpeg.sh. - 如果想讓ffmpeg使用
x264, lame, fdk-aac的話,還請手動將之前編譯環(huán)節(jié)中產(chǎn)生的fat-x264, fat-lame, fat-fdk-aac三個文件夾復(fù)制到ffmpeg-4.2/external-libs下面。反之,你需要把X264, LAME, FDK_AAC從build-ffmpeg.sh中注釋掉. - 運行腳本,
./build-ffmpeg.sh。 - 最后,你可以在
fat-ffmpeg目錄下找到相關(guān)靜態(tài)庫。
你也可以參考腳本使用說明 ffmpeg shell 腳本使用說明.
編譯可能碰到的問題
No working C compiler found.
可能是xcode路徑問題,終端輸入命令:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/Found no assembler,Minimum version is nasm-x.x.x或
Found no assembler,Minimum version is yasm-x.x.x
原因是沒有安裝yasm/nasm或yasm/nasm版本太低,需要重新安裝nasm/yasm。
brew install nasm或brew install yasm.-
編譯i386遇到
No working C compiler found
有兩種解決辦法,任選一種就好:- 可以直接將i386略過編譯,將
i386從編譯腳本ARCHS="arm64 x86_64 i386 armv7 armv7s" 中刪除,然后重新編譯 - 在終端輸入
./build-x264.sh arm64e arm64 x86_64 armv7s進行編譯。
- 可以直接將i386略過編譯,將