Xcode4.5编译ffmpeg成功,过程说明

最近项目要用音视频的通话,需要用ffmpeg来实现,但是ffmpeg在iOS平台上的编译有些问题。

1    下载代码

1.下载ffmpeg源代码

git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg

参考:http://ffmpeg.org/download.html

2.下载ffmpeg-iphone-build

git clone https://github.com/gabriel/ffmpeg-iphone-build.git

参考:https://github.com/gabriel/ffmpeg-iphone-build

1. 拷贝ffmpeg-iphone-build/gas-preprocessor.pl到 /usr/sbin目录下

2. 编译ffmpeg for iOS i386版本

(1)将新下载的ffmpeg拷贝到ffmpeg-iphone-build目录下,改名为ffmpeg-i386

(2)用TextEdit打开build-i386文件注释#svnco -r22403 svn://svn.ffmpeg.org/ffmpeg/trunk $FFMPEG_DIR这一行

(3)在CONFIGURE_OPTIONS里添加:--disable-asm --enable-cross-compile

(4)将 ./configure 所在的行修改成:

./configure --cc=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as="$SCRIPT_DIR/gas-preprocessor.pl/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc" --extra-ldflags=-L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/usr/lib/system --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk --extra-cflags="-mdynamic-no-pic" --prefix="dist"$CONFIGURE_OPTIONS --target-os=darwin --arch=i386 --cpu=i386 --extra-cflags='-arch i386' --extra-ldflags='-arch i386'

截图

  

 编译ffmpeg for iOS armv7版本

(1)      将新下载的ffmpeg拷贝到ffmpeg-iphone-build目录下,改名为ffmpeg-armv7

(2)      用TextEdit打开build-armv7文件注释#svnco -r22403 svn://svn.ffmpeg.org/ffmpeg/trunk $FFMPEG_DIR这一行

(3)      在CONFIGURE_OPTIONS里添加:--disable-asm --enable-cross-compile

(4)      将 ./configure修改成:

./configure --cc=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as="$SCRIPT_DIR/gas-preprocessor.pl/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc" --extra-ldflags=-L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/system --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk --extra-cflags="-mdynamic-no-pic" --prefix="dist"$CONFIGURE_OPTIONS --target-os=darwin --arch=armv7 --cpu=armv7 --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7'

  

armv6的我就不再说了,iPhone3GS开始就是armv7的指令了,都已经不支持了。

特别注意的是

/iPhoneOS6.0.sdk

这个信息一定要正确,不然报错:

Pulling r22403...
Configure options: --enable-gpl --enable-postproc --enable-swscale --enable-avfilter --disable-asm --enable-cross-compile
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc is unable to create an executable file.
C compiler test failed.

其实就是对应的iPhoneSDK不存在。

合并armv6 armv7 i386  创建fat类型的静态库

将之前的build-armv7拷贝一份,然后将内容更改为

#!/bin/tcsh -fmkdir universalmkdir libmkdir armv7mkdir i386mv ffmpeg-armv7/libavcodec/libavcodec.a armv7/mv ffmpeg-armv7/libavdevice/libavdevice.a armv7/mv ffmpeg-armv7/libavformat/libavformat.a armv7/mv ffmpeg-armv7/libavutil/libavutil.a armv7/mv ffmpeg-armv7/libswscale/libswscale.a armv7/mv ffmpeg-i386/libavcodec/libavcodec.a i386/mv ffmpeg-i386/libavdevice/libavdevice.a i386/mv ffmpeg-i386/libavformat/libavformat.a i386/mv ffmpeg-i386/libavutil/libavutil.a i386/mv ffmpeg-i386/libswscale/libswscale.a i386/rm universal/*.alipo -create -arch armv7 armv7/libavcodec.a -arch i386 i386/libavcodec.a -output universal/libavcodec.alipo -create -arch armv7 armv7/libavdevice.a -arch i386 i386/libavdevice.a -output universal/libavdevice.alipo -create -arch armv7 armv7/libavformat.a -arch i386 i386/libavformat.a -output universal/libavformat.alipo -create -arch armv7 armv7/libavutil.a -arch i386 i386/libavutil.a -output universal/libavutil.alipo -create -arch armv7 armv7/libswscale.a -arch i386 i386/libswscale.a -output universal/libswscale.arm lib/*.acp universal/*.a lib/

静态库编译成功,后面给出一个demo.  

参考链接:

http://www.cnblogs.com/ikodota/archive/2012/09/12/compile_ffmpeg_for_iOS.html

http://www.cocoachina.com/bbs/read.php?tid=98563

http://blog.csdn.net/xt_jat/article/details/7836646

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

何时使用[self release]

这样的语句 [self release];乍看上去让人很困惑。 从release方法本身的作用上来说,就是给self的引用技术减一,就像release对其他对象所做的一样。一般来说,唯一用到,也是最合适使用 [self release];这一写法的地方是在initXXX方法…

C++10

C++友元函数和友元类 一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来补充介绍一个例外——友元(friend)。 fnend 的意思是朋友,或者说是好友,与好友的关系显然要比…

box2d 绘制圆

在让刚体听我的——ApplyForce、ApplyImpulse、SetLinearVelocity一节中,来自天地会的sxl001问道如何创建圆形的边界(Round Boundary),好吧,我用这个教程来回答他。 实际上Box2D中没有专门创建圆弧的API (b2CircleDef创建的是实体圆形不是圆弧…

linux浏览器不能播放音频文件夹,在html中插入音频文件在浏览器中播放音频文件的兼容性问题...

下面谈谈本人在html中插入音频文件,经过我的本地测试总结的一些问题(播放mp3文件):1、问题:IE8上正常(通过media player插件来播放)但在IE6和IE7上不会播放Firefox上要安装QuickTime插件才能播放Chrome通过将其转化成html5上的标签播放&#…

如何让 Timer 在特定时间点触发?

咨询区 Behrooz Karjoo我的应用程序需要做一个 事件触发 的功能,它需要每天定时执行,比如说当天的 16点,我现在的做法是使用一个 timer 按秒轮询判断当前是否为 16:00, 虽然可以玩得转,但我想能不能实现那种 16:00 自动…

深入剖析Android系统

深入剖析Android系统(基于Google发布的Jelly Bean原始代码,讲述Android系统的内部静态结构关系和内部运行机制,为你呈现原汁原味的Android代码分析大餐!) 杨长刚著 ISBN 978-7-121-19374-3 2013年1月出版 定价&#xf…

微博上的网红,为什么更能红得发紫?

“网红”是最近非常热潮的互联网现象。在微博上,各种各样的网红不仅活跃了粉丝群体(微博月活跃用户增至2.61亿),也为微博增添了互动热度(微博一季度微博日均视频播放量达4.7亿次,同比增长489%,比…

TotoiseSVN-小乌龟的使用方法总结

原文转自 http://www.cnblogs.com/xilentz/archive/2010/05/06/1728945.html 收藏起来用的时候比较方便 TotoiseSVN的基本使用方法在 项目管理实践教程一、工欲善其事,必先利其器【Basic Tools】中,我已经讲解了怎样安装TortoiseSVN。在上面的讲解中已经…

UNIX环境高级编程笔记

1.setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &opt, len); SO_REUSEADDR套接口选项允许为以下四个不同的目的提供服务: 一.SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知的端口,即使以前建立的将该端口用作它们的本地端口的连接仍存在。 …

linux重定向输出时加时间变量,shell 重定向错误输出到文件 加上时间(标明错误抛出的时间)...

在开发中,我们避免不了写crontab脚本来异步执行一些东西,一般设置crontab用下面的方法:*/1 * * * * commond > /tmp/t.log 2>&1前面的> /tmp/t.log代表把标准输出重定向到/tmp/t.log文件,后面的 2>&1 代表把标…

ping

一、Linux下的ping参数 ping [ -d] [ -D ] [ -n ] [ -q ] [ -r] [ -v] [ \ -R ] [ -a addr_family ] [ -c Count ] [ -w timeout ] [ -f | -i \ Wait ] [ -l Preload ] [ -p Pattern ] [ -s PacketSize ] [ -S hostname/IP addr ] \ [ -L ] [ - I a.b.c.d. ] [ -o interface ] …

WPF DataGrid 如何将被选中行带到视野中

WPF DataGrid 如何将被选中行带到视野中目录前言准备工作方法一方法二总结独立观察员 2021 年 12 月 11 日前言在 WPF 开发中,显示表格一般使用 DataGrid 控件,而且我们一般会依据用户的选中行的操作来执行一些逻辑,这种情况,选中…

Python 基础语法_Python脚本文件结构

前言 Python基础语法这一章,主要记录了Python的文件结构、逻辑运算符、算术操作符、控制流语句、输入和输出语句、函数、对象、类等方面的内容。在了解了Python的数据类型之后,结合之前的要点来一起继续学习。 软件环境 系统 UbuntuKylin 14.04软件 Pyth…

Andriod之import android.support.v4或者import android.support.v7提示导入错误解决办法

问题所在原因:少了v4.jar包 解决办法:给项目添加v4.jar包就行 在使用Eclipse开发andriod程序时,程序中提示import android.support.v4.XXX或者import android.support.v7.XXX出错,具体的提示信息是: The import andro…

e2200网卡驱动 linux,Linux驱动修炼之道-驱动中一些常见的宏

Linux驱动修炼之道-驱动中一些常见的宏努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处http://doc.xuehai.net/woshixingaaa/archive/2011/06/02/6462065.aspx本文档讲解一下驱动中常用的宏,下边一个一个来说,先声明…

一对经典的时间获取客户/服务器程序

前言 本文通过一对经典的时间获取客户/服务器程序&#xff0c;展现了Linux网络编程的大体框架&#xff0c;为以后更深入的学习打下基础。 客户服务器模式网络编程的大体框架 客户端代码 1 #include <stdio.h>2 // 下头文件包含socket(), bind()等套接字通信必须的函数。3…

SkyWalking8.1.0 部署和使用

一、简介1、官方文档https://github.com/apache/skywalking/tree/master/docs2、功能SkyWalking是一个可观测性分析平台和应用性能管理系统&#xff0c;提供分布式跟踪、服务网格遥测分析、度量聚合和可视化一体化解决方案&#xff0c;并支持多种开发语言。专为微服务、云原生架…

CGI编程学习

一&#xff0e;基本原理 CGI&#xff1a;通用网关接口&#xff08;Common Gateway Interface&#xff09;是一个Web服务器主机提供信息服务的标准接口。通过CGI接口&#xff0c;Web服务器就能够获取客户端提交的信息&#xff0c;转交给服务器端的CGI程序进行处理&#xff0c;最…