zoukankan      html  css  js  c++  java
  • 实战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
  • 相关阅读:
    常见的行元素与块元素
    [转]SVN服务器部署并实现双机同步及禁止普通用户删除文件
    [转]Axure共享工程Shared Project(二):编辑修改和提交
    如何添加网络打印机
    [转]JSON 转换异常 死循环 There is a cycle in the hierarchy
    比较常用的Properties配置文件的使用方法示例
    解决Tomcat项目重复加载导致pemgen space内存溢出
    怎样批量删除.svn文件
    [转]前端工程师必须掌握的知识点
    Freemarker 使用
  • 原文地址:https://www.cnblogs.com/sunminmin/p/4463741.html
Copyright © 2011-2022 走看看