首页 > 解决方案 > 构建 FFmpeg 以在 Swift 中使用

问题描述

新的 XCode/Swift 版本提供了使用二进制依赖项的能力。在我看来,这似乎是为 FFMpeg 创建 SPM 包的理想时机。

然而,虽然我去年一直在学习编写 i Swift 代码,但实际上我对如何构建库并不是很熟悉,尤其是那些像 FFmpeg 这样复杂且具有所有可配置库和第三方依赖项的库。

kewlbear 的 iOS 构建脚本,但这些脚本适用于 iOS/tvOS,理想情况下,FFMpeg SPM 包也可用于 MacOS。它也没有针对最新的 Xcode 和 Swift 版本进行更新。

我个人的兴趣只是音频,我不需要很多花里胡哨,但我认为理想的情况是一个完整的包,包含整个源代码和它需要的任何依赖项,然后当它被用作包依赖项时,编译器只会使用它需要的部分。

我想我的问题是......我将如何理想地为此目的编译 ffmpeg 代码。我正在尝试按照自己编译的说明进行gettext操作,但是由于我不确定是否应该按照说明(在gettext源代码中)为多种架构编译胖二进制文件,因此我被困在了编译点上,并且当我尝试运行时:

      ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
                  CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
                  CPP="gcc -E" CXXCPP="g++ -E"

我收到以下错误:

 checking whether the C compiler works... no configure: error: in
 `/Users/nolainecrusher/Downloads/FFMpeg-source/gettext-0.21/gettext-runtime':
 configure: error: C compiler cannot create executables See
 `config.log' for more details configure: error: ./configure failed for
 gettext-runtime

config.log没有真正告诉我任何有用的信息:

这是我在日志末尾看到的:

 mkdir_p='$(MKDIR_P)' oldincludedir='/usr/include' pdfdir='${docdir}'
 prefix='/usr/local' program_transform_name='s,x,x,' psdir='${docdir}'
 sbindir='${exec_prefix}/sbin' sharedstatedir='${prefix}/com' subdirs='
 gettext-runtime libtextstyle gettext-tools' sysconfdir='${prefix}/etc'
 target_alias=''

我觉得我可能会以错误的方式解决这个问题,但我不确定正确的方式是什么。

标签: iosswiftxcodeffmpeg

解决方案


请参阅以下内容:

FFmpeg 的 Swift 包装器包和 FFmpegAC 包装器包

SwiftFFmpeg 假定 ffmpeg 安装在本地,并将与这些库链接。此外,SwiftFFmpeg 使用 CFFmpeg 作为包依赖项,您的应用可以使用 SwiftFFmpeg 作为依赖项。

如果您想查看编译 ffmpeg(x86_64 和 arm64)的构建脚本,请查看我自己的音频播放器项目


推荐阅读