基于 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,需自行签名后侧载 |
安装并启动一次桌面版 Mediary,再安装 Video Stream Link Detector 扩展。在视频页选择“在 Mediary 中下载”,应用会读取入口地址、来源页和浏览器 User-Agent,预览流媒体并允许选择清晰度后开始下载。扩展也可复制原始 HTTP(S) 入口,粘贴到新版 Mediary 的新建下载页。PNG 包装的入口不适用于未实现 roUd 解包的普通 HLS 下载器。
macOS 的协议由 .app 注册;Windows 在应用首次启动时写入当前用户的协议注册表项。签名 CDN 地址可能过期,需要重新从网页获取入口。
- 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 # macOSMediary 采用分层、单向依赖的架构。下载引擎为纯 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




