Files
MoonTVPlus/DANMAKU_INTEGRATION.md

255 lines
6.7 KiB
Markdown
Raw Normal View History

2025-12-02 01:00:42 +08:00
# LunaTV 弹幕功能集成说明
## 概述
LunaTV 已成功集成弹幕功能,支持自动搜索、手动选择和实时显示弹幕。弹幕数据来自 danmu_api 项目。
## 前置条件
### 1. 启动 danmu_api 服务
在使用弹幕功能之前,需要先启动 danmu_api 服务:
```bash
cd D:\projects\danmu_api
npm install
npm start
```
默认情况下danmu_api 服务将在 http://localhost:9321 启动。
### 2. 配置环境变量(可选)
弹幕请求通过 LunaTV 后端代理转发,需要在后端配置 danmu_api 的地址。
如果您的 danmu_api 服务运行在不同的地址或使用了自定义 token可以在项目根目录创建 `.env.local` 文件:
```env
# 弹幕 API 地址(默认: http://localhost:9321
DANMAKU_API_BASE=http://localhost:9321
# 弹幕 API Token默认: 87654321
DANMAKU_API_TOKEN=87654321
```
**注意**
- 环境变量配置的是服务端地址,不是浏览器端
- 如果 danmu_api 和 LunaTV 在同一台机器,使用默认配置即可
- 如果在不同机器,请使用完整的 URL`http://192.168.1.100:9321`
## 功能特性
### 1. 弹幕选项卡
- 位置:视频播放页面,在"选集"和"换源"选项卡之上
- 功能:
- 搜索动漫弹幕
- 浏览搜索结果
- 选择剧集并加载弹幕
- 显示当前选择的弹幕信息
### 2. 自动搜索弹幕
- 视频播放时自动根据视频标题搜索并加载弹幕
- 自动记忆上次选择的弹幕源
- 根据当前集数智能匹配对应的弹幕
### 3. 弹幕播放器控制
在播放器设置菜单中提供以下弹幕控制选项:
#### 弹幕开关
- 一键开启/关闭弹幕显示
#### 弹幕不透明度
- 10%、25%、50%、75%、100% 五档可选
- 默认75%
#### 弹幕字体大小
-20px
-25px默认
-30px
- 特大35px
#### 弹幕速度
- 很慢、慢(默认)、正常、快、很快
### 4. 弹幕记忆功能
- 自动记忆每个视频的弹幕选择
- 下次播放同一视频时自动加载上次选择的弹幕
- 最多保存 100 个视频的弹幕选择记录
## 使用方法
### 手动搜索和选择弹幕
1. 打开视频播放页面
2. 点击"弹幕"选项卡
3. 在搜索框输入动漫名称
4. 点击"搜索"按钮
5. 在搜索结果中选择对应的动漫
6. 在剧集列表中选择当前集数
7. 弹幕会自动加载到播放器
### 自动搜索弹幕
- 视频播放时,系统会自动根据视频标题搜索弹幕
- 如果找到匹配的弹幕,会自动加载到播放器
- 如果有记忆的弹幕选择,会优先使用记忆的选择
### 控制弹幕显示
1. 点击播放器右下角的设置按钮
2. 在设置菜单中找到"弹幕开关"
3. 点击切换弹幕显示/隐藏
4. 可调整弹幕不透明度、字体大小、速度等参数
## 技术实现
### 架构设计
弹幕功能采用后端代理模式,所有弹幕请求通过 Next.js API 路由转发到 danmu_api
```
前端组件 → Next.js API 路由 (代理) → danmu_api 服务 → 返回数据
```
**优点**
- 前端不直接暴露 danmu_api 地址
- 避免 CORS 跨域问题
- 可在后端实现缓存和请求控制
- 更好的安全性
### 集成的文件
1. **类型定义**
- `src/lib/danmaku/types.ts` - 弹幕相关的类型定义
2. **前端 API 封装**
- `src/lib/danmaku/api.ts` - 弹幕 API 客户端(调用本地代理)
3. **后端代理路由**
- `src/app/api/danmaku/search/route.ts` - 搜索动漫代理
- `src/app/api/danmaku/episodes/route.ts` - 获取剧集列表代理
- `src/app/api/danmaku/comment/route.ts` - 获取弹幕代理
- `src/app/api/danmaku/match/route.ts` - 自动匹配代理
4. **弹幕管理面板**
- `src/components/DanmakuPanel.tsx` - 弹幕搜索和选择界面
5. **修改的文件**
- `src/components/EpisodeSelector.tsx` - 添加弹幕选项卡
- `src/app/play/page.tsx` - 集成弹幕到播放器
### 使用的插件
- `artplayer-plugin-danmuku` - ArtPlayer 官方弹幕插件
### 弹幕数据流
```
前端: 视频标题 → 调用 /api/danmaku/search
后端代理: → 转发到 danmu_api
danmu_api: 搜索弹幕 → 返回动漫列表
前端: 选择动漫 → 调用 /api/danmaku/episodes
后端代理: → 转发到 danmu_api
danmu_api: → 返回剧集列表
前端: 选择剧集 → 调用 /api/danmaku/comment
后端代理: → 转发到 danmu_api
danmu_api: → 返回弹幕数据
前端: 转换格式 → 加载到播放器 → 显示弹幕
```
## 注意事项
1. **danmu_api 服务必须运行**
- 弹幕功能依赖 danmu_api 服务
- 确保服务在配置的地址和端口上运行
- 后端代理会自动转发请求,前端无需配置
2. **网络连接**
- LunaTV 服务器必须能够访问 danmu_api 服务
- 如果 danmu_api 在其他机器,确保网络可达
- 检查防火墙和端口开放情况
3. **环境变量配置**
- 配置在后端(`.env.local`),不是前端
- 修改配置后需要重启 Next.js 服务器
- 可参考 `.env.example` 文件
4. **弹幕数据源**
- 弹幕数据来自多个视频平台
- 部分视频可能没有匹配的弹幕
- 可在 danmu_api 中配置数据源优先级
5. **性能考虑**
- 弹幕数量较多时可能影响性能
- 可通过设置菜单调整弹幕显示数量
- 后端代理可添加缓存机制(未来实现)
## 常见问题
### Q1: 弹幕无法显示?
**检查项:**
1. danmu_api 服务是否正常运行?
2. 浏览器控制台是否有错误信息?
3. 是否有匹配的弹幕数据?
4. 弹幕开关是否开启?
### Q2: 弹幕搜索失败?
**可能原因:**
1. danmu_api 服务未启动
2. 后端无法连接到 danmu_api网络问题
3. 环境变量配置错误(检查 `.env.local`
4. 视频标题与弹幕库不匹配
**调试方法:**
1. 检查浏览器 Network 标签,查看 `/api/danmaku/search` 请求
2. 检查服务器日志,查看后端转发是否成功
3. 直接访问 danmu_api 测试是否正常:`http://localhost:9321/api/v2/search/anime?keyword=测试`
### Q3: 如何清除弹幕记忆?
打开浏览器开发者工具,在 Console 中执行:
```javascript
localStorage.removeItem('danmaku_memories');
```
### Q4: 如何重置弹幕设置?
在 Console 中执行:
```javascript
localStorage.removeItem('danmaku_settings');
```
## 未来改进方向
1. 支持弹幕发送功能
2. 添加弹幕过滤规则编辑界面
3. 支持更多弹幕数据源
4. 弹幕显示效果优化
5. 弹幕高级搜索功能
## 相关资源
- [danmu_api 项目](D:\projects\danmu_api)
- [ArtPlayer 文档](https://artplayer.org)
- [artplayer-plugin-danmuku 文档](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-danmuku)
---
**版本**: 1.0
**最后更新**: 2025-12-01