基于 Cloudflare Workers 部署的 bilibili 视频直链、视频信息、直播流、番剧、弹幕等解析服务。 使用 Cloudflare CDN 响应缓存 + Edge Cache (边缘节点缓存) + Workers KV + Cookies 多级缓存,根据视频时长动态计算缓存时间,最大化利用缓存提高解析速度。 内置请求限流,并支持根据请求地区自动切换 CDN,支持 VRChat (VizVid / ProTV)。
Important
bili.nekocha.top为测试站点,不保证随时有效,请勿频繁请求或者用于批量爬虫
- 信息: https://bili.nekocha.top
- 视频播放: https://bili.nekocha.top/video/BV1UT42167xb
- 视频信息: https://bili.nekocha.top/video/BV1UT42167xb?type=json
- 直播播放: https://bili.nekocha.top/live/5055636
- 直播信息: https://bili.nekocha.top/live/5055636?type=json
- 视频播放 - 通过 BV 号重定向(302)到视频直链接,支持多 P(分P)视频,支持 MP4 单文件直链与 DASH 多音视频流,支持
html5/pc/app三平台播放源 - 视频信息 - 返回视频标题、封面、UP 主、分 P、时长等解析信息
- 直播信息与直播流 - 获取直播间信息,并解析直播流地址(HLS / FLV / FMP4 / TS)
- 番剧 - 支持番剧/影视信息、分集列表解析
- 弹幕 - 支持以 XML 或 JSON 形式获取视频弹幕
- 封面 - 支持视频封面图片获取
- 视频字幕 - 获取视频 CC 字幕,支持字幕信息、SRT 与原始 JSON 输出,可按语言筛选(需要服务端登录)
- 搜索 - 支持视频、UP 主、直播间搜索,支持分页与排序
- 用户合集 - 获取 UP 主某个合集(UGC 合集)下的视频列表
- 用户收藏夹 - 获取用户收藏夹信息与其中的视频列表,支持关键词过滤与分页
- 自动 CDN 换源 - 根据cfcolo对不同请求地区自动匹配最优 CDN (可通过参数强制指定,CDN策略可配置),优化视频加载速度
- 动态缓存 - 视频信息和播放地址分离缓存,依据视频时长与播放地址有效期动态计算缓存时间;短时间多人播放只解析一次
- 多级缓存 - Cloudflare CDN 响应缓存 → Edge Cache(边缘节点缓存)→ Workers KV → Cookies 缓存,使用
ctag版本化缓存键,配合缓存数据校验保证数据有效性 - 绕过 IP 限制 - 通过 Vercel Serverless Functions 代理解析,绕过 B 站对 Cloudflare IP 的限制
-
部署后访问速度慢或者超时 请考虑对您的Cloudflare Workers进行IP优选或者域名优选
-
视频播放速度慢,加载不出来 请确认是否使用海外的视频cdn,例如aliov,cosov等以ov结尾的cdn为海外服务器,您可以在视频解析连接后使用cdn参数指定cdn,或者通过配置服务器环境变量为特定地区分配默认cdn (使用Vercel等代理服务器时因为请求的IP在海外,b站默认会分配海外的CDN服务器)
-
在VRCHAT里播放后拖动进度条视频卡住 请确保您的播放器能够正确解码视频 (推荐使用AVPro) 不同CDN对于VRCHAT发起的包含Range字段请求响应可能不同,推荐使用alib或cos,国外推荐aliov
请求依次经过 Cloudflare CDN 响应缓存 → Edge Cache(边缘节点缓存)→ Workers KV → Cookies 缓存 四级缓存,可通过响应头判断命中的层级:
| 情况 | cf-cache-status |
x-server-cache-status |
x-bcrypto-cookies-cache |
说明 |
|---|---|---|---|---|
| Cloudflare CDN 命中 | HIT |
edge;hit="UNUSED",kv;hit="UNUSED" |
- | cloudflare 响应缓存,内部 Worker 未被唤醒 |
| CF 未命中,Edge 命中 | MISS 或 EXPIRED |
edge;hit="HIT",kv;hit="UNUSED" |
- | 使用 edge 缓存 |
| CF 未命中,Edge 未命中,KV 命中 | MISS 或 EXPIRED |
edge;hit="MISS",kv;hit="HIT" |
- | 使用 kv 缓存并回填 edge 缓存 |
| 前三层全未命中,Worker 执行,Cookies 命中 | MISS 或 EXPIRED |
edge;hit="MISS",kv;hit="MISS" |
HIT |
使用缓存 cookies 解析 |
| 前三层全未命中,Worker 执行,Cookies 未命中 | MISS 或 EXPIRED |
edge;hit="MISS",kv;hit="MISS" |
MISS |
获取 cookies 并解析 |
Important
部分路由支持从url参数自动解析所需要的参数,当提供url参数时,其余路径参数和query参数(bvid,p)将会被忽略
将 BV 号拼接在 /video/{bvid} 后,请求会 302 重定向 到视频直链接,可直接用于 VRChat 播放器或任意视频播放器:
curl -I "https://your.workers.domain/video/BV1UT42167xb"
# HTTP/1.1 302 Found
# Location: https://upos-sz-mirrorali.bilivideo.com/...多 P 视频:在 BV 号后追加分 P 序号:
curl -I "https://your.workers.domain/video/BV1LCzTByEBY/2"指定播放平台、清晰度与 CDN:
# platform: html5(默认) / pc / app
curl -I "https://your.workers.domain/video/BV1UT42167xb?platform=app"
# qn: 清晰度,支持 6/16/32/64/74/80/100/112/116/120/125/126/127/129(默认 64)
curl -I "https://your.workers.domain/video/BV1UT42167xb?qn=80"
# cdn: 指定换源,查看 /cdn 获取支持的 CDN
curl -I "https://your.workers.domain/video/BV1UT42167xb?cdn=aliov"获取 DASH 播放源:添加 format=dash 返回 DASH 多音视频流(视频/音频/杜比/无损,均含 CDN 换源),format=dash 时无论 type 为何均返回 JSON:
curl "https://your.workers.domain/video/BV1UT42167xb?format=dash"Note
服务端未登录时,qn 会被限制到最高 80(1080P),且 platform=html5 + format=dash 不可用(可改用 platform=pc 或 app)。配置自定义 cookies 后即可解锁更高清晰度与 html5 DASH。
添加 type=json 参数即可返回完整解析信息:
curl "https://your.workers.domain/video/BV1UT42167xb?type=json"{
"code": 200,
"message": "Success",
"data": {
"bvid": "BV1mNf3BREgj",
"aid": 116103686725599,
"cid": 36182625644,
"url": "https://upos-sz-mirrorali.bilivideo....",
"pic": "http://i1.hdslb.com/bfs/archive/7c...9f.jpg",
"duration": 126,
"info_source": "view",
"infoSource": "view",
"title": "【重音テト/中译版】...",
"owner": {
"mid": 2705870,
"name": "...",
"face": "https://i2.hdslb.com/bfs/face/2a...67.jpg"
},
"desc": "...",
"parts": [
{
"page": 1,
"firstFrame": "https://i1.hdslb.com/bfs/archive/...",
"duration": 126,
"partTitle": "...",
"cid": 36182625644,
"ctime": 1720000000
}
],
"play": {
"isDash": false,
"duration": 126,
"cid": 36182625644,
"urlExpirationAt": 1783415020,
"platform": "html5",
"format": "mp4",
"url": "https://upos-sz-mirrorali.bilivideo....",
"backupUrl": ["https://upos-sz-mirroraliov.bilivideo...."],
"quality": 64
}
}
}DASH 格式(format=dash):play 内返回 dash 多音视频流字段(minBufferTime 及 video / audio / dobly / flac 数组,每项含 baseUrl / backupUrl / bandwidth / mime / codecs / quality 等),各流地址已自动完成 CDN 换源:
{
"code": 200,
"message": "Success",
"data": {
"...": "视频信息同上",
"play": {
"isDash": true,
"duration": 126,
"cid": 36182625644,
"urlExpirationAt": 1783415020,
"platform": "html5",
"format": "dash",
"dash": {
"minBufferTime": 1.5,
"video": [
{
"baseUrl": "https://upos-sz-mirrorali.bilivideo....",
"backupUrl": [],
"bandwidth": 780000,
"mime": "video/mp4",
"width": 1920,
"height": 1080,
"frameRate": 30,
"codecid": 7,
"codecs": "avc1.64002A",
"quality": 80
}
],
"audio": [
{
"quality": 30280,
"baseUrl": "https://upos-sz-mirrorali.bilivideo....",
"backupUrl": [],
"bandwidth": 132000,
"mime": "audio/mp4",
"codecs": "mp4a.40.2",
"codecid": 2
}
],
"dobly": null,
"flac": null
}
}
}
}/live/{roomId} 默认为流重定向,添加 type=json 返回直播间信息与解析到的直播流地址:
curl "https://your.workers.domain/live/5055636?type=json"{
"code": 200,
"message": "Success",
"data": {
"title": "直播间标题",
"uid": 296909317,
"roomId": 5055636,
"shortId": 0,
"attention": 123456,
"online": 789,
"description": "直播间简介",
"areaId": 371,
"areaName": "虚拟主播",
"background": "https://i0.hdslb.com/bfs/live/...",
"cover": "https://i0.hdslb.com/bfs/live/...",
"keyframe": "https://i0.hdslb.com/bfs/...",
"liveTime": "2026-08-25 12:00:00",
"isLiving": true,
"stream": {
"urls": [
{
"url": "https://d1--cn-gotcha104.bilivideo.com/live-bvc/...",
"qn": 250,
"format": "fmp4",
"codec": "avc"
}
],
"platform": "xlive"
}
}
}请求 /live/{roomId} 会 302 重定向 到当前直播流地址,可直接用于播放器播放:
curl -I "https://your.workers.domain/live/5055636"
# HTTP/1.1 302 Found
# Location: https://d1--cn-gotcha104.bilivideo.com/live-bvc/...支持指定解析平台、编码、封装与协议:
# platform: xlive(默认,功能更全) / h5
# codec: avc(默认) / hevc
# format: fmp4(默认) / flv / ts
# protocol:hls(默认) / stream
curl -I "https://your.workers.domain/live/5055636?platform=xlive&codec=hevc&format=fmp4&protocol=hls"
# 强制指定海外流(默认根据请求地区自动选择 cn/ov)
curl -I "https://your.workers.domain/live/5055636?ov=true"所有接口均支持 GET 请求,可通过路径参数或查询参数传入,返回 JSON 结构为:
{ "code": 200, "message": "Success", "data": {} }解析视频播放链接或视频信息。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
bvid |
string | - | BV 号,如 BV1UT42167xb |
p |
number | 1 |
分 P 序号,0 等价于 1 |
type |
video | json |
video |
video:302 重定向到直链;json:返回解析结果(仅 format=mp4 时生效,format=dash 恒返回 JSON) |
format |
mp4 | dash |
mp4 |
mp4:单文件视频直链(支持 302 重定向);dash:DASH 多音视频流(视频/音频/杜比/无损,仅返回 JSON) |
platform |
html5 | pc | app |
html5 |
html5/pc:Web 播放源,无需 Referer;app:iOS/TV 播放源,播放时需携带对应 UA/Referer,否则 403 |
cdn |
string | 自动 | 强制换源,查看 /cdn 获取可用 CDN 名称 |
qn |
number | 64 |
清晰度,支持 6/16/32/64/74/80/100/112/116/120/125/126/127/129 |
url |
string | - | bilibili 视频链接,自动提取 BV 号与分 P,支持 b23.tv 短链 |
# url 参数传参,等价于 /video/{bvid}
curl "https://your.workers.domain/video?url=https://www.bilibili.com/video/BV1mNf3BREgj"获取视频封面。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
bvid |
string | - | BV 号 |
url |
string | - | bilibili 视频链接 |
type |
url | redirect |
redirect |
url:返回封面直链文本;redirect:302 重定向到封面 |
curl "https://your.workers.domain/cover/BV1UT42167xb?type=url"获取视频弹幕。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
bvid |
string | - | BV 号 |
p |
number | 1 |
分 P 序号,0 等价于 1 |
url |
string | - | bilibili 视频链接 |
type |
xml | json |
xml |
xml:返回标准 XML;json:返回结构化 JSON(含 danmakus[],字段含时间/模式/字号/颜色/发送时间/类型/用户哈希等) |
curl "https://your.workers.domain/danmaku/BV1UT42167xb"
curl "https://your.workers.domain/danmaku/BV1UT42167xb?type=json"获取视频 CC 字幕。需要服务端登录(配置自定义 cookies),否则返回提示信息。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
bvid |
string | - | BV 号 |
p |
number | 1 |
分 P 序号,0 等价于 1 |
url |
string | - | bilibili 视频链接 |
lang |
string | - | 指定字幕语言(如 zh-Hans);省略时返回该视频全部字幕信息 |
type |
srt | json | info |
info |
info:字幕信息;srt:转换为 SRT 文本;json:返回原始字幕 JSON(需配合 lang) |
# 获取全部字幕信息
curl "https://your.workers.domain/subtitle/BV1UT42167xb"
# 获取指定语言的 SRT
curl "https://your.workers.domain/subtitle/BV1UT42167xb?lang=zh-Hans&type=srt"返回可用的视频 CDN 列表(upos 系列):
{
"code": 200,
"message": "Success",
"data": {
"ali": "upos-sz-mirrorali.bilivideo.com",
"aliov": "upos-sz-mirroraliov.bilivideo.com",
"alib": "upos-sz-mirroralib.bilivideo.com"
}
}获取直播间信息并解析直播流。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
roomId |
number | - | 房间号(支持短号别名) |
url |
string | - | live.bilibili.com 直播链接 |
type |
stream | json |
stream |
stream:302 重定向到直播流;json:返回直播间信息 + 流地址 |
platform |
xlive | h5 |
xlive |
解析平台,xlive 支持更多格式 |
codec |
avc | hevc |
avc |
编码(仅 xlive) |
format |
fmp4 | flv | ts |
fmp4 |
封装格式(仅 xlive) |
protocol |
hls | stream |
hls |
拉流协议(仅 xlive) |
ov |
boolean | 自动 | true:强制使用海外(ov)流;false:强制国内(cn)流;默认按请求地区自动选择 |
curl "https://your.workers.domain/live?url=https://live.bilibili.com/5055636"获取番剧/影视信息。ssid(剧集 ss)、mdid(影视 md)、epid(单集 ep)三选一,可省略前缀。
curl "https://your.workers.domain/bangumi/info?epid=ep378374"
curl "https://your.workers.domain/bangumi/info?ssid=37498"
curl "https://your.workers.domain/bangumi/info?mdid=28231832"获取番剧分集列表。ssid / mdid 二选一。
curl "https://your.workers.domain/bangumi/episodes?ssid=37498"获取 UP 主某个 UGC 合集下的视频列表。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
mid |
number | - | 用户 mid |
sid |
number | - | 合集 id |
page |
number | 1 |
页码 |
pageSize |
number | 30 |
每页数量 |
curl "https://your.workers.domain/user/archieve/296909317/3091395?page=1&pageSize=30"获取用户收藏夹信息与其中的视频列表。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
fid |
number | - | 收藏夹 id |
keyword |
string | - | 在收藏夹内搜索关键词 |
page |
number | 1 |
页码 |
pageSize |
number | 40 |
每页数量 |
curl "https://your.workers.domain/user/fav/220737630?page=1&pageSize=40"搜索视频、UP 主或直播间。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
type |
video | up | live |
video |
搜索类型 |
keyword |
string | - | 搜索关键词(必填) |
page |
number | 1 |
页码,0 等价于 1 |
pageSize |
number | 20 |
每页数量 |
order |
string | - | 排序方式(由 B 站接口决定) |
curl "https://your.workers.domain/search/video?keyword=VRChat"
curl "https://your.workers.domain/search/up?keyword=宇多田光"
curl "https://your.workers.domain/search/live?keyword=VRChat"返回请求出口 IP 所属地区。
curl "https://your.workers.domain/ipregion"| 头 | 说明 |
|---|---|
cf-cache-status |
Cloudflare CDN 缓存状态(HIT / MISS / EXPIRED) |
X-Server-Cache-Status |
Worker 内部缓存状态,格式 edge;hit="...",kv;hit="...";命中为缓存 key 的 MD5 前 6 位,未命中为 MISS,未使用为 UNUSED |
X-Cache-Version |
缓存数据版本(CONFIG_CacheDataVersion) |
X-Server-Version |
服务端版本号 |
X-Server-Online |
服务端是否处于登录态(true / false) |
X-Min-Expiration |
本次响应涉及缓存数据的最早过期时间(秒级时间戳) |
X-Bcrypto-Cookies-Cache |
Cookies 缓存状态(HIT / MISS) |
X-Bcrypto-Sign-Time |
生成 cookies 签名时的时间戳 |
X-Bili-CDN |
实际使用的播放 CDN 域名 |
X-CDN-Strategy |
命中的 CDN 策略(大洲,地区,CDN 名) |
X-Bili-Bvid |
视频播放重定向对应的 BV 号 |
X-Stream-Server |
直播流服务器(cn / ov) |
X-Stream-Parse-Platform |
直播解析平台(xlive / h5) |
X-Stream-Format / X-Stream-Codec / X-Stream-Protocol |
直播流格式/编码/协议(xlive) |
X-Url-Cid / X-Url-Part |
视频播放地址对应的 cid / 分 P |
Ctag |
版本化缓存键(用于 CDN 响应缓存);存在时响应可被 Cloudflare CDN 缓存 |
可参考 Proxy-Vercel 使用Vercel部署解析代理 这可能会影响后续的配置和解析的IP地址位置,确保您的代理服务器可以转发请求且可以被Cloudflare Workers访问
npm install参考 Wrangler 配置文档。
Tip
您可以查看项目根目录下的warngler.example.jsonc的配置示范,或者您可以重命名删除.example后填入信息直接部署
绑定 Workers KV 存储库:
配置请求限流(可选,需在 Cloudflare 后台创建 Rate Limiting 策略):
"ratelimits": [
{
"name": "RATE_LIMITER",
"namespace_id": "100",
"simple": {
"limit": 20,
"period": 10
}
}
]配置双 Worker 导出(缓存优化):默认入口负责限流、地区识别与生成 ctag,并调用启用了缓存的 BiliAPIEntryPoint。启用后 Cloudflare 可直接命中缓存返回响应,不再唤醒内部 Worker:
"exports": {
"default": {
"type": "worker",
"cache": { "enabled": false }
},
"BiliAPIEntryPoint": {
"type": "worker",
"cache": { "enabled": true }
}
},
"placement": {
"mode": "smart"
}在 wrangler.jsonc 的 vars 中配置环境变量:
| 变量 | 默认值 | 说明 |
|---|---|---|
CONFIG_EnableCustomCookies |
false |
允许使用配置的自定义cookie(需要填写 CONFIG_CustomCookies);启用且填写后服务端视为登录态 |
CONFIG_CustomCookies |
- | 自定义cookies,例如 SESSDATA=123456...,获取高清视频流、DASH(html5)以及字幕文件需要持有登录状态的cookies |
CONFIG_CacheValidation |
true |
启用缓存数据校验 |
CONFIG_CacheDataVersion |
5 |
缓存数据版本号,修改后所有缓存层级的 key 随之变化(可用于强制刷新缓存) |
CONFIG_ResponseWorkerCaching |
true |
启用基于 ctag 的 Cloudflare CDN 响应缓存 |
CONFIG_ResponseMaxCacheTime |
3600 |
CDN 响应缓存最大时间(秒) |
CONFIG_CookiesSignCacheTime |
3600 |
匿名 cookies 缓存时间(秒) |
CONFIG_UseProxyFetch |
true |
使用代理服务器 |
CONFIG_ProxyToken |
- | 代理服务器 Token(Bearer 认证) |
CONFIG_ProxyServerUrl |
- | 代理服务器地址 |
CONFIG_ProxyFetchTimeout |
10000 |
代理超时时间(毫秒) |
CONFIG_ProxyFetchMaxRetries |
3 |
代理请求失败最大重试次数(指数退避) |
CONFIG_BiliVideoPlayUrlCacheTime |
5400 |
视频播放地址最大缓存时间(秒) |
CONFIG_BiliBangumiPlayUrlCacheTime |
5400 |
番剧播放地址最大缓存时间(秒) |
CONFIG_BiliLiveCacheTime |
60 |
直播信息缓存时间(秒) |
CONFIG_BiliVideoInfoCacheTime |
86400 |
视频信息缓存时间(秒) |
CONFIG_BiliVideoSubtitlesCacheTime |
1800 |
视频字幕缓存时间(秒) |
CONFIG_BiliBangumiEpisodesCacheTime |
604800 |
番剧分集缓存时间(秒) |
CONFIG_BiliBangumiInfoCacheTime |
604800 |
番剧信息缓存时间(秒) |
CONFIG_UGCSeasonArchieveCacheTime |
86400 |
用户合集缓存时间(秒) |
CONFIG_BiliUserFavCacheTime |
3600 |
用户收藏夹缓存时间(秒) |
CONFIG_BiliDanmakuCacheTime |
1800 |
弹幕缓存时间(秒) |
CONFIG_BiliSearchCacheTime |
360 |
搜索缓存时间(秒) |
CONFIG_VideoCDNStrategy |
AS,CN,alib;*,*,aliov |
CDN 策略组,格式 大洲,地区,CDN名;...,* 表示任意匹配,优先级高于通用规则。例如 AS,CN,alib;*,*,aliov |
SERVER_VERSION |
- | 服务端版本号,会写入 X-Server-Version 响应头 |
"vars": {
"CONFIG_EnableCustomCookies": false,
"CONFIG_CustomCookies": "SESSDATA=...",
"CONFIG_CacheValidation": true,
"CONFIG_CacheDataVersion": 5,
"CONFIG_ResponseWorkerCaching": true,
"CONFIG_ResponseMaxCacheTime": 3600,
"CONFIG_CookiesSignCacheTime": 3600,
"CONFIG_UseProxyFetch": true,
"CONFIG_ProxyToken": "Your Proxy Token",
"CONFIG_ProxyServerUrl": "Your Proxy Server URL",
"CONFIG_ProxyFetchMaxRetries": 3,
"CONFIG_ProxyFetchTimeout": 10000,
"CONFIG_BiliVideoPlayUrlCacheTime": 5400,
"CONFIG_BiliBangumiPlayUrlCacheTime": 5400,
"CONFIG_BiliLiveCacheTime": 60,
"CONFIG_BiliVideoInfoCacheTime": 86400,
"CONFIG_BiliVideoSubtitlesCacheTime": 1800,
"CONFIG_BiliBangumiEpisodesCacheTime": 604800,
"CONFIG_BiliBangumiInfoCacheTime": 604800,
"CONFIG_UGCSeasonArchieveCacheTime": 86400,
"CONFIG_BiliUserFavCacheTime": 3600,
"CONFIG_BiliDanmakuCacheTime": 1800,
"CONFIG_BiliSearchCacheTime": 360,
"CONFIG_VideoCDNStrategy": "AS,CN,alib;*,*,aliov",
"SERVER_VERSION": "3.2.5.20260826"
}npm run dev本地开发时可用 .env.dev 加载环境变量。
npm run deploy部署完成后访问,https://your.workers.domain/ 如果可以显示信息页面即部署完成。
使用本项目即表示您已阅读并同意以下条款:
- 学习用途:本项目仅供开发者技术学习和研究使用
- 禁止商用:严禁将本项目用于搭建公开的大规模视频代理服务
- 隐私保护:本项目不会收集任何个人信息,所有解析均在未登录状态下完成
- 版权声明:视频内容版权归 Bilibili 及原作者所有,请尊重版权
- 使用规范:严禁非法分发视频,严禁使用本项目进行数据爬取
- 风险告知:
- 使用者自行承担因使用本项目导致的账号/IP 封禁风险
- 包括但不限于:Vercel、Cloudflare、Bilibili 及其相关服务供应商
- 非盈利:本项目为开源项目,不进行任何盈利行为