ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

B站视频解析API实战:一套PHP代码,让视频直链5分钟到手

2026/8/14 13:18:37 拓冰建站 浏览量
B站视频解析API实战:一套PHP代码,让视频直链5分钟到手

B站视频解析API实战:一套PHP代码,让视频直链5分钟到手

【免费下载链接】bilibili-parsebilibili Video API项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse

你有没有过这种时刻:在网上找到一个讲得特别好的B站教程,想把它嵌进自己公司的培训页面,让同事不用切到B站就能看;或者想缓存几集纪录片,留着在地铁上慢慢刷。结果你在网页里翻来覆去,看到的全是一堆加密字符串,视频文件到底存在哪个地址,完全摸不着头脑。

这不是你笨——浏览器里的那个播放器,本质上只是"接到指令去取货"的搬运工,真正的仓库地址是它当场向B站服务器临时申请、动态下发的。你想要的,就是学会自己"问路"。而这个问路的本事,一个叫bilibili-parse的开源 PHP 解析库就能替你完成。这篇 B站视频解析API 实战文章,就来带你把这条路彻底走通。

核心关键词:B站视频解析API长尾关键词:PHP视频解析工具、B站视频直链获取、视频播放集成API、B站视频离线下载方案、AV号转播放地址

先说人话:它到底是什么

bilibili-parse = 输入一个编号(AV/BV/EP),输出一条能直接播放的视频地址。

就这么简单。它自己不存任何视频、不碰任何版权内容,只做一件事:替你向B站服务器发起一次合法请求,然后把返回的加密数据"翻译"成你能直接用的播放链接。对新手来说,你甚至不需要理解任何网络协议,只需要认识三个词——视频编号、清晰度、格式,剩下的交给它。

一张表摸清它的全部家底

动手之前,先把能力全景摊开来看:

参数作用默认值可选值
av / bv / ep告诉它"是哪个视频"av、bv 用于普通视频,ep 用于番剧/课程
p多P视频取第几集11、2、3……
q想要多清晰3216 / 32 / 64 / 80
format输出什么封装格式flvflv / dash / mp4
type视频大类videovideo / bangumi(番剧)
otype结果怎么吐出来jsonjson / url / dplayer

三种格式的区别,一句话记牢:flv是传统分段直链,拿到就能播;dash会拆成视频流 + 音频流两条地址,画质上限高但需要自己拼装;mp4是最省心的封装,几乎所有播放器都直接认。

除了这张表,它还藏着两个贴心小机关:一是自动降档——你随手填一个不存在的清晰度,它会自动向下匹配最近的合法档位,不会直接报错;二是缓存——同一视频短时间内重复解析时直接读缓存,省流量也省等待。

三步跑通:从零到拿到直链

它的运行门槛低得感人:PHP 5.4 及以上版本,装好 Curl 和 OpenSSL 扩展就够了。

第一步,把代码请进家门。

git clone https://gitcode.com/gh_mirrors/bi/bilibili-parse

第二步,当成现成接口直接用。项目根目录的 index.php 本身就是一个开箱即用的 API 入口,你连业务代码都不用写。把它放到支持 PHP 的站点目录,然后浏览器访问:

https://你的域名/bilibili-parse/?av=14661594&p=1&q=64&otype=json

有意思的是,如果你不带任何参数直接打开 index.php,它会自动渲染出 public/readme.html 文档页——等于内置了一份使用手册,上手成本又低了一截。

第三步,写三行代码接进你的项目。核心逻辑都封装在 src/Bilibili.php 的Injahow\Bilibili类里,调用方式是清爽的链式写法:

require 'src/Bilibili.php'; use Injahow\Bilibili; $bp = new Bilibili('video'); // 普通视频;番剧填 'bangumi' $bp->bvid('BV1xx4y1x7zz') // av、bv、ep 三选一 ->page(1) // 第1P ->quality(64) // 清晰度 ->format('mp4') // flv / dash / mp4 ->cache(true)->cache_time(3600); // 开启1小时缓存 echo $bp->result(); // 拿到解析结果

到这一步,一条"编号 → 直链"的流水线就算正式通了。接下来的问题就是:这条流水线,能为你做什么?

三种身份,三种玩法

1. 搭学习平台的老师 / 站长

你想让自家平台上的B站课程"无感播放",本质就两步:解析出直链,然后喂给播放器。项目里已经预置了一个播放器演示页 public/dplayer.html,先用它验证效果:

https://你的域名/bilibili-parse/public/dplayer.html?av=14661594&p=1

确认能播之后,再把你自己的播放器接上result()返回的 url 字段即可。给热门课程开缓存、清晰度设在 64,播放流畅度和加载速度都能兼顾。

2. 做系统集成的开发者

你的程序只需要结构化数据?把 otype 设为 json,接口会返回 code、quality、url 等字段,你的代码只管按约定解析:

  • code=0,解析成功,url 直接拿去用;
  • code 非 0,message 字段会告诉你失败原因。

再配合你的重试、日志、队列机制,一套稳定的解析服务就立起来了。多P视频记得循环 page 参数逐集取地址。

3. 只想离线缓存的普通用户

不写代码也有办法。用 otype=url,接口会返回一段纯文本直链,复制到下载工具或手机浏览器里保存即可:

https://你的域名/bilibili-parse/?av=14661594&p=1&format=mp4&otype=url

画质建议选 32 档,画质与文件体积比较均衡;下载尽量在 Wi-Fi 环境下进行,更稳妥。

翻车现场:四个高频坑的"原因—解法"

玩得越深,越可能遇到下面这些情况。对照着查,基本都能救回来:

报错 / 现象常见原因解决办法
返回"无访问权限"视频需要登录或会员cookie()方法传入登录态 Cookie,或换非会员视频
返回"视频清晰度受限,可能需要会员"请求的清晰度超出当前权限降低 q 参数;或带上会员 Cookie 再试
返回"获取信息失败"cid 没取到,多为参数或网络问题核对 av/bv/ep 是否填错、网络是否可达,避免多种编号混传
缓存迟迟不生效cache 目录不存在或不可写按源码注释提前建好cache/cid/目录并确保可写;也支持换成 apcu 内存缓存

另外单独叮嘱一句:dash 格式返回的是视频流 + 音频流两个地址,需要自己合并封装,别指望它当单一直链用;想"拿来就播",优先 mp4 或 flv。

收尾:你的下一步该做什么

到这里,bilibili-parse 的核心玩法你已经全部握在手里了:一个编号,换来一条直链,然后想怎么用就怎么用。它最难得的地方,是把整套解析逻辑压缩进了单个 PHP 类——读透它,你也就顺便搞懂了"视频播放地址是怎么被下发和加密的",这本身就是一份绝佳的网络编程教材。

按这个顺序进阶,收获最大:

  1. 打开 src/Bilibili.php,从result()方法读起,顺着整个解析流程走一遍;
  2. 对照 index.php,学学怎么把类包装成一个 HTTP 接口;
  3. 再挑战番剧(type=bangumi)与课程解析,体会 ep 编号与 av/bv 的差异。

最后提一句边界:这类工具请用于个人学习、内容研究等正当场景,下载的内容注意尊重版权,也尽量不要把解析接口裸奔在公网上供人滥用。工具是中立的,把它用在哪里,取决于你。

现在,去把收藏夹里第一个视频编号填进去吧——你会发现,"直链获取"这件事,真的比你想象中简单。

【免费下载链接】bilibili-parsebilibili Video API项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考