FFMPEG集成在iphone/ipad项目上

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

安装气体预处理器

  1. 单击ZIP图标以下载气体预处理器.
  2. 将gas-preprocessor.pl复制到/ usr/bin目录.
  3. 通过将权限设置为"读取和写入"来更改gas-preprocessor.pl的权限.

为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.dyliblibz.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进行开发.


Sat*_*rat 0

./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路径。