fn-danmu - 飞牛影视弹幕增强
为飞牛影视(fnOS)添加弹幕支持,基于 danmu-api 弹幕数据源,通过反向代理自动注入弹幕脚本到播放页面。
git地址:https://github.com/rgcaafe/fn-danmu
浏览器插件版:https://club.fnnas.com/forum.php?mod=viewthread&tid=64164&page=1&extra=#pid294542
效果展示
播放视频时自动匹配弹幕,弹幕从右向左滚动飘过播放器画面。
支持 PC 浏览器 / TV 浏览器 / 任何带浏览器的设备,无需安装任何扩展或 App。
功能列表:
- 自动匹配:根据视频标题 + 季/集信息自动匹配弹幕
- 手动搜索:按动漫名搜索 → 选集 → 加载弹幕
- 换集自动加载
- 弹幕行避让(不重叠)
- 点击弹幕暂停 3 秒并显示时间戳
- 弹幕参数可调(字号、行间距、透明度、速度、密度、显示区域、时间偏移等)
- HTTP / HTTPS 双协议支持
- 飞牛 SPA 内跳转自动重新注入



实现原理
**──────────────** **───────────────────────** **──────────────**
** 浏览器 / TV ** ** danmaku-proxy ** ** 飞牛影视 **
** ** ** (Docker) ** ** (fnOS) **
** 访问 :3000 **─────→** **─────→** :5666 **
** ** ** ① 拦截页面请求 ** ** **
** ** HTML ** ② 去掉缓存头 ** HTML** 返回原始页面 **
** 拿到注入后的 **◄─────** ③ 注入弹幕脚本 **◄─────** **
** HTML 页面 ** ** ④ 透传视频流/API/资源 ** **──────────────**
** ** ** **
** 弹幕脚本运行 ** ** ** **──────────────**
** 请求弹幕数据 **─────→** /dm-api/* 转发 **─────→** danmu-api **
** ** JSON ** ** JSON ** :9321 **
** 渲染弹幕 **◄─────** **◄─────** **
**──────────────** **───────────────────────** **──────────────**
为什么需要代理?
浏览器直接访问飞牛时,无法向页面注入弹幕脚本。通过反向代理中转:
- 浏览器请求页面 → 代理转给飞牛 → 飞牛返回 HTML
- 代理在 HTML 的
</head> 前插入 <script>(弹幕脚本)
- 修改后的 HTML 返回给浏览器
- 视频流、WebSocket、API 等非页面请求原样透传,不影响播放
为什么需要 danmu-api?
飞牛影视本身没有弹幕数据。danmu-api 聚合了各平台的弹幕数据(B站、腾讯、爱奇艺等),提供弹幕搜索和匹配接口。本项目通过代理将浏览器端的弹幕 API 请求转发到 danmu-api 服务。
前置要求
| 组件 |
说明 |
| [Docker] + Docker Compose |
容器运行环境 |
| [飞牛影视(fnOS)] |
已部署并可访问 |
| [danmu-api] |
弹幕数据服务,已部署并可访问 |
部署方式一:使用预构建镜像(推荐)
无需克隆仓库,直接创建配置文件启动。
1. 创建目录和配置文件
bash
mkdir fn-danmaku && cd fn-danmak
创建 docker-compose.yml:
services:
danmaku-proxy:
image: coffee699/danmaku-proxy:latest
ports:
- "3000:3000"
- "3443:3443"
environment:
- FN_URL=http://192.168.10.252:5666 # 改成你的飞牛影视地址
- DM_URL=http://192.168.10.252:9321 # 改成你的 danmu-api 地址
- PORT=3000
- HTTPS_PORT=3443
volumes:
- ./certs:/app/certs
restart: unless-stopped
init: true
2. 启动
docker compose up -d
3. 确认启动成功
docker compose logs -f
看到以下内容说明正常:
[启动] 飞牛: http://192.168.10.252:5666
[启动] 弹幕: http://192.168.10.252:9321
[就绪] HTTP: http://<NAS-IP>:3000
[就绪] HTTPS: https://<NAS-IP>:3443
4. 使用
浏览器或 TV 浏览器访问 http://<NAS-IP>:3000,后续操作和直接访问飞牛一样,但会多出弹幕功能。
更新版本:
docker compose pull
docker compose up -d
部署方式二:从源码构建
1. 克隆仓库
git clone https://github.com/coffee699/fn-danmaku.git
cd fn-danmaku
2. 修改配置
cp docker-compose.yml.example docker-compose.yml
编辑 docker-compose.yml,修改 FN_URL 和 DM_URL 为你的实际地址。
3. 构建并启动
docker compose up -d --build
4. 使用
同方式一,访问 http://<NAS-IP>:3000。
更新版本:
git pull
docker compose up -d --build
环境变量
| 变量 |
说明 |
默认值 |
FN_URL |
飞牛影视地址(需带 http:// 或 https://,协议必须和飞牛实际协议一致) |
http://192.168.10.252:5666 |
DM_URL |
danmu-api 弹幕服务地址 |
http://192.168.10.252:9321 |
PORT |
代理 HTTP 端口 |
3000 |
HTTPS_PORT |
代理 HTTPS 端口(自签证书) |
3443 |
飞牛影视默认是 HTTP,除非你额外配置了 HTTPS 反向代理。协议填错会导致连接失败。
HTTPS 说明
代理同时监听 HTTP 和 HTTPS:
- HTTP(:3000):直接使用,无需额外配置
- HTTPS(:3443):首次启动时自动生成自签证书(保存在
./certs/),浏览器会提示不安全,点"继续访问"即可
如需使用自己的证书,将文件放到 ./certs/ 目录:
./certs/key.pem # 私钥
./certs/cert.pem # 证书
使用指南
自动匹配
播放视频后,脚本自动根据视频标题 + 季/集信息调用 danmu-api 匹配弹幕。匹配成功后左下角会显示状态提示和弹幕数量。
手动搜索
- 点击播放器右上角的「弹幕」按钮
- 在搜索框输入动漫名称,点「搜索」
- 从搜索结果中选择动漫
- 选择具体集数,点击加载
弹幕设置
点击「弹幕」按钮 → 切换到「⚙ 设置」标签:
| 设置项 |
说明 |
范围 |
| 弹幕开关 |
全局开关 |
开/关 |
| 透明度 |
弹幕透明度 |
0 ~ 1 |
| 显示区域 |
弹幕占屏幕高度 |
10% ~ 80% |
| 文字描边 |
黑色轮廓增强可读性 |
开/关 |
| 字号 |
弹幕文字大小 |
14 ~ 40px |
| 行间距 |
行与行之间的距离 |
1.2x ~ 3.0x |
| 滚动速度 |
滚动弹幕移动速度 |
0.5x ~ 2.5x |
| 弹幕密度 |
显示比例,降低可减少弹幕量 |
10% ~ 100% |
| 同屏上限 |
同时显示的最大弹幕条数 |
10 ~ 80 |
| 偏移量 |
时间偏移,校准弹幕与画面的同步 |
-30s ~ +30s |
设置自动保存到浏览器 localStorage,下次打开自动恢复。
交互操作
| 操作 |
效果 |
| 点击飘过的弹幕 |
暂停该弹幕 3 秒,显示时间戳 |
| 鼠标移动 |
显示弹幕按钮和控制面板 |
| 鼠标离开播放器 |
3 秒后自动隐藏 UI |
TV 端使用
TV 浏览器访问代理地址即可。弹幕设置面板的操作:
- 有蓝牙鼠标:操作体验和 PC 一致
- 仅有遥控器:遥控器模拟鼠标点击,可完成基本的开关弹幕、搜索加载等操作
常见问题
Q: 打开页面后看不到弹幕按钮?
确认是通过代理地址(:3000)访问,不是直接访问飞牛地址(:5666)。
Q: 自动匹配一直失败?
文件名可能不被 danmu-api 识别。改用手动搜索加载(弹幕按钮 → 搜索 → 选集)。
Q: 代理日志报 透传错误 或 拦截错误?
飞牛不在线或地址配置错误。确认 FN_URL 正确且飞牛正在运行。容器不会因后端离线而退出,飞牛恢复后自动正常。
Q: 视频播放几秒就报错?
检查 FN_URL 的协议(http:// 还是 https://)是否和飞牛实际协议一致。写错协议会导致代理无法正确转发视频流。
Q: 浏览器控制台看到 __DMAPI_PLACEHOLDER__ 相关错误?
使用了旧版镜像或旧版脚本。更新镜像:docker compose pull && docker compose up -d,或从源码重新构建。
项目结构
fn-danmaku/
**── README.md # 本文档
**── docker-compose.yml.example # Docker Compose 配置模板
**── Dockerfile # 镜像构建文件
**── package.json # Node.js 依赖声明
**── server.js # 反向代理服务(HTTP/HTTPS + HTML 注入 + API 转发)
**── danmaku.js # 弹幕脚本(注入到浏览器端,负责匹配/渲染/交互)
License
MIT