flutter_ffmpeg_sw_player 0.0.3
flutter_ffmpeg_sw_player: ^0.0.3 copied to clipboard
一个基于 FFmpeg 管道输出的 Flutter 视频软渲染插件,专为解决 Linux 平台下视频播放的稳定性与依赖痛点而设计。
flutter_ffmpeg_sw_player #
一个基于 FFmpeg 管道输出的 Flutter 视频软渲染插件,专为解决 Linux 平台下视频播放的稳定性与依赖痛点而设计。
🚀 为什么选择本插件? #
在 Linux 桌面端开发中,传统的播放器方案(如 fvp 或 media_kit)虽然功能强大,但在某些场景下存在以下挑战:
- 稳定性问题:在 Linux 下使用 fvp 等插件长时间播放视频流时,偶现应用整体界面卡死。
- 依赖复杂:media_kit 等方案通常深度依赖 libmpv,在部分精简版 Linux 系统中安装依赖较为繁琐。
flutter_ffmpeg_sw_player 通过直接调用 FFmpeg 进程并解析其标准输出(stdout)的原始视频帧进行渲染,避开了复杂的 C/C++ 库深度链接,提供了一个更轻量、更稳定的替代方案。
✨ 功能特性 #
- 低依赖:只需系统环境中有 ffmpeg 执行文件即可工作,无需安装复杂的开发头文件或库。
- 高稳定性:利用独立的子进程解码,即便解码出现异常也不会导致 Flutter 主进程卡死。
- 灵活渲染:
- 支持 Texture 模式:利用纹理共享提高渲染效率。
- 支持 RawImage 模式:不依赖 GPU 纹理,纯软绘兼容性更佳。
- 多实例支持:轻松实现视频墙监控等场景。
⚠️ 限制说明 (Limitations) #
由于其实现机制的特殊性,本插件不适合所有场景:
- 无音频播放:插件目前仅处理视频流,不提供声音输出。
- 缺少 Seek 功能:目前仅支持流式顺序播放,不支持跳转进度。
- 性能开销:采用软件解码和数据拷贝,CPU 占用率会高于硬件解码方案,不建议用于 4K 等超高清视频。
📦 安装与配置 #
1. 环境准备 #
确保您的 Linux 系统中已安装 ffmpeg。
sudo apt install ffmpeg
或者在代码中手动指定 ffmpeg 的二进制路径:
FfmpegUtil.setBinaryPath('/path/to/your/ffmpeg');
经测试,ffmpeg v6.1版本在二进制文件尺寸和性能方面表现出色,建议从如下地址下载静态编译的版本:FFmpeg-Builds -- Auto-Build 2025-08-31
下载后解压获取
bin/ffmpeg,可以考虑将其放在项目的assets中,应用启动时将其提取释放到用户目录,通过Process.runSync('chmod', ['u+x', '/path/to/your/ffmpeg']);赋予执行权限,最后将该路径传递给FfmpegUtil.setBinaryPath即可。
2. 添加依赖 #
将此插件添加到您的 pubspec.yaml 中。
🛠️ 快速开始 #
基础用法 #
import 'package:flutter_ffmpeg_sw_player/flutter_ffmpeg_sw_player.dart';
// 1. 创建控制器
final controller = FfmpegPlayerController();
// 2. 开始播放
controller.play(
'https://example.com/video.mp4',
onProgress: (pos) => print('当前进度: $pos'),
onComplete: () => print('播放完成'),
);
// 3. 在 UI 中显示
@override
Widget build(BuildContext context) {
return FfmpegPlayerView(
controller: controller,
fit: BoxFit.contain,
useTextureRender: true, // 是否使用纹理加速
);
}
// 4. 销毁
@override
void dispose() {
controller.dispose();
super.dispose();
}
🎮 控制器 API #
| 方法/属性 | 说明 |
|---|---|
| play(path, {loop, onProgress, ...}) | 开始播放视频文件或网络流 |
| stop() | 停止播放并重置状态 |
| togglePlay() | 切换 暂停/播放 状态 |
| status | ValueNotifier |
| dispose() | 释放资源,关闭 FFmpeg 进程 |
🤝 贡献与反馈 #
如果您在使用过程中遇到问题,或者有更好的改进建议,欢迎提交 Issue 或 Pull Request。
注意:本插件主要针对 Linux 平台开发测试,windows和mac理论上也支持,请自行测试。