B站视频解析开源方案:bilibili-parse从部署到调用的完整指南
【免费下载链接】bilibili-parsebilibili Video API项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse
想在自建网站上嵌入一条B站视频,却拿不到真实的播放地址?想做素材采集,却要在十几个在线解析站之间来回试错?bilibili-parse 就是为解决这个问题而生的:一个基于 PHP 的轻量 B站视频解析 API,只需传入 av 号、bv 号或 ep 号,就能在几秒内返回可直接播放的视频地址,并支持 json、url、dplayer 三种输出模式,自己部署、数据可控、无登录依赖。
三步部署:从克隆到拿到第一条解析结果
项目对运行环境的要求极低:PHP 5.4 及以上,且已安装 Curl 与 OpenSSL 扩展,绝大多数虚拟主机都能满足。
第一步,拉取代码:
git clone https://gitcode.com/gh_mirrors/bi/bilibili-parse第二步,上传到服务器。将整个目录放到任意可运行 PHP 的站点目录下,例如htdocs或wwwroot,无需修改任何配置。
第三步,发起第一个解析请求。复制任意一个B站视频的 bv 号,替换下面命令中的BV1xxxxx:
/index.php?bv=BV1xxxxx&otype=json浏览器直接访问该地址,几秒内就会返回一个 JSON,其中code为 0 表示成功,url字段就是可直接播放的视频地址。整个部署过程不需要数据库、不需要 composer,五分钟左右就能跑通。
核心能力一:三种"身份证"识别视频,一个接口全兼容
B站视频编号几经变迁,老视频是 av 号,新视频是 bv 号,番剧和课程又用 ep 号。bilibili-parse 在入口层做了统一收编,由 index.php 负责参数校验,由核心类 src/Bilibili.php 完成 API 组装与结果解析。
| 参数 | 含义 | 示例 |
|---|---|---|
| av | 传统视频编号 | av=14661594 |
| bv | 现行视频编号 | bv=BV1xxxxx |
| ep | 番剧/课程剧集编号 | ep=xxxxx |
| cid | 分P内容标识(进阶可选) | cid=xxxxx |
其中 av、bv 用于普通投稿视频,ep 配合type=bangumi或type=cheese可解析番剧和付费课程分集。视频有多 P(分集)时,用p参数指定集数,默认取第 1 集。
核心能力二:画质与格式自由组合,避免"会员受限"踩坑
解析出的清晰度和封装格式都由你说了算,四个参数即可完成组合:
| 参数 | 可选值 | 说明 |
|---|---|---|
| q | 16 / 32 / 64 / 80 | 画质档位,数值越高越清晰 |
| format | flv / dash / mp4 | 输出封装格式 |
| type | video / bangumi / cheese | 内容类型 |
| p | ≥1 的整数 | 分集序号,默认 1 |
调用时把参数拼进 URL 即可,例如:
/index.php?av=14661594&p=2&q=64&format=mp4&otype=json需要注意的是:当请求的画质超过视频实际可用的最高档位时,核心类会自动向下取最接近的可用档位;若format为 flv 且视频清晰度受限,会返回"视频清晰度受限,可能需要会员"的错误提示,这是正常保护机制,并不是接口故障。
核心能力三:三种输出模式,覆盖"开发—集成—展示"全链路
用otype参数切换输出形态,一套接口适配三种使用场景:
- json(默认):返回完整 JSON 元数据,flv/mp4 格式下包含
code、quality、accept_quality、url四个字段;dash 格式下则返回分离的video与audio地址,适合开发者二次加工。 - url:只返回一行纯文本播放地址,适合脚本里直接取用,例如配合 wget、ffmpeg 等工具。
- dplayer:不返回数据,而是直接输出一个带 DPlayer 播放器的完整 HTML 页面,视频自动加载,适合快速演示或嵌入 iframe。注意该模式仅对 mp4 格式生效,其内部逻辑实现在 public/dplayer.html。
// 直接拿播放地址,无需处理 JSON 结构 /index.php?av=14661594&p=1&q=32&otype=url实战案例:给自己的网站加一个 B站视频页
以"个人站点嵌入B站视频"为例,完整链路是这样的:
- 在页面里用
<iframe>引用index.php?bv=...&otype=dplayer; - 如果想自定义播放器样式,就改用
otype=json拿到url字段,喂给任意支持 flv/mp4 的播放器; - 若视频为多 P,只需拼接
&p=2、&p=3,即可实现"视频合集"效果,每个 P 独立成页。
批量采集场景同样简单,写个 Shell 循环即可对多个视频逐一取地址:
for vid in "BV1aaaaa" "BV2bbbbb" "BV3ccccc"; do curl "https://你的域名/index.php?bv=$vid&otype=url" >> playurls.txt done新手 vs 进阶:两条缓存加速路线,按需选择
同一个视频被反复解析会白白消耗 B站 API 配额。项目内置缓存机制,只是入口文件里默认注释掉了,打开 index.php 第 43 行附近取消注释即可启用。这里给出两条路线对比:
| 路线 | 启用方式 | 适用场景 | 优点 | 注意 |
|---|---|---|---|---|
| 文件缓存(新手) | $bp->cache(true)->cache_time(3600); | 任意 PHP 环境 | 零依赖,开箱即用 | 需保证cache/cid/目录可写 |
| APCu 缓存(进阶) | $bp->cache(true, 'apcu')->cache_time(3600); | 高并发站点 | 纯内存读写,性能最优 | 需安装 PHP APCu 扩展 |
两种方式共用同一套调用链:命中缓存直接返回结果、免去网络请求,缓存默认有效期 3600 秒(最短 60 秒),相同参数下的重复解析基本是瞬时响应,非常适合播放量集中、URL 短时内被反复请求的场景。
常见问题 FAQ
Q:需要登录B站账号或填写 Cookie 吗?A:不需要。项目内置了完整的请求头与 UA,对公开视频直接调用官方 API 即可;付费/会员内容不在支持范围内。
Q:为什么返回"视频清晰度受限,可能需要会员"?A:说明该视频的实际可用画质低于你请求的档位,通常是视频本身需要大会员或存在画质限制。换用q=16或改用format=mp4通常能规避。
Q:dplayer 模式打不开播放器?A:先确认format是否为 mp4,dplayer 输出仅支持 mp4;同时播放器脚本来自 CDN,服务器需能正常访问外网。
Q:解析出的地址可以下载吗?A:可以。url模式输出的就是真实播放地址,可直接交给下载工具或 ffmpeg 保存本地。
Q:请求失败通常是什么原因?A:优先级从高到低排查:视频编号是否有效、服务器能否访问 B站 API(需外网+HTTPS)、是否触发频率限制,最后再确认 PHP 的 Curl/OpenSSL 扩展已启用。
总结与下一步
bilibili-parse 的价值在于把"B站视频解析"这个高频需求收敛成了一个可自托管的 PHP 接口:三种编号全兼容、画质格式可组合、输出模式按需切换、缓存机制一键开启。它适合内容创作者批量取素材,也适合个人站长给站点加视频模块。
现在就去克隆代码,用你手边任意一个 bv 号发起第一次请求,把第一条 JSON 跑通;跑通之后,再试试otype=dplayer和缓存开关,你就能直观感受到这套解析方案的完整工作流了。
【免费下载链接】bilibili-parsebilibili Video API项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考