{"id":36213594,"url":"https://github.com/debuggerx01/flutter_ffmpeg_sw_player","last_synced_at":"2026-01-11T04:10:19.984Z","repository":{"id":330110823,"uuid":"1121596275","full_name":"debuggerx01/flutter_ffmpeg_sw_player","owner":"debuggerx01","description":"一个基于 FFmpeg 管道输出的 Flutter 视频软渲染插件，专为解决 Linux 平台下视频播放的稳定性与依赖痛点而设计。","archived":false,"fork":false,"pushed_at":"2025-12-24T03:43:51.000Z","size":43,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-24T22:53:56.446Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/debuggerx01.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-23T08:38:42.000Z","updated_at":"2025-12-24T03:43:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/debuggerx01/flutter_ffmpeg_sw_player","commit_stats":null,"previous_names":["debuggerx01/flutter_ffmpeg_sw_player"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/debuggerx01/flutter_ffmpeg_sw_player","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debuggerx01%2Fflutter_ffmpeg_sw_player","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debuggerx01%2Fflutter_ffmpeg_sw_player/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debuggerx01%2Fflutter_ffmpeg_sw_player/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debuggerx01%2Fflutter_ffmpeg_sw_player/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/debuggerx01","download_url":"https://codeload.github.com/debuggerx01/flutter_ffmpeg_sw_player/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debuggerx01%2Fflutter_ffmpeg_sw_player/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28280981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T03:48:11.750Z","status":"ssl_error","status_checked_at":"2026-01-11T03:48:02.765Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-11T04:10:19.156Z","updated_at":"2026-01-11T04:10:19.979Z","avatar_url":"https://github.com/debuggerx01.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# flutter_ffmpeg_sw_player\n\n一个基于 FFmpeg 管道输出的 Flutter 视频软渲染插件，专为解决 Linux 平台下视频播放的稳定性与依赖痛点而设计。\n\n## 🚀 为什么选择本插件？\n\n在 Linux 桌面端开发中，传统的播放器方案（如 fvp 或 media_kit）虽然功能强大，但在某些场景下存在以下挑战：\n\n1. 稳定性问题：在 Linux 下使用 fvp 等插件长时间播放视频流时，偶现应用整体界面卡死。\n2. 依赖复杂：media_kit 等方案通常深度依赖 libmpv，在部分精简版 Linux 系统中安装依赖较为繁琐。\n\nflutter_ffmpeg_sw_player 通过直接调用 FFmpeg 进程并解析其标准输出（stdout）的原始视频帧进行渲染，避开了复杂的 C/C++ 库深度链接，提供了一个更轻量、更稳定的替代方案。\n\n## ✨ 功能特性\n\n* 低依赖：只需系统环境中有 ffmpeg 执行文件即可工作，无需安装复杂的开发头文件或库。\n* 高稳定性：利用独立的子进程解码，即便解码出现异常也不会导致 Flutter 主进程卡死。\n* 灵活渲染：\n    * 支持 Texture 模式：利用纹理共享提高渲染效率。\n    * 支持 RawImage 模式：不依赖 GPU 纹理，纯软绘兼容性更佳。\n* 多实例支持：轻松实现视频墙监控等场景。\n\n## ⚠️ 限制说明 (Limitations)\n\n由于其实现机制的特殊性，本插件不适合所有场景：\n\n1. 无音频播放：插件目前仅处理视频流，不提供声音输出。\n2. 缺少 Seek 功能：目前仅支持流式顺序播放，不支持跳转进度。\n3. 性能开销：采用软件解码和数据拷贝，CPU 占用率会高于硬件解码方案，不建议用于 4K 等超高清视频。\n\n## 📦 安装与配置\n\n### 1. 环境准备\n\n确保您的 Linux 系统中已安装 ffmpeg。\n\n```bash\nsudo apt install ffmpeg\n```\n\n或者在代码中手动指定 ffmpeg 的二进制路径：\n\n```dart\nFfmpegUtil.setBinaryPath('/path/to/your/ffmpeg');\n```\n\u003e 经测试，ffmpeg v6.1版本在二进制文件尺寸和性能方面表现出色，建议从如下地址下载静态编译的版本：[FFmpeg-Builds -- Auto-Build 2025-08-31](https://github.com/BtbN/FFmpeg-Builds/releases/tag/autobuild-2025-08-31-13-00)\n\u003e \n\u003e x64: https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2025-08-31-13-00/ffmpeg-n6.1.3-linux64-lgpl-6.1.tar.xz\n\u003e \n\u003e arm64: https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2025-08-31-13-00/ffmpeg-n6.1.3-linuxarm64-lgpl-6.1.tar.xz\n\u003e \n\u003e 下载后解压获取 `bin/ffmpeg`，可以考虑将其放在项目的assets中，应用启动时通过调用 `FfmpegUtil.setupFromAsset` 方法自动处理。\n\n### 2. 添加依赖\n\n将此插件添加到您的 pubspec.yaml 中。\n\n## 🛠️ 快速开始\n\n### 基础用法\n\n```dart\nimport 'package:flutter_ffmpeg_sw_player/flutter_ffmpeg_sw_player.dart';\n\n// 1. 创建控制器\nfinal controller = FfmpegPlayerController();\n\n// 2. 开始播放\ncontroller.play(\n  'https://example.com/video.mp4',\n  onProgress: (pos) =\u003e print('当前进度: $pos'),\n  onComplete: () =\u003e print('播放完成'),\n);\n\n\n// 3. 在 UI 中显示\n@override\nWidget build(BuildContext context) {\n  return FfmpegPlayerView(\n    controller: controller,\n    fit: BoxFit.contain,\n    useTextureRender: true, // 是否使用纹理加速\n  );\n}\n\n// 4. 销毁\n@override\nvoid dispose() {\n  controller.dispose();\n  super.dispose();\n}\n```\n\n## 🎮 控制器 API\n\n| 方法/属性                               | 说明                                                                             |\n|:------------------------------------|:-------------------------------------------------------------------------------|\n| play(path, {loop, onProgress, ...}) | 开始播放视频文件或网络流，可以通过返回值是否为null判断视频解析是否发生异常                                        |\n| stop()                              | 停止播放并重置状态                                                                      |\n| togglePlay()                        | 切换 暂停/播放 状态                                                                    |\n| status                              | ValueNotifier\\\u003cPlayerStatus\\\u003e 监听播放器状态 (idle, loading, playing, pausing, error) |\n| dispose()                           | 释放资源，关闭 FFmpeg 进程                                                              |\n\n## 🤝 贡献与反馈\n\n如果您在使用过程中遇到问题，或者有更好的改进建议，欢迎提交 Issue 或 Pull Request。\n\n---\n\n注意：本插件主要针对 Linux 平台开发测试，windows和mac理论上也支持，请自行修改测试。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdebuggerx01%2Fflutter_ffmpeg_sw_player","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdebuggerx01%2Fflutter_ffmpeg_sw_player","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdebuggerx01%2Fflutter_ffmpeg_sw_player/lists"}