No description
- Go 86.4%
- JavaScript 11.7%
- Shell 1.9%
| asset | ||
| cmd/simple-emby | ||
| internal | ||
| packaging/archlinux | ||
| scripts | ||
| test/danmaku | ||
| .gitignore | ||
| go.mod | ||
| go.sum | ||
| README.md | ||
simple-emby
一个轻量级的 Emby 本地播放中间件。它能够拦截 Emby 网页端的播放请求,并将其重定向到本地的 mpv 播放器,实现高性能的硬件解码播放,并保持播放进度与服务器完美同步。
🌟 核心特性
- 动态身份验证:无需在配置文件中硬编码 API Key 或 UserID。脚本会自动从您的浏览器会话中提取所需的认证信息,支持多服务器、多用户无缝切换。
- 无缝播放体验:通过拦截浏览器的
fetch请求,在原生播放器启动前将其阻止,并即时拉起本地mpv。 - 智能弹幕集成:
- 弹弹play 兼容:完美支持兼容 Dandanplay API 的弹幕服务(如 御坂网络弹幕服务)。
- 三级智能匹配:
- 文件名匹配:直接使用媒体库真实文件名进行匹配,准确率极高。
- 标准命名匹配:根据元数据自动构造标准
SxxExx格式再次尝试匹配。 - 模糊搜索兜底:作为最后手段进行关键词模糊搜索。
- 高性能弹幕渲染:
- 轨道管理与防重叠:内置碰撞检测算法,确保弹幕排列整齐,绝不重叠。
- 密度自动控制:在高能弹幕时刻自动限制同屏密度,极大降低 CPU 占用,保持播放流畅。
- 进度双向同步:
- 从服务器恢复:自动获取上次观看位置并从该点开始播放。
- 向服务器汇报:播放位置(Ticks)、暂停/播放状态实时同步,确保观看记录准确。
- 自动下一集:支持剧集自动连播,当一集播放结束时,中间件会自动查找并播放下一集。
- mpv 深度优化:
- 自动设置媒体标题(例如:
剧集名称 - S01E05 - 集名称)。 - 针对网络流优化的缓存控制(默认 2 分钟预读)。
- 完整的 IPC 控制,支持复用播放器窗口。
- 自动设置媒体标题(例如:
- 系统托盘支持:常驻系统托盘,实时显示当前播放状态(空闲/播放中及标题)。
🏗️ 系统架构
本项目分为两个部分:
- 前端 (Tampermonkey 脚本):运行在浏览器中,负责拦截 API 请求并提取播放所需的 Token 和 URL。
- 后端 (Go 守护进程):运行在本地,负责接收前端请求、启动/管理
mpv进程,并负责与 Emby 服务器进行心跳通信及弹幕匹配。
🚀 快速开始
1. 编译后端
确保您的系统已安装 Go 环境。
go build -o simple-emby ./cmd/simple-emby
2. 运行守护进程
./simple-emby
首次运行后,程序将常驻托盘。默认监听 127.0.0.1:19999。
3. 安装油猴脚本
- 在浏览器中安装 Tampermonkey 插件。
- 创建新脚本,并复制本项目中
scripts/emby-tampermonkey.js的内容。 - 保存并刷新 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 协议开源。