一款跨平台、高颜值、支持多源协议挂载与自动化媒体库管理的现代视频播放器。
- 宿主框架: Electron 31
- 前端框架: React 19 + TypeScript + Vite 5
- 样式方案: TailwindCSS 3 + Framer Motion
- 播放器引擎: MPV(完整集成)
- 转码引擎: FFmpeg(完整集成)
- 本地数据库: better-sqlite3
- 文件监听: chokidar
- 路由: React Router v7
- 图标: Lucide React
- 网络协议: SMB2, WebDAV
coffee/
├── bin/ # 二进制资源
│ ├── linux/ # Linux 平台二进制
│ ├── mac/ # macOS 平台二进制
│ │ └── ffmpeg # FFmpeg 可执行文件
│ └── win/ # Windows 平台二进制
├── data/ # 运行时数据目录(数据库、缓存等)
├── public/ # 静态资源
├── resources/ # 应用资源(图标等)
├── src/
│ ├── main/ # 主进程
│ │ ├── database/ # 数据库层
│ │ │ ├── db.ts # SQLite 数据库初始化
│ │ │ ├── scanner.ts # 媒体扫描器
│ │ │ └── sourceRepository.ts # 源数据仓储
│ │ ├── appConfigManager.ts # 应用配置管理
│ │ ├── configManager.ts # 网络配置管理
│ │ ├── ffmpeg.ts # FFmpeg 转码模块
│ │ ├── licenseManager.ts # 许可证管理
│ │ ├── main.ts # Electron 主入口
│ │ ├── mpv.ts # MPV 播放器引擎
│ │ ├── networkSourceManager.ts # 网络源管理(SMB/Jellyfin/等)
│ │ ├── preload.ts # 预加载脚本
│ │ ├── shortcutsConfigManager.ts # 快捷键配置管理
│ │ └── thumbnailGenerator.ts # 缩略图生成器
│ ├── renderer/ # 渲染进程
│ │ ├── components/ # UI 组件
│ │ │ ├── TitleBar.tsx # 标题栏组件
│ │ │ └── VideoPlayer.tsx # 视频播放器组件
│ │ ├── hooks/ # 自定义 Hooks
│ │ │ └── usePlayer.ts # 播放器状态 Hook
│ │ ├── pages/ # 页面组件
│ │ │ ├── Player.tsx # 播放器页面
│ │ │ ├── Library.tsx # 媒体库页面
│ │ │ └── Settings.tsx # 设置页面
│ │ ├── types/ # 类型定义
│ │ │ └── electron.d.ts # Electron API 类型
│ │ ├── App.tsx # 根组件(路由)
│ │ ├── index.css # 样式文件
│ │ └── main.tsx # React 入口
│ └── shared/ # 共享代码
│ ├── types.ts # TypeScript 类型定义
│ └── utils.ts # 工具函数
├── index.html # HTML 入口
├── vite.config.ts # Vite 配置
├── tailwind.config.js # TailwindCSS 配置
├── postcss.config.js # PostCSS 配置
├── tsconfig.json # TypeScript 配置
├── tsconfig.app.json # 应用 TypeScript 配置
├── tsconfig.node.json # Node TypeScript 配置
├── electron-builder.yml # Electron 打包配置
├── eslint.config.js # ESLint 配置
└── package.json # 项目配置
存储挂载源信息(本地/SMB/WebDAV/阿里云盘/Jellyfin/Plex)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | TEXT | 主键 |
| type | TEXT | 源类型 |
| name | TEXT | 源名称 |
| path | TEXT | 路径/URL |
| credentials | TEXT | 凭证(JSON) |
| isActive | INTEGER | 是否启用 |
| dateAdded | INTEGER | 添加时间 |
| category | TEXT | 分类(movies/tv/all) |
存储视频文件实体
| 字段 | 类型 | 说明 |
|---|---|---|
| id | TEXT | 主键 |
| sourceId | TEXT | 所属源 ID |
| filePath | TEXT | 文件路径 |
| fileName | TEXT | 文件名 |
| fileSize | INTEGER | 文件大小 |
| duration | REAL | 时长(秒) |
| format | TEXT | 格式 |
| resolution | TEXT | 分辨率 |
| thumbnailPath | TEXT | 缩略图路径 |
| dateAdded | INTEGER | 添加时间 |
| dateModified | INTEGER | 修改时间 |
存储刮削信息(标题、海报、剧情简介、TMDB ID 等)
存储播放进度(用于断点续播)
- MPV 播放器引擎完整集成
- 播放/暂停、进度控制、音量控制、快进/快退
- FFmpeg 转码支持(非原生格式自动转码)
- 预加载机制提升播放体验
- ✅ 本地文件夹(完整)
- ✅ SMB/NAS(完整,支持挂载、扫描、播放)
- ✅ Jellyfin(完整,支持连接、扫描、播放、封面获取)
- ⏳ WebDAV(连接方法已实现,扫描下载待完善)
- ⏳ Plex(连接方法已实现,扫描下载待完善)
- ⏳ 阿里云盘(连接方法已实现,扫描下载待完善)
- 源的增删改查
- 媒体文件扫描(支持增量扫描)
- 缩略图自动生成
- 分页浏览
- 分类筛选(全部/电影/剧集/最近添加/正在观看)
- 缓存管理(转码缓存、缩略图缓存、网络缓存)
- 数据库表结构已设计完成
- Jellyfin 源自动获取封面
- TMDB 刮削待实现
- 常规设置(启动行为、默认页面)
- 播放器设置(硬件解码、默认音量)
- 快捷键自定义
- 网络设置(缓存大小、超时配置)
- 许可证管理(免费版/专业版)
- 本地许可证验证
- 功能权限控制
- 免费版/专业版区分
| 阶段 | 状态 | 说明 |
|---|---|---|
| 初始化与架构 | ✅ 已完成 | Electron + React + TypeScript + Vite 项目搭建 |
| 底层引擎配置 | ✅ 已完成 | MPV 播放器、FFmpeg 转码、自定义协议 |
| UI 复刻 | ✅ 已完成 | 媒体库、播放器、设置页面完整 UI |
| 数据库与元数据 | ✅ 基础完成 | SQLite 数据库、扫描器、缩略图生成 |
| 网络源支持 | ✅ 部分完成 | SMB 和 Jellyfin 完整支持,其他协议待完善 |
| 元数据刮削 | ⏳ 进行中 | 等待 TMDB API 集成 |
| 播放历史与断点续播 | ⏳ 计划中 | 数据库表已设计,功能待实现 |
npm installnpm run electron:devnpm run electron:buildnpm run lint- MP4, MKV, AVI, MOV, FLV, WMV, WebM, TS, M4V, MTS, VOB, RM, RMVB, 3GP