Cha*_*ani 8 iphone ffmpeg ipad
可以任何人告诉我如何使用Xcode 4在我的iphone/ipad project.im中集成FFMPEG.我搜索了很多但没有找到任何有用的链接.请告诉我一步一步的程序将FFMpeg集成到我的项目中.
谢谢,
Pus*_*aja 39
先决条件
安装MacPorts:打开终端并输入
sudo port install pkgconfig
启动终端并下载FFmpeg源
目录的位置取决于您的个人喜好,我选择将其保存在我的主文件夹下的ffmpeg文件夹中,以便以后轻松访问.
git clone git://source.ffmpeg.org/ffmpeg.git~/ffmpeg
在我们走得更远之前,我们需要提前思考并意识到我们可能会在Mac上进行一些模拟以及在iPhone上进行实际测试.我们需要做的是我们需要为3种架构构建库:armv7(iPhone 3Gs或更高版本),armv7s(iPhone 5)和i386(iPhone模拟器).
让我们在ffmpeg文件夹中创建一些文件夹,以容纳3个不同的构建,这样我们就可以将它们组合成一个通用构建.
cd ffmpeg mkdir armv7 mkdir armv7s mkdir i386 mkdir -p universal/lib
安装气体预处理器
为armv7构建配置FFmpeg
在配置之前,您可以通过进入ffmpeg文件夹并输入以下内容来查看详细选项:
./configure --help
供您参考的选项列表:FFmpeg配置选项.根据您对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 = " - 拱的ARMv7 -mfpu =氖-miphoneos版本分钟= 6.0"\--extra-LDFLAGS = "-arch的ARMv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk -miphoneos版本分钟= 6.0"\--arch =臂\ - cpu = cortex-a9\--enable-pic \
您可能会收到警告,例如:
警告:编译器不指示浮点ABI,猜测软.
别担心.你可以继续下一步.
为armv7构建FFmpeg
运行构建命令:
make clean && make && make install
现在您应该能够看到文件填充在ffmpeg/armv7文件夹中.我们现在转向为iPhone 5构建armv7s.
为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 /目录/开发人员/平台/ 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版本分钟= 6.0"\--arch =臂\ --cpu = cortex-a9\--enable-pic \
然后建立:
make clean && make && make install
为i386构建配置FFmpeg
./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 = " - 拱I386"\--extra-LDFLAGS =" - 拱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:后端错误:在寄存器分配期间退出寄存器!make:***[libavcodec/h264_cabac.o]错误1
为i386构建FFmpeg
make clean && make && make install
创建通用库
lipo命令(假设你仍然在ffmpeg文件夹下):(请注意,Mountain Lion提供的lipo对armv7s一无所知.所以我们需要使用xcrun来找到随SDK提供的lipo.)
用于*.a文件的cd armv7/lib执行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 - 完成cd ../ ..
在universal/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下找到包含文件.将该文件夹的内容拖放到Project Navigator窗格的Project Name文件夹中.再次勾选"将项目复制到目标组的文件夹(如果需要)".然后单击Finish.
最后,我们需要为项目设置标题搜索路径.
单击项目在项目导航窗格.在屏幕中间的标准编辑器中,单击"构建设置".搜索"标题搜索路径".添加项目路径并将其设置为Recursive.ie $(SRCROOT) 点击Build Phases.在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",从引用:在libmailcore.a(charconv.o)_charconv _charconv_buffer在libmailcore.a(charconv.o) "_iconv_close",从引用:在libmailcore.a(charconv.o)_charconv _charconv_buffer在libmailcore.a(charconv.o)LD:符号(多个)未找到i386硬件架构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
Run Code Online (Sandbox Code Playgroud)
这很好用。由于默认的FFMPEG配置脚本将默认的库路径设置为/usr/lib/system
所以找不到库libcache.dylib
,所以这里我将其设置为最新的sdk路径。
归档时间: |
|
查看次数: |
12721 次 |
最近记录: |