3 min read
官方停更后,Flutter 项目怎样用上自己的 FFmpegKit?本地编译避坑教程!

随着 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,修改内容:

  1. 设置默认 subspec 为自定义编译版本:
s.default_subspec = 'precompiled-gpl'
  1. 新增一个 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