基于 Flutter 打造的跨平台 M3U8 / HLS 媒体下载器。
解析、下载、解密并合并流媒体分片,输出单个可播放的视频文件。
简体中文 | English
功能特性 • 产品截图 • 下载安装 • 快速开始 • 架构设计 • 参与贡献
- 🔗 HLS 解析 — 粘贴
.m3u8地址即可预览分片数量、总时长、加密状态与估算大小;master playlist 会列出全部清晰度/带宽供选择。 - 🖼️ PNG 包装 HLS — 直接解析
roUdPNG 中的清单、分片和密钥;macOS / Windows 可通过stream-mediary://download从 Chrome 扩展打开下载界面,无需本地代理。 - ⚡ 并发下载 — 两级调度:任务级并发(默认 3)+ 任务内分片并发(默认 8)。
- 🔐 AES 解密 — 纯 Dart 流式 AES-128/192/256-CBC 解密,支持自定义 HTTP 请求头与用户指定的 KEY / IV 覆盖。
- 🧩 智能合并 — 分片按序拼接为单个
.ts;检测到ffmpeg时无损 remux 为.mp4(-c copy),失败自动回退保留.ts。 - ⏯️ 断点续传 — 应用重启后自动恢复未完成任务,已完成分片不重复下载;分片级指数退避重试。
- 🎬 内置播放器 — 应用内直接播放下载的
.ts/.mp4,完整控制条 + 桌面端键盘快捷键。 - 🕘 历史记录 — 任务历史持久化,支持播放、重新下载、打开所在目录与删除。
- 💬 社区留言板 — 应用内分享资源、交流经验与反馈问题。
- 🎨 Material 3 — 亮色 / 暗色 / 跟随系统主题,自适应导航(移动端底部栏,桌面端侧边栏)。
- 🌍 国际化 — 中文(默认)与英文。
Android![]() |
iOS![]() |
macOS![]() |
Windows![]() |
前往 Releases 页面获取对应平台的预编译安装包。
| 平台 | 安装包 |
|---|---|
| Windows x64 | Mediary-windows-x64.zip(解压后运行 Mediary.exe) |
| macOS | Mediary-macos-<架构>.zip(内含 Mediary.app) |
| Android | ARM64 / ARMv7 .apk |
| iOS | 无签名 .app.zip,需自行签名后侧载 |
- Flutter 3.47+(Dart SDK ^3.13)
- 目标平台对应的工具链(Xcode、Android Studio、Visual Studio 等)
- (可选)
PATH中的ffmpeg,用于 MP4 remux
# 1. 克隆仓库
git clone https://github.com/elementlo/stream-mediary.git
cd stream-mediary
# 2. 安装依赖
flutter pub get
# 3. 运行代码生成(drift、freezed、riverpod、l10n)
dart run build_runner build --delete-conflicting-outputs
# 4. 在已连接的设备 / 桌面上运行
flutter run构建发布版本:
flutter build apk # Android
flutter build ios # iOS
flutter build windows # Windows
flutter build macos # macOS检测到 ffmpeg 时,合并后的 .ts 会无损 remux 为 .mp4(-c copy,不重新编码);未检测到则保留 .ts,功能不受影响。应用会按以下顺序探测:
- 设置页手动指定的路径(设置 → ffmpeg,支持「浏览」选择或手填,保存前会校验可用性);
- 进程
PATH中的ffmpeg; - 常见安装位置。
各平台常见位置:
| 平台 | 探测路径 |
|---|---|
| macOS | /opt/homebrew/bin、/usr/local/bin、/usr/bin、/opt/local/bin |
| Windows | C:\ffmpeg\bin、C:\Program Files\ffmpeg\bin、C:\Program Files (x86)\ffmpeg\bin、C:\ProgramData\chocolatey\bin(choco)、%USERPROFILE%\scoop\shims(scoop)、%USERPROFILE%\AppData\Local\Microsoft\WinGet\Links(winget) |
安装方式:
# macOS
brew install ffmpeg
# Windows(任选其一)
winget install Gyan.FFmpeg
choco install ffmpeg
scoop install ffmpeg提示:Windows 上从开始菜单 / 资源管理器启动的 GUI 进程只读取进程创建时的系统 PATH 快照。若刚装完 ffmpeg 探测不到,请注销重登或重启;或直接在设置页手填
ffmpeg.exe的完整路径。macOS 需关闭 App Sandbox 才能执行 bundle 外的 ffmpeg(本仓库默认已关闭)。
Mediary 采用分层、单向依赖的架构。下载引擎为纯 Dart,零 Flutter 依赖,运行在独立 isolate 中,可完整单元测试。
┌─────────────────────────────────────────────┐
│ features/ (UI 层) │
│ shell · new_download · downloads · │
│ history · player · settings │
├─────────────────────────────────────────────┤
│ providers/ (Riverpod 状态层) │
├─────────────────────────────────────────────┤
│ data/ (drift 数据库 + 仓储层) │
├─────────────────────────────────────────────┤
│ engine/ (纯 Dart 下载引擎) │
│ m3u8 · scheduler · net · crypto · merge │
└─────────────────────────────────────────────┘
技术栈
| 领域 | 选型 |
|---|---|
| 状态管理 | flutter_riverpod + riverpod_annotation |
| 路由 | go_router |
| 网络 | dio |
| 解密 | pointycastle(纯 Dart AES-CBC) |
| 数据库 | drift + sqlite3_flutter_libs |
| 播放 | media_kit |
| 模型 | freezed + json_serializable |
完整设计文档见 docs/design.md,需求规格见 docs/requirements.md。
flutter test # 单元测试(解析器、解密器、合并器、调度器)
flutter test --coverage # 生成覆盖率报告核心引擎单元测试覆盖率目标 ≥70%。
欢迎贡献代码!请随时提交 issue 或 pull request。
- Fork 本仓库
- 创建特性分支(
git checkout -b feature/amazing-feature) - 提交改动(
git commit -m 'Add some amazing feature') - 推送分支(
git push origin feature/amazing-feature) - 发起 Pull Request
Mediary 仅供个人、学习与合法用途使用。你需自行确保拥有所下载内容的合法权利。请勿使用本软件侵犯版权或违反任何服务商的服务条款。
基于 MIT License 分发,详见 LICENSE。
使用 Flutter 以 💙 打造 · elementlo/stream-mediary




