编译环境: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

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

实战FFmpeg--编译iOS平台使用的FFmpeg库(支持arm64的FFmpeg2.6.2)的更多相关文章

  1. FFmpeg编译iOS静态库

    第一步:下载gas-preprocessor 1.1 下载https://github.com/libav/gas-preprocessor 1.2 拷贝 gas-preprocessor.pl 到 ...

  2. FFmpeg编译:mac下编译iOS平台的FFmpeg库(支持armv7, arm64, i386, x86_64)

    环境:FFmpeg 3.4.6Xcode 10.3macOS 10.14.6iOS SDK 12.4 一.准备工作 1. 下载FFmpeg我这里使用的是3.4.6版本的FFmpeg,可以从FFmpeg ...

  3. 实战FFmpeg--iOS平台使用FFmpeg将视频文件转换为YUV文件

    做播放器的开发这里面涉及的东西太多,我只能一步步往前走,慢慢深入.播放器播放视频采用的是渲染yuv文件.首先,要知道yuv文件是怎么转换得来的,其次,要知道怎么把视频文件保存为yuv文件.雷神的文章1 ...

  4. 多媒体开发(7):编译Android与iOS平台的FFmpeg

    编译FFmpeg,一个古老的话题,但小程还是介绍一遍,就当记录.之前介绍怎么给视频添加水印时,就已经提到FFmpeg的编译,并且在编译时指定了滤镜的功能. 但是,在手机盛行的时代,读者可能更需要的是能 ...

  5. 实战FFmpeg + OpenGLES--iOS平台上视频解码和播放

    一个星期的努力终于搞定了视频的播放,利用FFmpeg解码视频,将解码的数据通过OpenGLES渲染播放.搞清楚了自己想知道的和完成了自己的学习计划,有点小兴奋.明天就是“五一”,放假三天,更开心啦. ...

  6. iOS: FFMpeg编译和使用问题总结

    iOS: FFmpeg编译和使用问题总结 折磨了我近一周多时间的FFmpeg库编译问题终于解决了,必须得把这一段时间来遇到过的坑全写出来.如果急着解决问题,编译最新版本的FFmpeg库请直接看第二部分 ...

  7. iOS平台基于ffmpeg的视频直播技术揭秘

    现在非常流行直播,相信很多人都跟我一样十分好奇这个技术是如何实现的,正好最近在做一个ffmpeg的项目,发现这个工具很容易就可以做直播,下面来给大家分享下技术要点: 首先你得编译出ffmpeg运行所需 ...

  8. iOS平台在ffmpeg中使用librtmp

    转载请注明出处:http://www.cnblogs.com/fpzeng/p/3202344.html 系统版本:OS X 10.8 一.在iOS平台上交叉编译librtmp librtmp lin ...

  9. iOS: FFmpeg编译和使用 学习

    ffmpeg是一个多平台多媒体处理工具,处理视频和音频的功能非常强大.目前在网上搜到的iOS上使用FFMPEG的资料都比较陈旧,而FFMPEG更新迭代比较快: 且网上的讲解不够详细,对于初次接触FFM ...

随机推荐

  1. 你看不懂的spring原理是因为不知道这几个概念

    背景 问题从一杯咖啡开始. 今天我去楼下咖啡机买了一杯「粉黛拿铁」.制作过程中显示: 我取了做好的粉黛拿铁,喝了一口,果然就是一杯热巧克力.咦咦咦,说好的拿铁呢?虽然我对「零点吧」的咖啡评价很高,觉得 ...

  2. Dojo.declare使用方法详解

    ArcGIS API for JavaScript是基于dojo开发的一套API,在实际生产中,我们需要再根据自己的需求实现自定义的功能,最后抽象成接口给前端调用. 我们使用dojo的declare来 ...

  3. 剑指offer 25:二叉树中和为某一值的路径

    题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...

  4. 【二】Gradle中的gradlew

    gradle 相当于 gradle wapper,是gradle的包装命令 使用gradlew来构建项目被认为是最佳实践. 使用gradlew有以下好处: 当客户机上没有安装gradle时,可以直接用 ...

  5. MySQL基础之数据管理【4】

    外键约束的使用(只有InnoDB存储引擎支持外键) create table news_cate( id tinyint unsigned auto_increment key comment '编号 ...

  6. hidraw设备简要分析

    关键词:hid.hidraw.usbhid.hidp等等. 下面首先介绍hidraw设备主要用途,然后简要分析hidraw设备驱动(但是不涉及到相关USB/Bluwtooth驱动),最后分析用户空间接 ...

  7. 移动网络游戏实现流程——并借此阐明pomelo在GitHub上各个项目间的关系

    <!DOCTYPE html> 摘要:本文通过一个简易流程图介绍如何基于Cocos2d-x引擎和pomelo服务器框架开发一个移动网络游戏.并借此阐明pomelo提供的各个项目间的关系. ...

  8. [JavaScript]父子窗口间参数传递

    概述 当页面嵌入一个iframe,或者打开一个子窗口.这个时候如果父窗口需要与子窗口之间通讯,如果直接用DOM访问对方窗口window,会受到跨于安全机制影响. javascript提供一个方法,可以 ...

  9. CF53E Dead Ends

    CF53E Dead Ends 洛谷评测传送门 题目描述 Life in Bertown has become hard. The city has too many roads and the go ...

  10. linux umask计算方法

    1. umask用于设定默认的新建文件或目录的权限 查看umask当前值命令: umask -p 计算创建出的file权限方法: 如果umask值的每位数都是偶数,使用666按位减umask的值即可 ...