【问题标题】:FFMPEG integration on iphone/ ipad projectiphone/ipad 项目上的 FFMPEG 集成
【发布时间】:2011-10-14 19:32:57
【问题描述】:

谁能告诉我如何将 FFMPEG 集成到我的 iphone/ipad 项目中。我使用 Xcode 4。 我搜索了很多,但没有找到任何有用的链接。请告诉我逐步将 FFMpeg 集成到我的项目中的过程。

谢谢,

【问题讨论】:

标签: iphone ipad ffmpeg


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    先决条件

    要安装的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

    安装气体预处理器

    1. 点击 ZIP 图标下载气体预处理器。
    2. 将 gas-preprocessor.pl 复制到 /usr/bin 目录。
    3. 通过将权限设置为 Read & Write for all 来更改 gas-preprocessor.pl 的权限。

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

    【讨论】:

    • 对我来说关键是添加 libbz2.dylib、libz.dylib 和 libiconv.dylib。我不知道为什么需要它们......解释会很棒!谢谢!
    • 初学者的错误:我花了很长时间才找到“构建阶段”和“将二进制文件与库链接”对于像我这样的人来说,它是一个类似于“构建设置”的选项卡,但只出现在给定的“目标”,而不是“项目”。
    • 你好,我对这一行感到困惑:将gas-preprocessor.pl复制到/usr/bin目录。谁能告诉我 /usr/bin 目录在哪里?
    • @Nikh1414,默认隐藏/usr/bin路径。因此,单击查找器并按 Shift+cmd+g。然后在搜索字段中输入 /usr/bin
    • @PushpaRaja,哇哇哇!!!我该怎么夸你这个人!!!这太棒了。完整的分步指南。非常非常感谢你。对于不想自己编译FFMpeg的人,从downloads.sourceforge.net/project/ffmpeg-ios/…下载编译好的库,然后从本回复中的“在Xcode中链接静态库”步骤继续。我再次非常感谢 Pushpa Raja 所做的努力。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多