收起左侧

飞牛弹幕增强docker版

0
回复
67
查看
[ 复制链接 ]

0

主题

2

回帖

0

牛值

江湖小虾

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 内跳转自动重新注入

QQ20260528-172918.png

QQ20260528-172947.png

QQ20260528-172955.png

实现原理

**──────────────**      **───────────────────────**      **──────────────**
**  浏览器 / TV  **      **   danmaku-proxy       **      **  飞牛影视     **
**              **      **   (Docker)            **      **  (fnOS)      **
**  访问 :3000  **─────→**                       **─────→**  :5666       **
**              **      **  ① 拦截页面请求        **      **              **
**              ** HTML **  ② 去掉缓存头          ** HTML**  返回原始页面  **
**  拿到注入后的 **◄─────**  ③ 注入弹幕脚本        **◄─────**              **
**  HTML 页面   **      **  ④ 透传视频流/API/资源  **      **──────────────**
**              **      **                       **
**  弹幕脚本运行 **      **                       **      **──────────────**
**  请求弹幕数据 **─────→**  /dm-api/* 转发       **─────→**  danmu-api   **
**              ** JSON **                       ** JSON **  :9321       **
**  渲染弹幕    **◄─────**                       **◄─────**              **
**──────────────**      **───────────────────────**      **──────────────**

为什么需要代理?

浏览器直接访问飞牛时,无法向页面注入弹幕脚本。通过反向代理中转:

  1. 浏览器请求页面 → 代理转给飞牛 → 飞牛返回 HTML
  2. 代理在 HTML 的 </head> 前插入 <script>(弹幕脚本)
  3. 修改后的 HTML 返回给浏览器
  4. 视频流、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_URLDM_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 匹配弹幕。匹配成功后左下角会显示状态提示和弹幕数量。

手动搜索

  1. 点击播放器右上角的「弹幕」按钮
  2. 在搜索框输入动漫名称,点「搜索」
  3. 从搜索结果中选择动漫
  4. 选择具体集数,点击加载

弹幕设置

点击「弹幕」按钮 → 切换到「⚙ 设置」标签:

设置项 说明 范围
弹幕开关 全局开关 开/关
透明度 弹幕透明度 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


收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则