大家从采集站看爱优腾的视频的时候,是否为无法一同看到弹幕而忧愁,其实我们可以通过爬虫从爱优腾抓取弹幕内容,添加到播放器中,从而实现沉浸式弹幕观看。

原理就是多数的采集网站通常会自带豆瓣的影视 ID,那么我们就可以通过这个 ID 确定视频的官方来源,通过豆瓣抓取对应的影视官方的视频链接,然后再通过该链接抓取到对应的弹幕。

我们这里有两个例子,都是魔改的其他开源项目:

基于 python 的弹幕抓取项目

项目仓库

这个爬虫方案强烈建议直接部署在本地,或者国内的服务器上。因为我测试部署在国外的平台都会导致抓取不到链接,或者抓取到错误的链接的情况。

部署方式

本项目采用 docker 部署:

1
2
3
4
5
docker run -d \
--name fetch_danmu \
--restart unless-stopped \
-p 8080:8080 \
ghcr.io/seqcrafter/fetch_danmu:latest

API 接口

假设部署在本地,接口地址为:http://127.0.0.1:8080/douban_id,参数为:

  • douban_id : 豆瓣的 ID
  • episode_number : 剧集集数

本地 curl 的调用示例:

1
2
## 子夜归第一集弹幕
curl "http://127.0.0.1:8080/douban_id?douban_id=36481469&episode_number=1"

返回格式中的 danmuku 数据可以直接传给播放器例如ZyPlayer或者LibreTV等使用。

1
2
3
4
5
6
7
8
9
{
"code": 0,
"name": "36172040",
"danmu": 13223,
"danmuku": [
[0.0, "right", "#FFFFFF", "25px", "恭迎师祖出山"],
[0.0, "right", "#FFFFFF", "25px", "来支持献鱼啦"]
]
}

基于 nodejs 的弹幕抓取项目

项目仓库

这个可以部署到 vercel 或者 netlify, 部署到远端更方便

部署方式

例如部署到 netlify:

直接 fork 本仓库,然后在 netlify 中创建项目,一键开启即可.

API 接口

假设部署在本地,接口地址为:https://{你的部署项目名}.netlify.app/api/v2/douban,参数为:

  • douban_id : 豆瓣的 ID
  • episode_number : 剧集集数

本地 curl 的调用示例:

1
2
## 子夜归第一集弹幕
curl "https://{你的部署项目名}.netlify.app/api/v2/douban?douban_id=36481469&episode_number=1"

返回格式中的 danmuku 数据可以直接传给播放器例如ZyPlayer或者LibreTV等使用。

1
2
3
4
5
6
7
8
9
10
{
"code": 0,
"success": "true",
"errorMessage": "",
"danmu": 1230,
"danmuku": [
[0.0, "right", "#FFFFFF", "25px", "恭迎师祖出山"],
[0.0, "right", "#FFFFFF", "25px", "来支持献鱼啦"]
]
}

想试试?

打开我部署的 LibreTV 项目:

按照图上设置,首先打开资源开关,然后在弹幕设置中填入你部署好的 API 地址,名称随便写,地址写https://{你的部署项目名}.netlify.app/api/v2/douban

随便打开一个视频测试一下吧!

警告

我部署的libreTV的资源调用是有限的,请不要把这个站点当做你的观看站点,如有需要,请自行部署

一个自带弹幕的视频播放应用-lunaTV

部署方法(zeabur+upstash)

zeabur 是一站式云端部署平台,使用预构建的 Docker 镜像可以快速部署,无需等待构建。

部署步骤:

添加 LunaTV 服务
  • 点击 “Add Service” > “Docker Images”
  • 输入镜像名称:ghcr.io/szemeng76/lunatv:latest
  • 配置端口:3000 (HTTP)
添加 upstash 服务
  • 访问 upstash.com
  • 注册账号并创建新的 Redis 数据库
  • 选择区域(建议选择离你最近的区域)
  • 复制 REST URL 和 REST TOKEN
配置环境变量

在 LunaTV 服务的环境变量中添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 必填:管理员账号
USERNAME=admin
PASSWORD=your_secure_password

# 必填:存储配置
NEXT_PUBLIC_STORAGE_TYPE=upstash
UPSTASH_URL=https://your-redis-instance.upstash.io
UPSTASH_TOKEN=AxxxxxxxxxxxxxxxxxxxxxxxxxxxQ==

# 可选:站点配置
SITE_BASE=https://your-domain.zeabur.app
NEXT_PUBLIC_SITE_NAME=LunaTV Enhanced
ANNOUNCEMENT=欢迎使用 LunaTV Enhanced Edition

# 可选:豆瓣代理配置(推荐)
NEXT_PUBLIC_DOUBAN_PROXY_TYPE=cmliussss-cdn-tencent
NEXT_PUBLIC_DOUBAN_IMAGE_PROXY_TYPE=cmliussss-cdn-tencent
设置访问域名(必须)
  • 在 LunaTV 服务页面,点击 “Networking” 或 “网络” 标签
  • 点击 “Generate Domain” 生成 Zeabur 提供的免费域名(如 xxx.zeabur.app)
  • 或者绑定自定义域名:
    • 点击 “Add Domain” 添加你的域名
    • 按照提示配置 DNS CNAME 记录指向 Zeabur 提供的目标地址
  • 设置完域名后即可通过域名访问 LunaTV
注意

部署好的网站为空壳,需要你进入管理员设置自行添加视频源!

演示站: