gpt4 book ai didi

iphone - iphone/ipad 项目上的 FFMPEG 集成

转载 作者:行者123 更新时间:2023-12-03 18:33:24 24 4
gpt4 key购买 nike

任何人都可以告诉我如何将 FFMPEG 集成到我的 iphone/ipad 项目中。我正在使用 Xcode 4。
我搜索了很多,但没有找到任何有用的链接。请告诉我将 FFMpeg 集成到我的项目中的分步程序。

谢谢,

最佳答案

先决条件

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



安装气体预处理器
  • 单击 ZIP 图标下载气体预处理器。
  • 将 gas-preprocessor.pl 复制到/usr/bin 目录。
  • 通过将权限设置为所有人的读写权限来更改 gas-preprocessor.pl 的权限。

  • 为 armv7 构建配置 FFmpeg

    在配置之前,
    您可以通过进入 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.



    不用担心。您应该可以继续下一步。

    为 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/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



    为 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="-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



    为 i386 构建 FFmpeg

    make clean && make && make install



    创建通用库

    lipo 命令(假设您仍在 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 ../..



    在universal/lib 下查看,您会在那里找到所有新鲜出炉的 FAT 库。我们现在将注意力转向将这些静态库链接到 Xcode 项目。

    如果您收到这样的错误 错误:在/Developer 中找不到开发者目录”? 然后输入

    sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer



    在 Xcode 中链接静态库

    首先,我们拉入 .a 文件。

    使用 Xcode 创建一个新的空应用程序。分配产品名称和公司标识符。然后单击下一步并保存项目。
    下找到我们创建的通用库(.a 文件) ffmpeg/universal/lib .
    将 .a 文件拖到 Project Navigator Pane 中的 Frameworks 文件夹中。
    勾选“将项目复制到目标组的文件夹(如果需要)”。然后单击完成。

    现在我们处理包含文件。

    下找到包含文件ffmpeg/armv7/include .
    将该文件夹的内容拖放到 Project Navigator Pane 中的 Project Name 文件夹中。
    再次勾选“将项目复制到目标组的文件夹(如果需要)”。然后单击完成。

    最后,我们需要为项目设置Header Search Paths .

    点击 项目在项目导航器 Pane 中。
    在屏幕中间的标准编辑器中,单击build设置。
    搜索 “标题搜索路径” .
    添加您的项目路径并将其设置为递归。即 $(SRCROOT)
    单击构建阶段。
    在 Link Binary With Libraries 下,添加 libbz2.dylib libz.dylib .

    测试和验证库的工作

    我们不会在这里深入。只是为了验证库是否正常运行。
    转到您的 AppDelegate.m,并添加:

    > #include "avformat.h"

    而在 didFinishLaunchingWithOptions 功能,添加:

    av_register_all();



    如果假设您收到此错误意味着

    架构 i386 的 undefined symbol :
    “_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 进行开发了。

    关于iphone - iphone/ipad 项目上的 FFMPEG 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6854190/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com