最近有時間整理一下自己之前學習FFmpeg的相關知識點瀑构,特別是在編譯FFmpeg的過程中因為各種原因很容易出現各種各樣的問題裆针,現在這塊做個總結寺晌。
編譯libx264
首先編譯libx264
第一步:下載libx264源碼:?libx264下載地址
第二步:下載libx264-iOS的編譯腳本另假,libx264編譯腳本下載地址
可以看到己莺,腳本上指定的源代碼目錄是腳本目錄下的x264文件夾凌受,所以我們將下載的libx264的文件夾名字修改為x264, 并將文件夾移動到腳本所在目錄下阵子,當然也可以修改SOURCE的內容。
第三步:然后./build-x264.sh執(zhí)行腳本胜蛉,很不幸的是報錯了挠进,原因是沒有發(fā)現yasm匯編編譯器色乾,yasm是x86架構下的一個匯編器,ffmpeg默認是使能的领突。沒有該匯編器的話暖璧,后面編譯ffmpeg時會報如下錯誤:
可以添加上?--disable-asm,然后再重新編譯君旦,但是要指定架構類型澎办,架構類型不能含有x86架構,否則編譯出來的x264庫在和FFmpeg交叉編譯的時候會報
ERROR: libx264 not found
亦可以升級nasm金砍,通過nasm -v 查看版本
x264-iOS就是通用架構局蚀,里面包含了thin-x264內的所有架構
可以通過lipo -info /Users/wangxun/Downloads/x264-ios-master/x264-iOS/lib/libx264.a查看架構信息
編譯libfdk-aac
第一步:下載libfdk-aac源碼:libfdk-aac源碼
第二步:brew install automake libtool 運行該命令,安裝automake和libtool
第三步: 下載libfdk-aac的編譯腳本:libfdk-aac編譯腳本
移動libfdk-aac的源代碼文件夾至腳本目錄下并修改名稱為fdk-aac-0.1.5恕稠,或者修改SOURCE的內容使之與你下載的aac源碼的文件同名琅绅。
第四步:切換到目錄fdk-aac-0.1.5目錄下,并執(zhí)行./autogen.sh
第五步:切換到上層目錄鹅巍,添加權限并執(zhí)行build-fdk-aac.sh
至此libfdk-aac 編譯完成
編譯FFmpeg
第一步:下載FFmpeg iOS編譯腳本:FFmpeg iOS編譯腳本下載地址
第二步:將以上編譯的fdk-aac和x264移動到編譯腳本下奉件,只需要移動最后一步生成的包含頭文件及l(fā)ib文件的目錄。
第三步:編輯FFmpeg iOS 編譯腳本昆著,取消fdk-aac及x264的注釋县貌,并修改路徑指向對應的目錄,如下圖所示:
第四步:此時如果我們執(zhí)行build-ffmpeg.sh凑懂,如果沒有FFmpeg源代碼將會先進行FFmpeg源代碼的下載
如果FFmpeg源代碼為4.0煤痕,
接下來會出現以下問題,如圖所示:
可能還會遇到的問題
此時將DEPLOYMENT_TARGET改為8.0之上即可
可能在編譯的過程中還會遇到?C compiler test failed的問題摆碉,看下日志 ios/ffmpeg-armv7/config.log 中發(fā)現報錯說 iphoneos 找不到
SDK "iphoneos" cannot be located
此問題是Xcode的版本路徑問題,可能是因為安裝多版本的Xcode導致的脓豪,也可能是Xcode前后版本的位置不同巷帝,路徑沒有指定造成的
查找原因:
發(fā)現是這個Xcode路徑判斷錯誤
mac$ xcodebuild -showsdks
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
解決方法:給Xcode命令行工具指定路徑
mac$ sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/
FFmpeg-iOS的使用
打開Xcode,新建一個single view project扫夜,然后添加對應的lib文件并修改頭文件搜索目錄
但是除了這些之外楞泼,我們還需要添加其他的文件,如下所示:
1?libbz2.tbd
2?libz.tbd
3?libiconv.tbd
4?CoreMedia.framework
5?VideoToolbox.framework
6?AudioToolbox.framework
7?AVFoundation.framework
到此整個FFmpeg的編譯到使用已完成,在此過程中遇到的問題還是比較多的笤闯,特別是FFmpeg版本不同堕阔,編譯可能遇到的問題也不同,可能在此沒有一一記錄颗味。不過在此過程中發(fā)現如果只編譯真機arm64的架構會比較簡單遇到的問題也比較少超陆。
參考文章: