在iphone / ipad项目上的FFMPEG集成

可以任何一个告诉我如何在我的iphone / ipad project.im中使用Xcode 4集成FFMPEG。我search了很多,但没有find任何有用的链接。请告诉我一步一步的程序,以整合FFMpeg在我的项目。

谢谢,

先决条件

MacPorts安装:打开terminal和types

sudo port安装pkgconfig

启动terminal并下载FFmpeg源码

目录的位置取决于您的个人偏好,我select将其保存在我的主文件夹下的ffmpeg文件夹中,以便稍后访问。

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

在我们走得更远之前,我们需要提前思考,并认识到我们可能在Mac上进行一些模拟,并在iPhone上进行实际testing。 我们需要做的是我们需要为三种架构构build库:armv7(iPhone 3Gs或更高版本),armv7s(iPhone 5)和i386(iPhone Simulator)。

让我们在ffmpeg文件夹中创build一些文件夹来保存3个不同的版本,这样我们可以将它们合并为一个通用版本。

cd ffmpeg mkdir armv7 mkdir armv7s mkdir i386 mkdir -p universal / lib

安装气体预处理器

  1. 点击ZIP图标下载气体预处理器。
  2. 将gas-preprocessor.pl复制到/ usr / bin目录。
  3. 更改gas-preprocessor.pl的权限,方法是将所有权限设置为Read&Write。

为armv7构buildconfigurationFFmpeg

在configuration之前,您可以通过进入ffmpeg文件夹并input:

./configure –help

供您参考的选项列表: FFmpegconfiguration选项 。 “组件选项”取决于你想用FFmpeg做什么。

现在运行以下configuration选项:

./configure \ –prefix = armv7 \ –disable -ffmpeg \ –disable-ffplay \ –disable -ffprobe \ –disable -ffserver \ –enable-avresample \ –enable-cross-compile \ – sysroot =“/ Applications / Xcode.app / Contents / Developer / Platforms / iPhoneOS.platform / Developer / SDKs / iPhoneOS6.0.sdk”\ –target-os = darwin \ –cc =“/ Applications / Xcode.app /Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc“\ –extra-cflags =” – arch armv7 -mfpu = neon -miphoneos-version-min = 6.0“\ –extra-ldflags = “-arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk -miphoneos-version -min = 6.0”\ –arch = arm \ – cpu = cortex-a9 \ –enable-pic \

您可能会收到以下警告:

警告:编译器不指示浮点ABI,猜测软。

别担心。 你应该没事,继续下一步。

为armv7构buildFFmpeg

运行构build命令:

make clean && make && make install

现在你应该可以看到文件在ffmpeg / armv7文件夹中。 我们现在开始为iPhone 5开发armv7s。

为armv7s架构(iPhone 5)configuration和安装FFmpeg

。 / configure \ –prefix = armv7s \ –disable -ffmpeg \ –disable-ffplay \ –disable -ffprobe \ –disable -ffserver \ –enable-avresample \ –enable-cross-compile \ –sysroot =“/ Applications / Xcode.app / Contents / Developer / Platforms / iPhoneOS.platform / Developer / SDKs / iPhoneOS6.0.sdk”\ –target-os = darwin \ –cc =“/ Applications / Xcode.app /目录/ Developer / Platforms / iPhoneOS.platform / Developer / usr / bin / gcc“\ –extra-cflags =” – arch armv7s -mfpu = neon -miphoneos-version-min = 6.0“\ –extra-ldflags =” -arch armv7s -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk -miphoneos-version-min = 6.0“\ –arch = arm \ –cpu = cortex-a9 \ –enable-pic \

然后搭build:

make clean && make && make install

为i386构buildconfigurationFFmpeg

./configure \ –prefix = i386 \ –disable -ffmpeg \ –disable-ffplay \ –disable -ffprobe \ –disable -ffserver \ –enable-avresample \ –enable-cross-compile \ – sysroot =“/ Applications / Xcode.app / Contents / Developer / Platforms / iPhoneSimulator.platform / Developer / SDKs / iPhoneSimulator6.0.sdk”\ –target-os = darwin \ –cc =“/ Applications / Xcode.app /Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc“\ –extra-cflags =” – arch i386“\ –extra-ldflags =” – arch i386 -isysroot /Applications/Xcode.app /Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk“\ –arch = i386 \ –cpu = i386 \ –enable-pic \ –disable -asm \

请注意最后的–disable-asm标签。 如果您忘记包含此标签,您可能会收到此错误:

cc1:后端错误:在寄存器分配期间,Ran不在寄存器中! make:*** [libavcodec / h264_cabac.o]错误1

为i386构buildFFmpeg

make clean && make && make install

创build通用库

lipo命令(假设你还在ffmpeg文件夹下):(请注意,Mountain Lion提供的lipo对armv7s一无所知,所以我们需要使用xcrun来findSDK提供的lipo。)

cd armv7 / lib文件在* .a做cd ../ .. xcrun -sdk iphoneos lipo -output通用/ lib / $文件-create \ -arch armv7 armv7 / lib / $文件\ -arch armv7s armv7s / lib / $ file \ -arch i386 i386 / lib / $ file echo“Universal $ file created”。 cd – 完成cd ../ ..

在universal / lib下查找,你会发现那里新鲜出炉的所有FAT库。 我们现在把注意力转向将这些静态库链接到Xcode项目。

如果你得到像这样的错误错误:没有开发人员目录在/开发人员“? 然后键入

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

在Xcode中链接静态库

首先,我们拉入.a文件。

使用Xcode创build一个新的空应用程序。 指定产品名称和公司标识符。 然后点击下一步并保存项目。 find我们在ffmpeg / universal / lib下创build的通用库(.a文件)。 将.a文件拖到“项目导航器”窗格中的“框架”文件夹中。 勾选“将项目复制到目标组的文件夹(如果需要)”。 然后点击完成。

现在我们照顾包含文件。

ffmpeg / armv7 / include下find包含文件。 将该文件夹的内容拖放到“项目导航器”窗格中的“项目名称”文件夹中。 再次勾选“将项目复制到目标组的文件夹(如果需要)”。 然后点击完成。

最后,我们需要为项目设置标题searchpath

点击Project Navigator窗格中的Project。 在屏幕中间的标准编辑器中,点击Build Settings。 search“标题searchpath” 。 添加您的项目path,并将其设置为recursion。 即$(SRCROOT)点击Build Phases。 在链接二进制库下,添加libbz2.dyliblibz.dylib

testing和validation库的工作

我们不会在这里深入。 只是为了validation图书馆是否正常运作。 转到您的AppDelegate.m,并添加:

> #include“avformat.h”

didFinishLaunchingWithOptions函数中,添加:

av_register_all();

如果假设你得到这个错误的手段

未定义的符号体系结构i386:“_iconv”,引用自:libmailcore.a中的_mail_iconv(charconv.o)“_iconv_open”,引用来自:libmailcore.a中的_charconv(charconv.o)libmailcore.a中的_charconv_buffer(charconv.o) “_iconv_close”,引用来自:libmailcore.a中的_charconv(charconv.o)libmailcore.a中的_charconv_buffer(charconv.o)架构i386中未findld:symbol(s)collect2:ld返回1退出状态

然后添加libiconv.dylib框架

你现在已经准备好开始在iOS上开发FFmpeg了。

./configure脚本:

./configure –extra-ldflags = -L / Developer / Platforms / iPhoneOS.platform / Developer / SDKs / iPhoneOS4.3.sdk / usr / lib / system –disable -bzlib –disable-doc –disable -ffmpeg –disable -ffplay –disable -ffserver –enable-cross-compile –arch = arm –target-os = darwin –cc = / Developer / Platforms / iPhoneOS.platform / Developer / usr / bin / gcc – -as ='gas-preprocessor / gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc'–sysroot = / Developer / Platforms / iPhoneOS.platform / Developer / SDKs / iPhoneOS4.3 .sdk –cpu = cortex-a8 –extra-cflags =' – arch armv7'–extra-ldflags =' – arch armv7'–enable-pic

这工作正常。 由于默认的ffmpegconfiguration脚本的默认库path设置为“/ usr / lib / system”,因此无法find库libcache.dylib,所以在这里我已经将它设置为最新的sdkpath。