您好,登錄后才能下訂單哦!
在成功編譯FFMpeg之后,調用某些FFMpeg的命令還需要用到libx264,因此需要額外編譯libx264并打包在FFMpeg中
1. 編譯環境:
Mac OS 10.9 XCode6.1
2. libx264的編譯
編譯包需要符合arm64、armv7s、armv7、x86_64、i386這幾個架構。前面3個是給真機使用的,后面2個是給模擬器使用的。目前使用FFmpeg-iOS-build-script作者寫的一鍵編譯腳本只能編譯出適用于模擬器的.a包,適用于真機的包還需要自己手動編譯。有時間可以研究它的編譯腳本源碼,添加上手動編譯的代碼,這里先做一個總結。
(1)首先到http://www.videolan.org/developers/x264.html 下載最新的libx264源碼包,解壓之后是一個含snapshot-xxxx的一個文件夾,把它拷貝到隨便一個文件夾下,重命名為x264;
(2)到https://github.com/kewlbear/x264-ios 下載x264的一鍵編譯腳本文件,把它放到跟x264文件夾同級的地方;
(3)運行腳本./build-x264.sh;
(4)腳本運行完畢之后,會多出幾個文件夾:x264-iOS,scratch-x264,thin-x264。其中x264-iOS是最終的輸出,里面有include和lib兩個文件夾。lib文件夾里面只有*.a一個文件。如果順利的話,這個包是一個fat包,是包含了arm64、armv7s、armv7、x86_64、i386這幾個架構的,但是在我的機器上,用lipo命令看,只有x86_64、i386這兩種架構,具體原因還沒有搞清楚。因此我們還需要手動編譯arm64、armv7s、armv7的包,繼續下一步;
(5)再拷貝一份源碼出來,放到另外一個文件夾下,在命令行中進入這個文件夾;
(6)編譯armv7的包:進入源碼的文件夾后,在命令行中輸入
CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
./configure --host=arm-apple-darwin --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk
--prefix='build' --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7 -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/usr/lib/system'
--enable-pic --extra-asflags='-arch armv7'
注意修改里面的iPhoneOS版本。
如果config成功,命令行會提示可以執行make命令了,先不急著執行make。手動copy 一個新版的gas-preprocessor.pl到extras目錄下面。gas-preprocessor.pl我用的是https://git.libav.org/?p=gas-preprocessor.git;a=blob;f=gas-preprocessor.pl;h=44d11178667ece04df993e50023b41155d53582a;hb=HEAD 這個版本,源碼1033行,比x264的源碼要長很多。
復制完畢后,在命令行中執行make;執行完make之后再執行make install,成功后會發現源碼文件夾里面多了一個libx264.a的包,用lipo查看,確實是armv7的架構,把它拷貝出來,重命名為libx264-armv7。
(7)編譯armv7s的包。先執行下make clean,清除上一步執行得到的結果。編譯armv7s的包與編譯armv7的步驟完全一致,只不過配置需要略微修改,且不需要再拷貝gas-preprocessor.pl文件。配置命令如下:
CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
./configure --host=arm-apple-darwin --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk
--prefix='build' --extra-cflags='-arch armv7s' --extra-ldflags='-arch armv7s -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/usr/lib/system'
--enable-pic --extra-asflags='-arch armv7s'
同樣得到一個libx264.a的包,拷貝出來,重命名為libx264-armv7s。
(8)編譯arm64的包,方法同上,配置命令如下:
CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
./configure --host=aarch74-apple-darwin --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk
--prefix='build' --extra-cflags='-arch arm64' --extra-ldflags='-arch arm64
-L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/usr/lib/system' --enable-pic --extra-asflags='-arch arm64'
同樣得到一個libx264.a的包,拷貝出來,重命名為libx264-arm64。
(9)此時我們得到了*.a,libx264-armv7.a,libx264-armv7s.a,libx264-arm64.a四個文件,用lipo命令把他們融合成一個包:
lipo -create *.a,libx264-armv7.a,libx264-armv7s.a,libx264-arm64.a -output libx264.a
把生成的libx264.a的包拷貝回x264-iOS/lib中,和include一起,整個x264-iOS當做libx264的output
3. 編譯帶x264的ffmpeg包
拷貝x264-iOS到build-ffmpeg.sh腳本所在目錄下,并重命名x264-iOS為fat-x264,清除build-ffmpeg.sh腳本中X264=`pwd`/fat-x264一行的注釋,保存后執行腳本,順利的話就會跟之前一樣生成各個包啦。。相比之前,會多出一個libpostproc.a。
4. 在項目中使用帶x264的ffmpeg以及libx264
如果直接替換掉原來的FFMPEG .a庫,會報編譯錯誤。此時需要加上libx264。把x264-iOS(含頭文件和.a)拖到項目中,link framework中加入libx264,user header search path中加入x264-iOS/include的路徑,運行就可以了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。