FFmpeg是一套開源的多媒體處理方案,可以應(yīng)用于流媒體或直播中,能夠?qū)崿F(xiàn)音視頻的編解碼以及其他音視頻處理等,非常強(qiáng)大。這里簡單介紹iOS平臺的FFmpeg靜態(tài)庫的編譯與集成。
1.下載編譯腳本
點(diǎn)擊此鏈接,進(jìn)入github下載編譯腳本:GitHub - kewlbear/FFmpeg-iOS-build-script: Shell scripts to build FFmpeg for iOS and tvOS
下載完成并解壓后得到:

2.運(yùn)行編譯腳本
打開終端,進(jìn)入文件目錄,運(yùn)行命令行./build-ffmpeg.sh
編譯過程中可能會遇到的錯(cuò)誤:
1、報(bào)錯(cuò)yasm沒有安裝,按提示操作安裝
2、報(bào)錯(cuò)"xcrun -sdk iphoneos clang is unable to create an executable file.",運(yùn)行命令行sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/后重新編譯
3、報(bào)錯(cuò)"src/libavutil/arm/asm.S:50:9: error: unknown directive .arch armv7-a",將編譯腳本build-ffmpeg.sh中ARCHS="arm64 armv7 x86_64 i386"的armv7去掉后重新編譯
4、報(bào)錯(cuò)".../FFmpeg-iOS-build-script-master-2/ffmpeg-xxx/configure: No such file or directory",打開http://www.ffmpeg.org/releases,將相應(yīng)版本的源碼下載解壓后拷貝到/FFmpeg-iOS-build-script-master 文件夾下,重新編譯
5、報(bào)錯(cuò)"GNU assembler not found, install/update gas-preprocessor",打開https://github.com/mansr/gas-preprocessor,下載安裝最新的gas-preprocessor腳本后,重新編譯
編譯會花費(fèi)一段時(shí)間,如果終端沒有報(bào)錯(cuò)并顯示如下,說明編譯成功:

這個(gè)時(shí)候目錄下會生成編譯后的靜態(tài)庫及源碼,如下圖:

其中,FFmpeg-iOS即是我們需要用到的framework
3.集成FFmpeg-iOS
將整個(gè)FFmpeg-iOS文件夾拖入工程中,并引入相關(guān)的頭文件,例如:
#import "libavcodec/avcodec.h",如果報(bào)錯(cuò)'libavcodec/avcodec.h' file not found

解決方法如下:
在工程的Build Settings中搜索search,找到Header Search Paths與Library Search Paths,將Library Search Paths中的ffmpeg的lib路徑$(PROJECT_DIR)/FFmpegTest/FFmpeg-iOS/lib復(fù)制粘貼到Library Search Paths中,并將lib改為include

如果還出現(xiàn)了鏈接報(bào)錯(cuò)clang: error: linker command failed with exit code 1 (use -v to see invocation),可能是因?yàn)槿鄙傧到y(tǒng)庫,需要#import <VideoToolbox/VideoToolbox.h>,并且需要在工程Build Phases中的Link Binary With Libraries中Add items:libz.1.2.5.tbd、libbz2.1.0.tbd、libiconv.2.4.0.tbd,成功編譯。