No description
  • Go 86.4%
  • JavaScript 11.7%
  • Shell 1.9%
Find a file
2026-04-25 17:06:39 +08:00
asset first commit 2026-04-21 10:53:38 +08:00
cmd/simple-emby chore: add project packaging structure and sample git hooks 2026-04-21 17:16:57 +08:00
internal feat: implement asynchronous danmaku matching and dynamic subtitle injection into mpv 2026-04-25 17:06:39 +08:00
packaging/archlinux chore: add project packaging structure and sample git hooks 2026-04-21 17:16:57 +08:00
scripts feat: implement Bilibili danmaku fetching and ASS rendering with automatic mpv integration 2026-04-21 15:16:30 +08:00
test/danmaku feat: implement Bilibili danmaku fetching and ASS rendering with automatic mpv integration 2026-04-21 15:16:30 +08:00
.gitignore refactor: update next episode lookup to use series ID and improve mpv start time handling 2026-04-21 17:48:24 +08:00
go.mod feat: implement Bilibili danmaku fetching and ASS rendering with automatic mpv integration 2026-04-21 15:16:30 +08:00
go.sum first commit 2026-04-21 10:53:38 +08:00
README.md feat: replace Bilibili danmaku provider with Dandanplay API integration for improved episode matching strategies 2026-04-25 16:44:46 +08:00

simple-emby

一个轻量级的 Emby 本地播放中间件。它能够拦截 Emby 网页端的播放请求,并将其重定向到本地的 mpv 播放器,实现高性能的硬件解码播放,并保持播放进度与服务器完美同步。

🌟 核心特性

  • 动态身份验证:无需在配置文件中硬编码 API Key 或 UserID。脚本会自动从您的浏览器会话中提取所需的认证信息支持多服务器、多用户无缝切换。
  • 无缝播放体验:通过拦截浏览器的 fetch 请求,在原生播放器启动前将其阻止,并即时拉起本地 mpv
  • 智能弹幕集成
    • 弹弹play 兼容:完美支持兼容 Dandanplay API 的弹幕服务(如 御坂网络弹幕服务)。
    • 三级智能匹配
      1. 文件名匹配:直接使用媒体库真实文件名进行匹配,准确率极高。
      2. 标准命名匹配:根据元数据自动构造标准 SxxExx 格式再次尝试匹配。
      3. 模糊搜索兜底:作为最后手段进行关键词模糊搜索。
  • 高性能弹幕渲染
    • 轨道管理与防重叠:内置碰撞检测算法,确保弹幕排列整齐,绝不重叠。
    • 密度自动控制:在高能弹幕时刻自动限制同屏密度,极大降低 CPU 占用,保持播放流畅。
  • 进度双向同步
    • 从服务器恢复:自动获取上次观看位置并从该点开始播放。
    • 向服务器汇报播放位置Ticks、暂停/播放状态实时同步,确保观看记录准确。
  • 自动下一集:支持剧集自动连播,当一集播放结束时,中间件会自动查找并播放下一集。
  • mpv 深度优化
    • 自动设置媒体标题(例如:剧集名称 - S01E05 - 集名称)。
    • 针对网络流优化的缓存控制(默认 2 分钟预读)。
    • 完整的 IPC 控制,支持复用播放器窗口。
  • 系统托盘支持:常驻系统托盘,实时显示当前播放状态(空闲/播放中及标题)。

🏗️ 系统架构

本项目分为两个部分:

  1. 前端 (Tampermonkey 脚本):运行在浏览器中,负责拦截 API 请求并提取播放所需的 Token 和 URL。
  2. 后端 (Go 守护进程):运行在本地,负责接收前端请求、启动/管理 mpv 进程,并负责与 Emby 服务器进行心跳通信及弹幕匹配。

🚀 快速开始

1. 编译后端

确保您的系统已安装 Go 环境。

go build -o simple-emby ./cmd/simple-emby

2. 运行守护进程

./simple-emby

首次运行后,程序将常驻托盘。默认监听 127.0.0.1:19999

3. 安装油猴脚本

  1. 在浏览器中安装 Tampermonkey 插件。
  2. 创建新脚本,并复制本项目中 scripts/emby-tampermonkey.js 的内容。
  3. 保存并刷新 Emby 网页。

⚙️ 配置说明

配置文件通常位于 ~/.config/simple-emby/config.json(取决于您的操作系统)。

  • mpv_path: 自定义 mpv 可执行文件的路径(默认为 mpv)。
  • bind_addr: 本地服务的监听地址(默认为 127.0.0.1:19999)。
  • enable_danmaku: 是否启用弹幕(默认为 true)。
  • dandanplay_api: 弹幕服务 API 地址(默认为官方地址,支持自定义为御坂网络等私有部署)。
  • dandanplay_token: 弹幕服务认证 Token可选

🛠️ 技术栈

  • Go: 后端核心逻辑。
  • mpv: 底层播放引擎。
  • systray: 跨平台托盘实现。
  • Tampermonkey (JavaScript): 请求拦截与元数据提取。

📄 开源协议

本项目采用 MIT 协议开源。