Skip to content

Repository files navigation

Coffee - 跨平台现代视频播放器

一款跨平台、高颜值、支持多源协议挂载与自动化媒体库管理的现代视频播放器。

技术栈

  • 宿主框架: 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              # 项目配置

数据库设计

Sources 表

存储挂载源信息(本地/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)

Media 表

存储视频文件实体

字段 类型 说明
id TEXT 主键
sourceId TEXT 所属源 ID
filePath TEXT 文件路径
fileName TEXT 文件名
fileSize INTEGER 文件大小
duration REAL 时长(秒)
format TEXT 格式
resolution TEXT 分辨率
thumbnailPath TEXT 缩略图路径
dateAdded INTEGER 添加时间
dateModified INTEGER 修改时间

Metadata 表

存储刮削信息(标题、海报、剧情简介、TMDB ID 等)

PlaybackHistory 表

存储播放进度(用于断点续播)

功能模块

✅ 核心播放模块

  • MPV 播放器引擎完整集成
  • 播放/暂停、进度控制、音量控制、快进/快退
  • FFmpeg 转码支持(非原生格式自动转码)
  • 预加载机制提升播放体验

✅ 多源输入挂载模块

  • ✅ 本地文件夹(完整)
  • ✅ SMB/NAS(完整,支持挂载、扫描、播放)
  • ✅ Jellyfin(完整,支持连接、扫描、播放、封面获取)
  • ⏳ WebDAV(连接方法已实现,扫描下载待完善)
  • ⏳ Plex(连接方法已实现,扫描下载待完善)
  • ⏳ 阿里云盘(连接方法已实现,扫描下载待完善)

✅ 媒体库管理模块

  • 源的增删改查
  • 媒体文件扫描(支持增量扫描)
  • 缩略图自动生成
  • 分页浏览
  • 分类筛选(全部/电影/剧集/最近添加/正在观看)
  • 缓存管理(转码缓存、缩略图缓存、网络缓存)

⏳ 元数据与刮削模块

  • 数据库表结构已设计完成
  • Jellyfin 源自动获取封面
  • TMDB 刮削待实现

✅ 设置模块

  • 常规设置(启动行为、默认页面)
  • 播放器设置(硬件解码、默认音量)
  • 快捷键自定义
  • 网络设置(缓存大小、超时配置)
  • 许可证管理(免费版/专业版)

✅ 许可证系统

  • 本地许可证验证
  • 功能权限控制
  • 免费版/专业版区分

开发进度

阶段 状态 说明
初始化与架构 ✅ 已完成 Electron + React + TypeScript + Vite 项目搭建
底层引擎配置 ✅ 已完成 MPV 播放器、FFmpeg 转码、自定义协议
UI 复刻 ✅ 已完成 媒体库、播放器、设置页面完整 UI
数据库与元数据 ✅ 基础完成 SQLite 数据库、扫描器、缩略图生成
网络源支持 ✅ 部分完成 SMB 和 Jellyfin 完整支持,其他协议待完善
元数据刮削 ⏳ 进行中 等待 TMDB API 集成
播放历史与断点续播 ⏳ 计划中 数据库表已设计,功能待实现

开发指南

安装依赖

npm install

开发模式

npm run electron:dev

构建

npm run electron:build

代码检查

npm run lint

支持的视频格式

  • MP4, MKV, AVI, MOV, FLV, WMV, WebM, TS, M4V, MTS, VOB, RM, RMVB, 3GP

About

Coffee - 一款跨平台、高颜值、支持多源协议挂载与自动化媒体库管理的现代视频播放器。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages