實戰FFmpeg--編譯iOS平台使用的FFmpeg庫(支持arm64的FFmpeg2.6.2)


  編譯環境:Mac OS X 10.10.2 ,Xcode 6.3  iOS SDK 8.3

      

  FFmpeg庫的下載地址是 http://www.ffmpeg.org/releases/ 。FFmpeg是一個跨平台的用C語言寫成的庫,包含了編碼,解碼,色彩空間轉換等的庫。

第一步:

  下載編譯FFmpeg所需要的腳本文件gas-preprocessor.pl,下載地址: https://github.com/mansr/gas-preprocessor 。在mac終端中使用cp命令將腳本文件gas-preprocessor.pl復制到 /usr/bin/目錄,並賦予可執行權限。執行命令為:

(1)sudo cp -f /Users/dev.temobi/Downloads/gas-preprocessor-master/gas-preprocessor.pl /usr/bin/   (備注:/Users/dev.temobi/Downloads/gas-preprocessor-master/ 是腳本gas-preprocessor.pl所在的路徑)

(2)chmod +x /usr/bin/gas-preprocessor.pl

  執行命令后,前往文件夾/usr/bin/中查看是否復制成功。若看到腳本文件gas-preprocessor.pl已經成功復制到 /usr/bin/目錄中,說明復制成功了。

 

第二步:

  根據實際項目需要修改build-ffmpeg.sh腳本中的FFmpeg和iOS SDK版本。運行build-ffmpeg.sh腳本

  build-ffmpeg.sh 這玩意還不好找,鏈接基本失效,費了一點時間終於找到了,我把build-ffmpeg.sh存到了我的百度網盤,下載地址為:http://pan.baidu.com/s/1pJOb2L9

該腳本中默認采用的FFmpeg是2.0版本,使用iOS 7.0的SDK編譯,c語言編譯器采用clang,可以根據實際項目需要選中不同的FFmpeg和iOS SDK版本。(FFmpeg和iOS SDK的版本這里,需要根據實際情況修改build-ffmpeg.sh腳本)

我想使用FFmpeg最新版本,最新版本是ffmpeg-2.6.2,理論上就需要將VERSION改成VERSION="2.6.2",但是build-ffmpeg.sh 腳本不支持,那就只能跟隨主流使用2.0的版本了

SDKVERSION 是XCode中iOS SDK的版本。我使用的Xcode 6.3,iOS SDK 8.3,就要將SDKVERSION改成了SDKVERSION="8.3"

ARCHS 是指定庫要支持的編譯器指令架構,這里根據實際工程所支持的指令集作修改。

 

#!/bin/bash

###########################################################################
#  Choose your ffmpeg version and your currently-installed iOS SDK version:
#
VERSION="2.0"
SDKVERSION="8.3"
ARCHS="armv7 armv7s i386"
#
#
###########################################################################
#
# Don't change anything under this line!
#
###########################################################################

DEVELOPER=`xcode-select -print-path`

  在Mac終端上通過命令進入到build-ffmpeg.sh腳本的目錄下,使用命令sh build-ffmpeg.sh 運行該腳本。

 

  編譯完成后,結果為:

  

 

******************************************************************************************************************************************************************************

******************************************************************************************************************************************************************************

  2015年4月29日更新

*****************************************************************************************************************************************************************************

 

  之前說過build-ffmpeg.sh 腳本最高只支持編譯FFmpeg 2.0,就是我存到網盤的 http://pan.baidu.com/s/1pJOb2L9 的build-ffmpeg.sh

  昨晚,坐地鐵的時候,瀏覽FFmpeg相關知識,找到了build-ffmpeg.sh腳本的出處,是一個外國人寫的,地址為:https://github.com/kewlbear/FFmpeg-iOS-build-script

現在該腳本支持最新的FFmpeg 2.6.2。這個老外對這個腳本更新的很及時,感謝。

  既然最新的build-ffmpeg.sh腳本,支持最新版的FFmpeg 2.6.2,那必須試試咯。http://www.ffmpeg.org/releases/  進入該網站,看下FFmpeg 的最新版本,目前最新的就是2.6.2

  前面的步驟,這里就不再細說了。假設已經將腳本文件gas-preprocessor.pl復制到了 /usr/bin/目錄,並賦予了可執行權限。不清楚,就從文章的開頭開始看起。接下來,就要利用最新的build-ffmpeg.sh 來編譯iOS平台上使用的FFmpeg 2.6.2 庫。

  首先,在Mac上創建一個文件夾命名為FFmpeg 2.6.2,為何這樣做呢,就是為了以后再看的時候能一眼看出自己所用的FFmpeg是哪個版本。然后,從 https://github.com/kewlbear/FFmpeg-iOS-build-script 下載最新的build-ffmpeg.sh腳本,並將該腳本放到文件夾FFmpeg 2.6.2 中。

  來看下 https://github.com/kewlbear/FFmpeg-iOS-build-script中老外作者對這個最新的腳本的說明:

 

FFmpeg iOS build script

 

Build Status

 

This is a shell script to build FFmpeg libraries for iOS apps.

 

Tested with:

 

  • FFmpeg 2.6.2
  • Xcode 6.3

 

 

 

Requirements

 

 

Usage

 

  • To build everything:

    ./build-ffmpeg.sh
    
  • To build arm64 libraries:

    ./build-ffmpeg.sh arm64
    
  • To build fat libraries for armv7 and x86_64 (64-bit simulator):

    ./build-ffmpeg.sh armv7 x86_64
    
  • To build fat libraries from separately built thin libraries:

    ./build-ffmpeg.sh lipo
    

 

Download

 

You can download a binary for FFmpeg 2.6.2 release at https://downloads.sourceforge.net/project/ffmpeg-ios/ffmpeg-ios-master.tar.bz2

 

External libraries

 

You should link your app with

 

  • libz.dylib
  • libbz2.dylib
  • libiconv.dylib

 

Influences

 

 

  我仔細看了這個最新的腳本與我在前面用到的舊腳本,這個最新的build-ffmpeg.sh腳本相比上面用來編譯FFmpeg 2.0的腳本做了很大的改進,基本是重寫了。來看看其中的幾個關鍵點:

(1)使用的FFmpeg庫源,這個不要修改

(2)采用這個最新腳本編譯得到的FFmpeg庫做支持的編譯器指令集,因為從iOS 8 出來之后,也就是2014年7月發布Xcode 6.0 iOS SDK 8.0之后,蘋果就要要求支持64位系統,蘋果發布聲明2015年3月之后,所有上架app store 的app必須支持64位系統。目前最新的Xcode 正式發布版是6.3,使用的是iOS SDK 8.3。最新build-ffmpeg.sh腳本支持現在最新的arm64架構編譯

(3)要注意編譯出來的庫支持的最低iOS 系統版本,這個做 iOS開發的人都知道,就是app 最低能支持的iOS 系統。腳本中最低支持 6.0,編譯出來的FFmpeg庫只能在iOS 6.0 系統上運行,最終影響app只支持iOS 6.0以上版本。

  搞清楚上面的情況之后,就要開始編譯最新的FFmpeg 2.6.2庫了。

  在Mac終端執行命令,進入build-ffmpeg.sh腳本所在的目錄,然后執行該腳本(這次我沒有修改build-ffmpeg.sh腳本,直接把下載得到的拿來用了

  哇塞,沒有找到ffmpeg資源,為什么呢,呵呵,我上面提到了老外作者對這個最新的腳本的說明,有一點我沒有在意,忽視了。出現這個找不到資源的問題,最有效的解決辦法就是看作者對這個腳本的使用說明,哈哈,看到了

 

This is a shell script to build FFmpeg libraries for iOS apps.

 

Tested with:

 

  • FFmpeg 2.6.2
  • Xcode 6.3

 

 

 

Requirements

 

 

   問題在於,我沒有使用作者提到的最新的gas-preprocessor腳本。好吧,改唄,從頭開始做。

第一步:

  下載編譯FFmpeg所需要的腳本文件gas-preprocessor.pl,下載地址:https://github.com/libav/gas-preprocessor在mac終端中使用cp命令將腳本文件gas-preprocessor.pl復制到 /usr/sbin/目錄,並賦予可執行權限。執行命令為:

(1)sudo cp -f /Users/dev.temobi/Downloads/gas-preprocessor-master/gas-preprocessor.pl /usr/bin/   (備注:/Users/dev.temobi/Downloads/gas-preprocessor-master/ 是腳本gas-preprocessor.pl所在的路徑)

(2)chmod +x /usr/bin/gas-preprocessor.pl

第二步:

  在Mac終端執行命令,進入build-ffmpeg.sh腳本所在的目錄,然后執行build-ffmpeg.sh腳本

 

  呵呵,還是不行,仍然是沒有找到資源,改天再研究吧。

 

 

******************************************************************************************************************************************************************************

******************************************************************************************************************************************************************************

  2015年5月11日更新

******************************************************************************************************************************************************************************

 

  續--2015年4月29日更新,4月29日更新的時候說使用最新的FFmpeg2.6.2,提示沒有找到資源,今天得閑,也是項目實際需求,需要用到最新的FFmpeg庫,按照 [2015年4月29日更新]中的步驟操作,

 

Requirements

  上次操作沒有操作 yasm 1.2.0,就是這一步沒有做,Mac下按照如下的步驟編譯與安裝yasm:

curl http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz >yasm.tar.gz

tar xzvf yasm.tar.gz

cd yasm-1.2.0

./configure

make

sudo make install

  安裝完yasm 1.2.0 之后,再執行  sh build-ffmpeg.sh,編譯出arm 64的庫之后,在編譯armv7的時候,就報錯

GNU assembler not found, install/update gas-preprocessor
  沒有辦法,網上流行2個腳本,一個就是現在使用的,還有一個是 https://github.com/yuvi/gas-preprocessor ,換個腳本試試唄,從這個地址下載腳本后,按照步驟做,仍然是在編譯出arm 64的庫之后,在編譯armv7的時候,就報錯
GNU assembler not found, install/update gas-preprocessor
  那只能說明最開始gas-preprocessor.pl被復制到的路徑不正確,從網上看到要把gas-preprocessor.pl 復制到/usr/bin目錄下,這讓我想起最開始我在網上下載了一個把gas-preprocessor.pl,並把它復制到/usr/bin目錄下,又在網上看到要把gas-preprocessor.pl 復制到/usr/sbin目錄下,而我又把同一個gas-preprocessor.pl復制到了/usr/sbin目錄下,然后就按照步驟開始執行build-ffmpeg.sh了,結果我按照2014年4月29日更新之前的寫的步驟編譯出了FFmpeg 2.0的版本。
  今天在使用2015年4月29日更新寫到的步驟以及最新的腳本執行的時候,始終在編譯出arm 64的庫之后,在編譯armv7的時候,就報錯 GNU assembler not found, install/update gas-preprocessor”, 這讓我很苦惱,因為我在網上看到了有人成功利用最新的腳本編譯出來了FFmpeg 2.6.2,剛開始我以為是我Xcode版本太高 Xcode 6.3 iOS SDK 8.3,可是最新的腳本上寫的是8.3,那就說明最新的腳本是支持 Xcode 6.3 iOS SDK 8.3,然后結合網上看到的 復制到/usr/bin目錄下復制到/usr/sbin目錄下,這就讓我想起了我當時下載了一個很舊的gas-preprocessor.pl,提供這個腳本的博客都好幾年了,而且沒有給出這個腳本的來源,可見問題就出在這里了,我把這個舊腳本同時考到了 /usr/bin目錄下/usr/sbin目錄下,導致我以為把腳本放在 /usr/sbin目錄下 是正確了,以為執行的是/usr/sbin目錄下的gas-preprocessor.pl腳本,結果卻不是這樣的,實際情況是執行的是/usr/bin目錄下的gas-preprocessor.pl腳本。因為始終編譯出arm 64的庫之后,在編譯armv7的時候,就報錯GNU assembler not found, install/update gas-preprocessor”。所以,也並不是作沒有操作 yasm 1.2.0這個步驟的原因。坑人啊,自己把自己坑了,就是一個目錄的問題,浪費了我今天下午一個多小時的時間。
  
  所以利用2015年4月29日更新中提到的最新腳本編譯FFmpeg的正確的執行步驟是:
(1)gas-preprocessor.pl復制到 /usr/bin/目錄,並賦予可執行權限。(gas-preprocessor.pl的下載地址:https://github.com/libav/gas-preprocessor)
(2)執行build-ffmpeg.sh。(build-ffmpeg.sh的下載地址: https://github.com/kewlbear/FFmpeg-iOS-build-script
 
  OK,成功編譯出最新的FFmpeg2.6.2 庫。
 
 
 
 
----------------------------------------------------------
 
 
----------------------------------------------------------
 
 
  
  編譯的支持arm 64 的FFmpeg 2.6.2 庫的下載地址為:http://pan.baidu.com/s/1mgxdODU


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM