关于iphone/ipad项目的FFMPEG集成

问题描述:

可以任何一个告诉我如何在我的iphone/ipad project.im中使用Xcode 4集成FFMPEG。 我搜索了很多,但没有找到任何有用的链接。请告诉我一步将FFMpeg集成到我的项目中。关于iphone/ipad项目的FFMPEG集成

感谢,

./configure脚本:

的./configure --extra-LDFLAGS = -L /开发/平台/ iPhoneOS.platform /开发商/软件开发工具包/ 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

这工作正常。由于默认的ffmpeg配置脚本将默认库路径设置为“/ usr/lib/system”,因此它无法找到库libcache.dylib,因此我在此将其设置为最新的sdk路径 。

先决条件

MacPorts的安装:打开终端输入

sudo port install pkgconfig

启动终端和下载FFmpeg的源

目录的位置由您的个人喜好和我选择将其保存在我的主文件夹下的ffmpeg文件夹中,以便稍后访问。

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

我们走得更远之前,我们需要提前思考并认识到,我们有可能做到在Mac本身的一些仿真iPhone上的实际测试一起。我们需要做的是我们需要为三种架构构建库:armv7(iPhone 3Gs或更高版本),armv7s(iPhone 5)和i386(iPhone Simulator)。

让我们在ffmpeg文件夹中创建一些文件夹来保存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 for all改变权限。

配置的FFmpeg对ARMv7构建

配置前, 您可以去到ffmpeg的文件夹和类型指的是详细的选项:

./configure --help

为选项列表中选择参考:FFmpeg Configure Options。取决于你想用FFmpeg做什么,“组件选项”将由你决定。

现在运行下面的配置选项:

./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 \

你可能会得到一个警告,如:

WARNING: Compiler does not indicate floating-point ABI, guessing soft.

无后顾之忧。你应该没问题,继续下一步。

建设的FFmpeg对ARMv7

运行构建命令:

make clean && make && make install

现在你应该能看到文件的的ffmpeg/ARMv7的文件夹内的填充。我们现在走上建设armv7s针对iPhone 5进行

配置和armv7s建筑安装FFmpeg的(iPhone 5)

. /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/Contents/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 \

然后用建:

make clean && make && make install

配置的FFmpeg的i386 build

./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: error in backend: Ran out of registers during register allocation! make: *** [libavcodec/h264_cabac.o] Error 1

将FFMPEG i386的

make clean && make && make install

创建通用库

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

cd armv7/lib for file in *.a do cd ../.. xcrun -sdk iphoneos lipo -output universal/lib/$file -create \ -arch armv7 armv7/lib/$file \ -arch armv7s armv7s/lib/$file \ -arch i386 i386/lib/$file echo "Universal $file created." cd - done cd ../..

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

如果您得到像这样的错误错误:在/ Developer中找不到开发人员目录?然后键入

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

链接静态库在Xcode

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

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

现在我们照顾包含文件。

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

最后,我们需要为项目设置标题搜索路径。

单击项目导航窗格中的项目。 在屏幕中间的标准编辑器中,单击生成设置。 搜索“标题搜索路径”。 添加您的项目路径并将其设置为递归。即$(SRCROOT) 点击Build Phase。 在Link Binary With Libraries下,添加libbz2.dyliblibz.dylib

验证库

的我们并不是要在深入这里的工作。只是为了验证这个库是否在运行。 转到您的AppDelegate.m,并添加:

>的#include “avformat.h”

而在didFinishLaunchingWithOptions功能,添加:

av_register_all();

如果假设你是得到这个错误意味着

架构i386未定义的符号: “ _iconv “从引用:在libmailcore.a(charconv.o) _mail_iconv ”_iconv_open“,从引用: _charconv在libmailcore.a(charconv.o) _charconv_buffer在libmailcore.a(charconv.o) ” _iconv_close “,引用自: libmailcore.a中的_charconv(charconv.o)libmailcore.a中的_charconv_buffer (charconv。O) LD:符号(S)没有找到i386硬件架构 collect2:LD返回1退出状态

再加入libiconv.dylib框架

你现在准备好潜水使用FFmpeg的开发在iOS上。

+2

令人惊叹。这工作 – onmyway133

+0

我的关键是添加libbz2.dylib,libz.dylib和libiconv.dylib。我不知道为什么他们需要......解释会很棒!谢谢! – Jona

+0

初学者的错误:我花了很长时间才发现“Build Phases”和“Link Binary With Libraries” 对于像我这样的人,它是一个像“Build Settings”这样的标签,但只出现在给定的“目标”上,而不是该项目”。 – Taiko