随着 ffmpeg-kit
官方宣布停止维护,很多 Flutter 开发者开始面临一个问题:如果项目中还需要用到 FFmpegKit
,怎么办?
别担心!
这篇文章将带你一步步在 Mac 环境 下完成本地编译,并且整理了编译过程中遇到的常见错误和解决方法。
无论你是要给 iOS 应用接入,还是想自己掌控 FFmpeg 编译选项,这份指南都能帮你少踩很多坑。
第一步:安装 Flutter+iOS 编译所需的环境依赖
首先,确保你的 Mac 上安装了以下必要工具:
brew install pkg-config meson autogen libtool nasm automake autoconf gtk-doc
xcode-select --install
sudo xcodebuild -license accept
🎯 这些依赖对于 Flutter 插件开发和本地编译 Native 库(如 FFmpegKit)都是必需的。
第二步:拉取 FFmpegKit 源码到本地
在你的 Flutter 项目目录下,新建一个 plugin
文件夹,并克隆 ffmpeg-kit 源码:
mkdir plugin
cd plugin
git clone https://github.com/arthenica/ffmpeg-kit.git
这样就把源码准备好了,后面可以直接在本地编译。
第三步:开始编译 Full-GPL 版本的 FFmpegKit
进入源码目录,执行编译命令:
cd ffmpeg-kit
./ios.sh --full --enable-gpl --target=12.1 --xcframework --disable-armv7 --disable-armv7s --disable-i386 --disable-lib-gnutls
✅ 这条命令会生成可以直接用于 Flutter 插件的
.xcframework
文件。
编译完成后,生成的框架会放在:
prebuilt/bundle-apple-framework-ios
建议检查一下 build.log
文件,确认编译过程是否有错误。
第四步:将编译好的 FFmpegKit 接入到 Flutter 项目中
4.1 复制生成的 Frameworks
在你的 Flutter 插件中,创建一个 Frameworks 文件夹,并复制编译好的框架:
mkdir -p flutter/flutter/ios/Frameworks
cp -r prebuilt/bundle-apple-framework-ios/* flutter/flutter/ios/Frameworks/
4.2 修改 podspec
文件,接入自定义 Framework
打开 flutter/flutter/ios/ffmpeg_kit_flutter.podspec
,修改内容:
- 设置默认 subspec 为自定义编译版本:
s.default_subspec = 'precompiled-gpl'
- 新增一个
precompiled-gpl
的 subspec:
s.subspec 'precompiled-gpl' do |ss|
ss.vendored_frameworks = 'Frameworks/ffmpegkit.xcframework',
'Frameworks/libavcodec.xcframework',
'Frameworks/libavdevice.xcframework',
'Frameworks/libavfilter.xcframework',
'Frameworks/libavformat.xcframework',
'Frameworks/libavutil.xcframework',
'Frameworks/libswresample.xcframework',
'Frameworks/libswscale.xcframework'
end
这样,CocoaPods 在安装时就会优先使用你本地编译好的 Framework 了。
常见错误及解决方案(避坑指南)
在编译过程中,可能会遇到各种各样的坑。这里总结了最常见的错误,以及对应的解决办法:
问题一:CMake 版本不兼容
错误信息:
Compatibility with CMake < 3.5 has been removed
解决办法:
修改所有 CMakeLists.txt
文件,把:
-cmake_minimum_required(VERSION 2.x)
+cmake_minimum_required(VERSION 3.5)
+cmake_policy(VERSION 3.5)
问题二:CMake Policy 报错
错误信息:
Policy CMP0025 may not be set to OLD behavior
解决办法:
修改政策设置,把:
-cmake_policy(SET CMP0025 OLD)
-cmake_policy(SET CMP0054 OLD)
+cmake_policy(SET CMP0025 NEW)
+cmake_policy(SET CMP0054 NEW)
问题三:缺少 fp.h
文件导致编译失败
错误信息:
fatal error: ‘fp.h’ file not found
解决办法:
修改 pngpriv.h
文件,统一替换成:
#include <math.h>
问题四:找不到 parse-datetime.c
错误信息:
clang: error: no such file or directory: ‘parse-datetime.c’
原因:
你的 bison
版本太老了。
解决办法:
升级 bison
:
brew install bison
echo 'export PATH="$(brew --prefix bison)/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
bison --version
确保版本大于 2.4。
问题五:libvorbis 文件缺失
错误信息:
sed: No such file or directory: src/libvorbis/configure.ac
解决办法:
去官方下载 libvorbis-1.3.7.tar.gz,
解压后,把里面的内容复制到:
ffmpeg-kit/src/libvorbis
问题六:GnuTLS 和 OpenSSL 冲突
错误信息:
GnuTLS and OpenSSL must not be enabled at the same time.
解决办法:
在编译命令中添加参数,禁用 GnuTLS:
--disable-lib-gnutls
最后总结
虽然 ffmpeg-kit
官方已经停止维护,但只要按照上面的方法,本地编译出 Full-GPL 版本并成功接入 Flutter 项目,其实并不复杂。
通过自己编译,你可以:
- 启用更多高级编码器(如 x264、fdk-aac)
- 避免依赖过时的二进制包
- 适配自己的应用需求,自由定制
希望这篇避坑指南能帮你节省大量时间,早点睡觉 😆!
👉 官方文档补充参考:FFmpegKit Troubleshooting