Skip to content

Repository files navigation

Mediary banner

Mediary logo

Mediary

基于 Flutter 打造的跨平台 M3U8 / HLS 媒体下载器。
解析、下载、解密并合并流媒体分片,输出单个可播放的视频文件。

简体中文 | English

Release Build Flutter License: MIT Platforms

功能特性 • 产品截图 • 下载安装 • 快速开始 • 架构设计 • 参与贡献


✨ 功能特性

  • 🔗 HLS 解析 — 粘贴 .m3u8 地址即可预览分片数量、总时长、加密状态与估算大小;master playlist 会列出全部清晰度/带宽供选择。
  • 🖼️ PNG 包装 HLS — 直接解析 roUd PNG 中的清单、分片和密钥;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
Android 首页
iOS
iOS 首页
macOS
macOS 首页
Windows
Windows 首页

⬇️ 下载安装

前往 Releases 页面获取对应平台的预编译安装包。

平台 安装包
Windows x64 Mediary-windows-x64.zip(解压后运行 Mediary.exe)
macOS Mediary-macos-<架构>.zip(内含 Mediary.app)
Android ARM64 / ARMv7 .apk
iOS 无签名 .app.zip,需自行签名后侧载

🚀 快速开始

Chrome 扩展导入

安装并启动一次桌面版 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      # macOS

🏗️ 架构设计

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。

  1. Fork 本仓库
  2. 创建特性分支(git checkout -b feature/amazing-feature)
  3. 提交改动(git commit -m 'Add some amazing feature')
  4. 推送分支(git push origin feature/amazing-feature)
  5. 发起 Pull Request

⚠️ 免责声明

Mediary 仅供个人、学习与合法用途使用。你需自行确保拥有所下载内容的合法权利。请勿使用本软件侵犯版权或违反任何服务商的服务条款。

📄 许可证

基于 MIT License 分发,详见 LICENSE。


使用 Flutter 以 💙 打造 · elementlo/stream-mediary

About

A cross-platform M3U8 / HLS media downloader built with Flutter. Parse, download, decrypt and merge streaming segments into a single playable video.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages