【发布时间】:2011-10-14 19:32:57
【问题描述】:
谁能告诉我如何将 FFMPEG 集成到我的 iphone/ipad 项目中。我使用 Xcode 4。 我搜索了很多,但没有找到任何有用的链接。请告诉我逐步将 FFMpeg 集成到我的项目中的过程。
谢谢,
【问题讨论】:
-
这是一个非常古老的问题,一定要看看 Kewlbear 出色的、很棒的脚本:github.com/kewlbear/FFmpeg-iOS-build-script
谁能告诉我如何将 FFMPEG 集成到我的 iphone/ipad 项目中。我使用 Xcode 4。 我搜索了很多,但没有找到任何有用的链接。请告诉我逐步将 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
这很好用。由于默认的FFMPEG配置脚本的默认库路径设置为/usr/lib/system所以找不到库libcache.dylib,所以这里我将其设置为最新的sdk路径。
【讨论】:
先决条件
要安装的MacPorts:打开终端并输入
sudo 端口安装 pkgconfig
启动终端并下载 FFmpeg 源代码
目录的位置取决于你的个人喜好,我选择将它保存在我的 Home 文件夹下的 ffmpeg 文件夹中,以便以后访问。
git clone git://source.ffmpeg.org/ffmpeg.git ~/ffmpeg
在我们走得更远之前,我们需要提前思考并意识到我们可能会在 Mac 本身上进行一些模拟,同时在 iPhone 上进行实际测试。我们需要做的是,我们需要为 3 种架构构建库:armv7(iPhone 3Gs 或更高版本)、armv7s(iPhone 5)和 i386(iPhone Simulator)。
让我们在 ffmpeg 文件夹中创建一些文件夹来保存 3 个不同的构建,这样我们就可以将它们组合成一个通用构建。
cd ffmpeg mkdir armv7 mkdir armv7s mkdir i386 mkdir -p 通用/lib
安装气体预处理器
为 armv7 构建配置 FFmpeg
在配置之前, 您可以通过进入 ffmpeg 文件夹并输入以下内容来参考详细选项:
./configure --help
供您参考的选项列表:FFmpeg Configure Options。 “组件选项”将取决于你想用 FFmpeg 做什么。
现在运行以下配置选项:
./配置\ --前缀=armv7 \ --禁用-ffmpeg \ --禁用-ffplay \ --禁用-ffprobe \ --禁用-ffserver \ --启用-avresample \ --启用交叉编译\ --sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk" \ --目标操作系统=达尔文\ --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-版本-min=6.0" \ --拱=臂\ --cpu=皮质-a9\ --启用图片\
您可能会收到如下警告:
警告:编译器不指示浮点 ABI,猜测软。
不用担心。您应该可以继续下一步。
为 armv7 构建 FFmpeg
运行构建命令:
make clean && make && make install
现在您应该能够看到文件填充在 ffmpeg/armv7 文件夹中。我们现在开始为 iPhone 5 构建 armv7s。
为 armv7s 架构(iPhone 5)配置和安装 FFmpeg
。 /配置 \ --前缀=armv7s \ --禁用-ffmpeg \ --禁用-ffplay \ --禁用-ffprobe \ --禁用-ffserver \ --启用-avresample \ --启用交叉编译\ --sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk" \ --目标操作系统=达尔文\ --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-版本-min=6.0" \ --拱=臂\ --cpu=皮质-a9\ --启用图片\
然后构建:
make clean && make && make install
为 i386 构建配置 FFmpeg
./配置\ --前缀=i386 \ --禁用-ffmpeg \ --禁用-ffplay \ --禁用-ffprobe \ --禁用-ffserver \ --启用-avresample \ --启用交叉编译\ --sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk" \ --目标操作系统=达尔文\ --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\ --启用图片\ --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。)
cd armv7/lib 用于 *.a 中的文件 do cd ../.. xcrun -sdk iphoneos lipo -输出通用/lib/$文件-创建\ -arch armv7 armv7/lib/$文件\ -arch armv7s armv7s/lib/$file \ -arch i386 i386/lib/$file echo "创建了通用 $file。" 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 文件夹中。 再次,勾选“将项目复制到目标组的文件夹(如果需要)”。然后点击完成。
最后,我们需要为项目设置 Header Search Paths。
在 Project Navigator 窗格中单击 Project。 在屏幕中间的标准编辑器中,单击构建设置。 搜索“标题搜索路径”。 添加您的项目路径并将其设置为递归。即 $(SRCROOT) 单击构建阶段。 在 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 libmailcore.a(charconv.o) 中的 _charconv_buffer “_iconv_close”,引用自: libmailcore.a(charconv.o) 中的 _charconv libmailcore.a(charconv.o) 中的 _charconv_buffer ld:未找到体系结构 i386 的符号 collect2: ld 返回 1 个退出状态
然后添加libiconv.dylib框架
您现在可以开始在 iOS 上使用 FFmpeg 进行开发了。
【讨论】: