关于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
安装燃气预处理器
- 点击ZIP图标下载气预处理。
- 将gas-preprocessor.pl复制到/ usr/bin目录。
- 将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.dylib和libz.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上。
令人惊叹。这工作 – onmyway133
我的关键是添加libbz2.dylib,libz.dylib和libiconv.dylib。我不知道为什么他们需要......解释会很棒!谢谢! – Jona
初学者的错误:我花了很长时间才发现“Build Phases”和“Link Binary With Libraries” 对于像我这样的人,它是一个像“Build Settings”这样的标签,但只出现在给定的“目标”上,而不是该项目”。 – Taiko