☰
FFmpeg-Kit 跨平台音视频处理集成指南:7 大平台,5 分钟跑通第一次转码
2026/9/27 8:41:09 网站建设 项目流程

FFmpeg-Kit 跨平台音视频处理集成指南:7 大平台,5 分钟跑通第一次转码

【免费下载链接】ffmpeg-kitFFmpeg Kit for applications. Supports Android, Flutter, iOS, Linux, macOS, React Native and tvOS. Supersedes MobileFFmpeg, flutter_ffmpeg and react-native-ffmpeg.项目地址: https://gitcode.com/GitHub_Trending/ff/ffmpeg-kit

FFmpeg-Kit 是一个基于 FFmpeg v4.5+ 的跨平台音视频处理工具集,覆盖 Android、iOS、Linux、macOS、tvOS、Flutter 和 React Native 共 7 个平台。它替你完成 FFmpeg 的编译、依赖整合与平台适配,你只需引入预构建包,用一行代码执行 FFmpeg/FFprobe 命令。如果你刚接触跨平台音视频开发,这篇 FFmpeg-Kit 集成教程能帮你绕开自编译的全部坑。

🧩 直接集成 FFmpeg 有多难?

不用 FFmpeg-Kit,意味着你要为每个目标平台自行编译 FFmpeg 原生库:

维度自行编译 FFmpeg使用 FFmpeg-Kit
编译配置手工组合 configure 选项,不同平台配置互不相同官方构建脚本统一处理,scripts/ 下每个第三方库都有独立脚本
依赖管理x264、opus 等外部库要逐个找版本、逐个链接预构建包已内置对应外部库,版本匹配已验证
平台适配Android 要处理 ABI 与 API 等级,Apple 要处理架构与 XCFramework各平台封装层已做适配,直接调用统一 API
许可证自己判断哪些组件触发 GPL包名后缀即许可证边界:带 -gpl 才是 GPL v3.0,其余均为 LGPL v3.0

任何一个环节出错都是漫长的调试过程,而这部分工作与你的业务逻辑无关。

📦 8 种预构建包怎么选?

把预构建包理解成八个"配好的工具箱":按需拿取,不必自己往箱子里装零件。FFmpeg-Kit 在每个平台的包管理器(Maven Central、CocoaPods、pub、npm)上提供 8 个包,差异只在于内置了哪些外部库:

包内置外部库谁适合选它
min无(纯 FFmpeg 核心)只做基础转码、追求包体最小的应用
min-gplx264、x265、xvidcore、vid.stab需要 H.264/H.265 编码,能接受 GPL 的应用
httpsgmp、gnutls要拉取 https 流媒体的场景
https-gplgmp、gnutls、x264、x265、xvidcore、vid.stab既要 https 又要 GPL 编码器
audiolame、opus、speex、soxr、shine 等 10 种音频库音频处理工具类应用
videodav1d、libvpx、libwebp、zimg、libass 等 12 种视频/字体库视频处理、字幕烧录类应用
full上述全部 LGPL 外部库功能要求全、但不想引入 GPL 编码器的应用
full-gpl全部外部库(含 x264、x265、xvidcore)需要完整能力且不关心许可证约束的应用

Android 包默认启用 MediaCodec,iOS/macOS/tvOS 包默认启用 AudioToolbox、AVFoundation 与 VideoToolbox,各包一致。

⏱️ 5 分钟跑通第一次转码

第一步:选包。假设你要把 MP4 转成 720p 的 H.264 视频,选 min-gpl(含 x264);若只做格式封装类操作,min 就够。

第二步:按平台引入。

  • Android(Gradle):implementation 'com.arthenica:ffmpeg-kit-min-gpl:6.0.3@aar'
  • Flutter(pubspec.yaml):ffmpeg_kit_flutter_min_gpl: ^6.0.0
  • React Native:npm install ffmpeg-kit-react-native-min-gpl
  • 需要自行构建时,运行 android.sh、ios.sh、linux.sh、macos.sh、tvos.sh 并附加选项,如./android.sh --enable-gpl

第三步:执行命令并检查返回码。以 Android 为例(各平台 API 一致):

FFmpegSession session = FFmpegKit.execute("-i input.mp4 -vf scale=1280:720 -c:v libx264 output.mp4"); if (session.getReturnCode().isSuccess()) { System.out.println("转码成功"); } else { System.out.println("转码失败:" + session.getFailStackTrace()); }

execute返回一个FFmpegSession,所有结果(返回码、日志、统计、失败堆栈)都挂在它上面。

🌐 一套 API 覆盖 7 个平台

七个平台的封装库在功能与能力上完全一致,区别只在语言和平台集成点:

平台语言平台特性亮点
AndroidJava默认启用 MediaCodec 硬件编解码
iOS / macOS / tvOSObjective-C集成 AVFoundation、VideoToolbox(LTS 版本不含 VideoToolbox)
LinuxC++面向服务器环境
FlutterDart与原生行为一致,async/await 风格
React NativeJavaScript(含 TypeScript 定义)JS 与原生同构调用

🎬 两个高频场景实操

场景一:移动端视频压缩。把大体积 MOV 压成带 faststart 的 MP4,便于在线播放:

FFmpegSession s = FFmpegKit.execute( "-i input.mov -c:v libx264 -preset ultrafast -crf 28 " + "-c:a aac -b:a 128k -movflags +faststart output.mp4"); MediaInformation info = FFprobeKit.getMediaInformation("output.mp4").getMediaInformation(); System.out.println("时长: " + (info != null ? info.getDuration() : "?"));

场景二:直播流转发。Linux 服务器上用 C++ API 做 RTMP 转推,视频流直接 copy、音频重封装为 AAC:

auto session = FFmpegKit::execute( "-re -i rtmp://input/live/stream " "-c:v copy -c:a aac -f flv rtmp://output/live/stream"); if (session->getReturnCode()->isSuccess()) { std::cout << "转推完成" << std::endl; }

⚡ 性能调优与排查

转码是重操作,务必异步执行,把结果、日志、统计都交给回调处理。Android 上这样写:

FFmpegKit.executeAsync("-i in.mp4 -threads 2 -c:v libx264 -preset ultrafast -crf 28 out.mp4", s -> updateUI(s), // 完成回调 l -> Log.d("ffmpeg", l.getMessage()), // 日志回调 st -> Log.i("ffmpeg", "bitrate=" + st.getBitrate())); // 统计回调

排查与调优三板斧:用日志回调实时定位报错原因;用统计回调监控比特率与帧率;在命令里用-threads限线程、-preset控速度、-crf控质量与体积的平衡。

最后三行许可证清单:

  • 默认(min、https、audio、video、full):LGPL v3.0,适合多数商业应用
  • 启用--enable-gpl或使用 -gpl 后缀包:整体转为 GPL v3.0
  • x264、x265、kvazaar 等可能涉及软件专利,分发前建议咨询法律意见

FFmpeg-Kit 适合需要在移动端、桌面端或跨平台框架里嵌入 FFmpeg 能力、又不想陷入自编译的初中级开发者。需要说明的是,该项目官方已停止维护,后续演进由原作者的 FFmpegKitNext 承担,但它的统一 API 设计、模块化预构建包和自动化构建脚本,至今仍是跨平台音视频工具设计的参考范本。

【免费下载链接】ffmpeg-kitFFmpeg Kit for applications. Supports Android, Flutter, iOS, Linux, macOS, React Native and tvOS. Supersedes MobileFFmpeg, flutter_ffmpeg and react-native-ffmpeg.项目地址: https://gitcode.com/GitHub_Trending/ff/ffmpeg-kit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询