第三方的脚本:

  • github.com/kewlbear/FF…

  • github.com/Eafy/FFmpeg…

运用国内镜像装置HomeBrew

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

如果装置比较慢,或者卡壳,替换源即可

检查ffmpeg的版别号:

不知道版别号怎样填,看这个下载页面就明白了: www.ffmpeg.org/releases/

brew install yasm

yasm: 免费开源的汇编编译器

curl: (35) error:02FFF036:system library:func(4095):Connection reset by peer
Error: Failure while executing; `/usr/bin/env /usr/local/Homebrew/Library/Homebrew/shims/shared/curl --disable --cookie /dev/null --globoff --user-agent Homebrew/4.0.9-20-gce07d6a\ \(Macintosh\;\ Intel\ Mac\ OS\ X\ 12.6\)\ curl/7.79.1 --header Accept-Language:\ en --fail --progress-bar --location --remote-time --output /Users/admin/Library/Caches/Homebrew/api/formula.jws.json --compressed --speed-limit 100 --speed-time 5 --progress-bar https://formulae.brew.sh/api/formula.jws.json` exited with 35. Here's the output:
curl: (35) error:02FFF036:system library:func(4095):Connection reset by peer 

一直提示装不上,直接下载源码编译按照: yasm.tortall.net/Download.ht…

# http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
./configure 
make 
sudo make install

如果一切顺利,最终的文件在shell脚本的同目录的thin/arch里面

building for macOS, but linking in object file built for iOS Simulator

设置为YES就可以了,或许跟fat有关系,库是通过lipo -create生成的

[✔️]mac上编译使用ffmpeg

现已添加了相关lib,可是运转的时候依旧报错,提示undefined symbols

ld: warning: ignoring file /Applications/Xcode13.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.4.sdk/usr/lib/libbz2.tbd, missing required architecture x86_64 in file /Applications/Xcode13.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.4.sdk/usr/lib/libbz2.tbd (4 slices)
ld: warning: ignoring file /Applications/Xcode13.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.4.sdk/usr/lib/libz.tbd, missing required architecture x86_64 in file /Applications/Xcode13.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.4.sdk/usr/lib/libz.tbd (4 slices)
ld: warning: ignoring file /Applications/Xcode13.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.4.sdk/usr/lib/libiconv.tbd, missing required architecture x86_64 in file /Applications/Xcode13.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.4.sdk/usr/lib/libiconv.tbd (4 slices)

arch不匹配导致

依赖的第三方库和framework

  • CoreVideo

  • CoreAudio

  • CoreMedia

  • CoreFoundation

  • VideoToolbox

  • AudioToolbox

  • Security

  • libbz2

  • libz

  • libiconv

error: The linked library ‘libswscale.a’ is missing one or more architectures required by this target: armv7.

我生成的库文件的确是只支撑arm64,项目配置的arch是arm64,armv7

[✔️]mac上编译使用ffmpeg

我找了一个engine支撑的lib,发现它是支撑多渠道的

$ lipo -info libchipmunk.a
Architectures in the fat file: libchipmunk.a are: armv7 i386 x86_64 arm64

如果库文件支撑多个arch,而项目只支撑部分arch,xcode在编译时,会依据Build Active Architecture Only的设置进行裁剪,以达到app体积最小

[✔️]mac上编译使用ffmpeg

cocos的ios是包括armv7 i386 x86_64 arm64,可是mac的arch仅仅有x86_64,不过发现部分库也支撑i386

mac/ios arch

这些都是指代 CPU 架构的名称,常见于 iOS 和 macOS 开发中。它们分别代表着不同的处理器架构,如下所示:

  • armv7:一种 32 位的 ARM 处理器架构,广泛应用于许多移动设备中,包括 iPhone 3GS、iPhone 4、iPad 1、iPod Touch 3G 和 iPod Touch 4G 等。

  • i386:Intel 32 位 x86 处理器架构,主要用于旧版的 Mac 计算机上。

  • x86_64:Intel 64 位 x86 处理器架构,用于现代 Mac 计算机和大多数 PC 上。

  • arm64:一种 64 位的 ARM 处理器架构,用于 Apple 的 A7 芯片以及之后的处理器,如 iPhone 5s、iPad Air 等。

在开发和构建 iOS 和 macOS 应用程序时,您需求运用恰当的 CPU 架构来编译和链接您的代码。例如,如果您编写的应用程序旨在支撑一切 iOS 设备,则有必要将其编译为 armv7、armv7s 和 arm64 架构。如果您编写的应用程序仅针对 macOS Intel 计算机,则只需编译为 i386 和 x86_64 架构即可。

这些 CPU 架构的挑选会影响应用程序的二进制文件巨细、性能和可移植性,因此您应该依据应用程序的特定需求和目标渠道来挑选正确的架构。

lipo

lipo -create 是一个指令行东西,可用于将多个可执行文件或静态库兼并为一个“fat”二进制文件。在 macOS 和 iOS 应用程序开发中,它一般用于将应用程序或库的不同CPU架构版别兼并为一个独自的可执行文件,以便可以在多个设备上运转。

lipo 东西的 -create 选项需求指定要兼并的一切二进制文件路径,并将结果输出到新的单个二进制文件中。例如,以下指令可将名为 libMyLibrary.a 的静态库文件的 armv7 和 arm64 架构版别兼并为一个 fat 文件:

lipo -create /path/to/libMyLibrary-armv7.a /path/to/libMyLibrary-arm64.a -output /path/to/libMyLibrary-fat.a

这将创建一个新的 libMyLibrary-fat.a 文件,其间包括了 libMyLibrary-armv7.alibMyLibrary-arm64.a 中的一切符号和数据。兼并后的文件巨细一般比单个架构版别的文件大,但它允许您在支撑多种 CPU 架构的设备上运转应用程序或库。

为了保证兼并后的文件能够成功运用,您需求保证包括的每个架构版别都是可执行的,并且没有任何符号冲突或格式问题。

xcode中ffmpeg引入项目后,use of undeclared identifier ‘nanosleep’

原因是ffmpeg也有time.h