FFMpeg (7.0) - 编译 iOS SDK [2024最新]


环境说明:

  • macOS 14.3.1
  • Xcode 15.2

一、数据代码准备

1、下载 FFMpeg 源码包

我使用(直观、推荐):https://ffmpeg.org//releases/
我下载 ffmpeg-7.0.tar.gz 然后解压


你也前往网站 https://ffmpeg.org//download.html
macOS : https://evermeet.cx/ffmpeg/


2、下载 编译脚本

目前大家都是用这份脚本
https://github.com/kewlbear/FFmpeg-iOS-build-script

git clone https://github.com/kewlbear/FFmpeg-iOS-build-script.git

3、调整编译脚本

1、修改 FFMPEG_VERSION 版本为你下载的 FFMpeg 版本。这里我改为 7.0

2、将 ARCHS 中的 i386armv7 去掉 ;

i386 用于32位处理器的模拟器、armv7 是32位真机 。这些架构比较老,目前一般用不到,打包时可能会出现各种问题,不如先去掉。

3、ffmpeg 5.0以上的话,将 DEPLOYMENT_TARGET 改为 =13.0

4、CONFIGURE_FLAGS 添加 --disable-audiotoolbox


5、裁剪(可选)

build-ffmpeg.shCONFIGURE_FLAGS 可以添加选项,来去掉不需要的功能,如:

--disable-ffplay  --disable-ffprobe  --disable-ffserver
# 禁止 ffplay、ffprobe、ffserver 

查看配置参数

% cd ffmpeg-7.0
% ./configure --help

二、安装依赖

1、安装 brew

brew 是 macOS 最常用的软件/包管理工具

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

可参考 https://blog.csdn.net/lovechris00/article/details/121613647


2、gas-preprocessor

sudo git clone https://github.com/bigsen/gas-preprocessor.git  /usr/local/bin/gas

sudo cp /usr/local/bin/gas/gas-preprocessor.pl /usr/local/bin/gas-preprocessor.pl

sudo chmod 777 /usr/local/bin/gas-preprocessor.pl

sudo rm -rf /usr/local/bin/gas/

3、yams

yasm是汇编编译器,因为ffmpeg中为了提高效率用到了汇编指令,所以编译时需要安装


curl http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz-o yasm-1.2.0.gz

tar-zxvf yasm-1.2.0.gz

cd yasm-1.2.0

./configure&&make-j4&&sudomakeinstall

4、x264、FDK-AAC

x264、FDK-AAC 是可选的,不加入也可以成功编译 FFMpeg。
你也可以参考下面资料来加入编译:


5、其他依赖项

brew install nasm yasm 

三、运行编译

1、运行脚本

./build-ffmpeg.sh arm64 x86_64

如果你只考虑 iOS 真机,或者 macOS 平台使用,也可以只有一个选项。
注:个人测试发现,使用 build-ffmpeg-iOS-framework.sh 可能会出现 arm64 和 x86_64 架构的包都打好了,但是合并 fat 会出问题;也许清空过去编译的库,有用。但使用 上述命令 没有出现这个情况。


2、结果

目录下会多出三个文件夹:FFmpeg-iOS, scratch, thin

% tree -L 2
.
├── FFmpeg-iOS
│   ├── include
│   └── lib
├── scratch
│   ├── arm64
│   └── x86_64
└── thin
    ├── arm64
    └── x86_64

10 directories, 0 files
13:53{cyan} 03 % tree -L 3
.
├── FFmpeg-Apple
│   ├── include
│   │   ├── libavcodec
│   │   ├── libavdevice
│   │   ├── libavfilter
│   │   ├── libavformat
│   │   ├── libavutil
│   │   ├── libswresample
│   │   └── libswscale
│   └── lib
│       ├── libavcodec.a
│       ├── libavdevice.a
│       ├── libavfilter.a
│       ├── libavformat.a
│       ├── libavutil.a
│       ├── libswresample.a
│       └── libswscale.a
├── scratch
│   ├── arm64
│   │   ├── Makefile
│   │   ├── config.h
│   │   ├── config_components.h
│   │   ├── doc
│   │   ├── ffbuild
│   │   ├── libavcodec
│   │   ├── libavdevice
│   │   ├── libavfilter
│   │   ├── libavformat
│   │   ├── libavutil
│   │   ├── libswresample
│   │   ├── libswscale
│   │   ├── src -> /Users/shushu/Documents/repos_apple/ff/FFmpeg-iOS-build-script/ffmpeg-7.0
│   │   └── tests
│   └── x86_64
│       ├── Makefile
│       ├── config.asm
│       ├── config.h
│       ├── config_components.h
│       ├── doc
│       ├── ffbuild
│       ├── libavcodec
│       ├── libavdevice
│       ├── libavfilter
│       ├── libavformat
│       ├── libavutil
│       ├── libswresample
│       ├── libswscale
│       ├── src -> /Users/shushu/Documents/repos_apple/ff/FFmpeg-iOS-build-script/ffmpeg-7.0
│       └── tests
└── thin
    ├── arm64
    │   ├── include
    │   ├── lib
    │   └── share
    └── x86_64
        ├── include
        ├── lib
        └── share



四、集成到 iOS 工程

1、拖拽包到工程

这里我将 FFmpeg-iOS 改为了 FFmpeg-Apple


2、修改 Search Paths

  • Header Search Paths : $(SRCROOT)/ffdemo/FFmpeg-Apple/include
  • Library Search Paths : $(SRCROOT)/ffdemo/FFmpeg-Apple/include

3、引入包

如果不引入,可能会报错:Undefined symbols
出现这类报错信息,你也可以参考:https://ezcode.blog.csdn.net/article/details/138462466 来引入对应的库

  • libz.1.2.5.tbd
  • libbz2.1.0.tbd
  • libiconv.2.4.0.tbd
  • AVFoudation.framework
  • CoreMedia.framework
  • VideoToolBox.framework
  • AudioToolBox.framework

如果使用 sdl2,fdk-aac,x264,还需导入UIKit.framework、Foundation.framework、CoreMotion.framework、MediaPlayer.framework、GameController.framework、 CoreHaptics.framework
若使用OpenGL绘制视频帧,还需导入OpenGLES.framework、 QuartzCore.framework。


4、修改 引入文件的 .m 文件位 .mm

引入头文件

#include "libavcodec/avcodec.h"
#include "libavutil/opt.h"
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"

#import "avformat.h"

运行 没有报错,就代表 包可以用


一些教程中这样的引入和使用,在我这里测试是不能用的,可能是 ffmpeg 版本问题

#import "ffmpeg.h"

av_register_all();

#ifdef __cplusplus
extern "C" {
#endif
    
#include "libavformat/avformat.h"
#include "libavcodec/avcodec.h"
#include "libavutil/avutil.h"
#include "libswscale/swscale.h"
#include "libswresample/swresample.h"
#include "libavutil/opt.h"
    
#ifdef __cplusplus
};
#endif

五、报错信息等

可参考:https://blog.csdn.net/lovechris00/article/details/138257744

报错1:xcrun -sdk iphoneos clang is unable to create an executable file
报错2: error: unknown type name ‘AudioDeviceID’;
报错3:‘supportsFamily:’ is only available on iOS 13.0
报错4:cputype does not match


伊织 2024-05-04

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程乐园

请我喝杯伯爵奶茶~!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值