编译环境: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. Selenium(十七):unittest单元测试框架(三) 脚本分析、编写Web用例

    1. 带unittest的脚本分析 也许你现在心里还有疑问,unittest框架与我们前面所编写的Web自动化测试之间有什么必然联系吗?当然有,既然unittest可以组织.运行测试用例,那么为什么不 ...

  2. 对vue-cli各个目录的理解 和 在 vue 中使用json-server

    看了几章书,看到了vue模板,看不下去哦,就找了一个B站的vue视频来看,下面进行总结. 学习一个语言,框架,CRUD..先学会. 重点就是最为常用的几个语句.学得不多,感慨挺多.. 前提:下载好vu ...

  3. mysql定时任务(event事件)

    1.事件简介 事件(event)是MySQL在相应的时刻调用的过程式数据库对象.一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”. 事件和触发器类似,都是在 ...

  4. linux学习(五)用户与组管理命令,以及用户信息文件解释

    目录 (1)/etc/passwd文件 (2)/etc/shadow passwd命令 userdel命令 usermod命令 groupadd @(用户与组管理命令) linux是一个多用户多任务的 ...

  5. linux下安装oracle数据库--干货

    1.修改系统名称,关闭防火墙,selinux.2.挂载镜像,并写入开机自动挂载.挂载点为/mnt/yummount -t iso9660 -o,loop /soft/Centos6.iso /mnt/ ...

  6. nginx常见问题总结

    1.当有多个server{}时先匹配哪个?如果请求同时命中多个server,则先从上到下(如果是分布在多个配置文件中,则在文件夹中摆放在前面的文件优先被读取)先匹配到哪个算哪个. 2.location ...

  7. Java Web 学习(6) —— Spring MVC 之校验器

    Spring MVC 之校验器 数据验证 一个典型的 Spring MVC 应用会同时应用到 formatters/converters 和 validators. 在调用 controller 期间 ...

  8. CF582E Boolean Function(DP,状态压缩,FMT)

    简单题. 我第二道自己做出来的 2900 没毛病,我没切过 2800 的题 lqy:"CF 评分 2800 是中等难度" 我活个啥劲啊 为了方便(同时压缩状态个数),先建出表达式树 ...

  9. 基于socketserver实现并发的socket编程

    目录 一.基于TCP协议 1.1 server类 1.2 request类 1.3 继承关系 1.4 服务端 1.5 客户端 1.6 客户端1 二.基于UDP协议 2.1 服务端 2.2 客户端 2. ...

  10. Jupyter notebook 使用

    1. 安装代码自动补全 需安装 nbextensions 插件,网站:https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/ins ...