Skip to content

Latest commit

 

History

45 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cloudflare BiliParser API

基于 Cloudflare Workers 部署的 bilibili 视频直链、视频信息、直播流、番剧、弹幕等解析服务。 使用 Cloudflare CDN 响应缓存 + Edge Cache (边缘节点缓存) + Workers KV + Cookies 多级缓存,根据视频时长动态计算缓存时间,最大化利用缓存提高解析速度。 内置请求限流,并支持根据请求地区自动切换 CDN,支持 VRChat (VizVid / ProTV)。

MIT MIT TS LIC

Try

Important

bili.nekocha.top为测试站点,不保证随时有效,请勿频繁请求或者用于批量爬虫

Features

  • 视频播放 - 通过 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 的限制

遇到的已知问题和建议

  1. 部署后访问速度慢或者超时 请考虑对您的Cloudflare Workers进行IP优选或者域名优选

  2. 视频播放速度慢,加载不出来 请确认是否使用海外的视频cdn,例如aliov,cosov等以ov结尾的cdn为海外服务器,您可以在视频解析连接后使用cdn参数指定cdn,或者通过配置服务器环境变量为特定地区分配默认cdn (使用Vercel等代理服务器时因为请求的IP在海外,b站默认会分配海外的CDN服务器)

  3. 在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 命中 MISSEXPIRED edge;hit="HIT",kv;hit="UNUSED" - 使用 edge 缓存
CF 未命中,Edge 未命中,KV 命中 MISSEXPIRED edge;hit="MISS",kv;hit="HIT" - 使用 kv 缓存并回填 edge 缓存
前三层全未命中,Worker 执行,Cookies 命中 MISSEXPIRED edge;hit="MISS",kv;hit="MISS" HIT 使用缓存 cookies 解析
前三层全未命中,Worker 执行,Cookies 未命中 MISSEXPIRED 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=pcapp)。配置自定义 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 多音视频流字段(minBufferTimevideo / 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"

API

所有接口均支持 GET 请求,可通过路径参数或查询参数传入,返回 JSON 结构为:

{ "code": 200, "message": "Success", "data": {} }

视频相关

GET /video/:bvid?/:p?

解析视频播放链接或视频信息。

参数 类型 默认 说明
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"

GET /cover/:bvid?

获取视频封面。

参数 类型 默认 说明
bvid string - BV 号
url string - bilibili 视频链接
type url | redirect redirect url:返回封面直链文本;redirect:302 重定向到封面
curl "https://your.workers.domain/cover/BV1UT42167xb?type=url"

GET /danmaku/:bvid?/:p?

获取视频弹幕。

参数 类型 默认 说明
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"

GET /subtitle/:bvid?/:p?

获取视频 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"

GET /cdn

返回可用的视频 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"
  }
}

直播相关

GET /live/:roomId?

获取直播间信息并解析直播流。

参数 类型 默认 说明
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"

番剧相关

GET /bangumi/info

获取番剧/影视信息。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"

GET /bangumi/episodes

获取番剧分集列表。ssid / mdid 二选一。

curl "https://your.workers.domain/bangumi/episodes?ssid=37498"

用户相关

GET /user/archieve/:mid?/:sid?

获取 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"

GET /user/fav/:fid?

获取用户收藏夹信息与其中的视频列表。

参数 类型 默认 说明
fid number - 收藏夹 id
keyword string - 在收藏夹内搜索关键词
page number 1 页码
pageSize number 40 每页数量
curl "https://your.workers.domain/user/fav/220737630?page=1&pageSize=40"

搜索相关

GET /search/:type?

搜索视频、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"

其他

GET /ipregion

返回请求出口 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 缓存

部署解析站

1. 部署代理服务器

可参考 Proxy-Vercel 使用Vercel部署解析代理 这可能会影响后续的配置和解析的IP地址位置,确保您的代理服务器可以转发请求且可以被Cloudflare Workers访问

2. 安装依赖

npm install

3. 配置 wrangler.jsonc

参考 Wrangler 配置文档

Tip

您可以查看项目根目录下的warngler.example.jsonc的配置示范,或者您可以重命名删除.example后填入信息直接部署

绑定 Workers KV 存储库:

"kv_namespaces": [
    {
        "binding": "BILI_API_CACHE",
        "id": "你的KV存储库ID"
    }
]

配置请求限流(可选,需在 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"
}

4. 配置环境变量

wrangler.jsoncvars 中配置环境变量:

环境变量

变量 默认值 说明
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"
}

5. 本地开发

npm run dev

本地开发时可用 .env.dev 加载环境变量。

6. 部署到 Cloudflare Workers

npm run deploy

部署完成后访问,https://your.workers.domain/ 如果可以显示信息页面即部署完成。

声明

使用本项目即表示您已阅读并同意以下条款:

  1. 学习用途:本项目仅供开发者技术学习和研究使用
  2. 禁止商用:严禁将本项目用于搭建公开的大规模视频代理服务
  3. 隐私保护:本项目不会收集任何个人信息,所有解析均在未登录状态下完成
  4. 版权声明:视频内容版权归 Bilibili 及原作者所有,请尊重版权
  5. 使用规范:严禁非法分发视频,严禁使用本项目进行数据爬取
  6. 风险告知
    • 使用者自行承担因使用本项目导致的账号/IP 封禁风险
    • 包括但不限于:Vercel、Cloudflare、Bilibili 及其相关服务供应商
  7. 非盈利:本项目为开源项目,不进行任何盈利行为

About

基于Cloudflare Workers和Vercel部署的bilibili视频直链接和视频信息的解析服务

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages