bilibili-parse 视频解析 API 从零上手:三个请求拿到 B 站播放地址
bilibili-parse 视频解析 API 从零上手三个请求拿到 B 站播放地址【免费下载链接】bilibili-parsebilibili Video API项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse如果你做内容剪辑、课程搬运或网站开发大概率经历过这样的场景在 B 站看到一个好视频想把它嵌入自己的页面却不知道真实播放地址在哪打开开发者工具翻半天接口复制出一堆带签名的乱码链接第二天就失效。bilibili-parse 这个 PHP 开源库正是为了解决拿到 B 站视频真实播放地址这件事而生的——你给它一个 av 号、bv 号或 ep 号它帮你完成从编号到可播放 URL 的全部翻译工作一行请求就能出结果。它到底在帮你做什么把页面翻译成地址B 站的视频页面本身不是直接可播放的真正的视频流地址藏在 API 返回里而且会根据清晰度、格式、分区类型动态生成。bilibili-parse 把这条链路封装成了一个黑盒接收你传入的视频编号av / bv / ep自动向 B 站接口查询对应的 cid视频分P的唯一标识携带伪造的浏览器请求头请求播放地址接口按你指定的格式与清晰度返回最终可用的 URL这四步全部发生在服务端调用方只需处理最终结果。它同时覆盖了 B 站三类内容源普通投稿video、番剧bangumi和付费课程cheese你不需要为不同内容写不同的对接代码。三个编号、三种格式、三种输出先看懂它的坐标系理解这个工具只要记住三乘三的排列组合即可。维度取值说明编号av / bv / ep老号、新号、剧集号任选其一格式flv / dash / mp4决定返回的流类型输出json / url / dplayer决定你拿到的是数据、地址还是播放页其中dash 格式最特殊B 站高清视频普遍采用音视频分离所以 dash 模式会同时返回video和audio两段 base_url需要播放器自行合流而 flv 和 mp4 返回的是单一 durl 地址拿到就能播。从零部署的最快路径克隆、上传、跑通部署门槛低到几乎没有只要 PHP 5.4 以上版本且装好了 Curl 和 OpenSSL 扩展即可不需要数据库不需要 composer不需要任何密钥配置。git clone https://gitcode.com/gh_mirrors/bi/bilibili-parse克隆后把整个目录扔进支持 PHP 的网站根目录项目自带跨域头Access-Control-Allow-Origin: *所以你可以放心让前端页面直接请求它。整个项目只有三个关键文件十分钟能读完index.phpHTTP 入口负责收参数、分发请求src/Bilibili.php核心解析类全部业务逻辑所在public/dplayer.html开箱即用的 DPlayer 播放演示页最快上手的三个请求让第一个地址先跑起来把下面的 URL 换成你的域名第一个结果几秒内就能看到。1. 要完整数据默认输出/index.php?bvBV1xxxxxq64otypejson返回的 JSON 结构大致长这样{ code: 0, quality: 64, accept_quality: [16, 32, 64, 80], url: https://upos-sz-mirror...bili.com/... }2. 只要地址适合脚本直接取流/index.php?av14661594p2otypeurlotypeurl时响应体里只有一行纯文本 URL配合 curl 或 wget 就能直接抓回视频文件。3. 要现成播放器/index.php?bvBV1xxxxxotypedplayer这个模式会直接返回一个内嵌 DPlayer 的 HTML 页面浏览器打开即可播放适合快速验证某个视频能不能解析成功也适合临时分享链接。调参之前先搞懂清晰度与格式的真实逻辑参数表很简单但有两个容易误判的点必须提前说明。清晰度 q 采用的是向下匹配策略。库内部维护了一张等级表127、125、120、116、112、80、74、64、48、32、16。你传一个 q 值它会在表中找到不大于你传的值的最高档。比如你传q50实际生效的是 48传q100实际生效的是 80。这保证了请求永远不会超出视频本身提供的上限代价是如果你传的 q 落在两个档位之间画质会比你预期的低一档。mp4 格式会锁定 80。源码里对 mp4 模式强制把qn设为 80原因是 mp4 走的是 B 站 HTML5 播放通道该通道只提供最高档地址。所以如果你传formatmp4q32最终拿到的仍是 80 清流的地址——想要精确控制清晰度请使用 flv 或 dash。如果你是在 PHP 代码里集成直接调用解析类即可include src/Bilibili.php; use Injahow\Bilibili; $bp new Bilibili(video); // video / bangumi / cheese $bp-bvid(BV1xxxxx)-page(1)-quality(64)-format(flv); $result json_decode($bp-result(), true); if ($result[code] 0) { echo $result[url]; }所有配置方法都支持链式调用aid()、epid()、cid()、cookie()、proxy()等一应俱全接口设计上保持了很好的一致性。进阶玩法缓存、批量与播放器拼装开缓存重复请求提速。同一个视频在短时间内被反复请求很常见库内置了文件缓存和 APCu 缓存两种后端$bp-cache(true)-cache_time(3600); // 文件缓存1 小时 $bp-cache(true, apcu)-cache_time(3600); // 需要服务器启用 APCu注意两个细节缓存时间最小会被钳制到 60 秒文件缓存模式需要cache/cid/目录存在且有写入权限。批量取流一条 shell 解决。拿多个 bv 号循环请求otypeurl落盘成清单文件再交给下载器处理for bv in BV1xxxxx BV2yyyyy BV3zzzzz; do curl https://your-domain.com/index.php?bv$bvotypeurl urls.txt done嵌入自己的播放器。由于 index.php 已放开跨域前端可以直接 fetch JSON 拿到url喂给任意播放器如 DPlayer、video.js。dplayer.html 就是现成的参考实现——它请求 mp4 格式地址并自动补全https://协议前缀。绕开这四个坑解析成功率提升一大截会员专属内容会明确拒绝。接口检测到is_preview为真时会返回无访问权限当目标清晰度超出非会员可用范围时会返回视频清晰度受限可能需要会员。这两条是设计好的正常行为不是 bug。dash 模式别拿单个地址播放。它返回的是 video 和 audio 两条流如果把它们当成两个独立视频处理声音和画面必然对不上。想要单文件请选 flv 或 mp4。cookie 能救部分限流。如果你的服务部署在数据中心 IP 上B 站可能对请求更严格。库的cookie()方法允许你注入自己的登录态 Cookie非会员场景下也能显著提高高清晰度请求的成功率。别把 q 当成硬性承诺。视频本身没有的清晰度传了也不会凭空出现。先看返回的accept_quality列表再决定请求哪个档位比盲目传 80 更可靠。谁适合用它以及你现在就该做的三件事这个库的受众画像其实很清晰需要批量获取 B 站视频地址的内容创作者抓素材、做合集、想把 B 站视频嵌入自己产品的开发者网站、小程序、App 的后端封装以及做教学资源整合的教育平台。它的价值不在于下载视频——它只负责解析地址下载要用别的工具——而在于把你从手动翻接口的重复劳动里解放出来。如果你想立刻上手按这个顺序走三步部署克隆仓库上传到 PHP 环境先跑通otypeurl的最小请求调参对照本文的清晰度规则用q64和q80各请求一次对比返回差异固化在你的业务代码里封装好解析类再加上文件缓存一个稳定的视频地址服务就成型了。别急着一步到位先让第一个地址跑起来剩下的问题会在你实际使用的过程中自然浮现。现在就去试试你的第一个 bv 号吧。【免费下载链接】bilibili-parsebilibili Video API项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
