From 3b5e5e06581931aff49d6e11aa7970aa945a9dc0 Mon Sep 17 00:00:00 2001 From: TES286 <54404646+TES286@users.noreply.github.com> Date: Sun, 4 Aug 2024 01:48:24 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E6=B5=81=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/live/live_stream.md | 262 ++++++++++++++++++++++++++++++++------- 1 file changed, 214 insertions(+), 48 deletions(-) diff --git a/docs/live/live_stream.md b/docs/live/live_stream.md index 7b8a50c..760b2c7 100644 --- a/docs/live/live_stream.md +++ b/docs/live/live_stream.md @@ -1,57 +1,226 @@ # 直播间视频流 -## 根据真实直播间号获取直播视频流 +## 根据真实直播间号获取直播视频流链接 + +> https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo +> ?room_id=23016450 +> &no_playurl=0 +> &mask=1 +> &qn=0 +> &platform=web +> &protocol=0,1 +> &format=0,1,2 +> &codec=0,1,2 +> &dolby=5 +> &panorama=1 + +_请求方式:GET_ + +**url参数:** +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ---------- | ----- | -------- | ------ | ---- | +| room_id | num | 直播间号 | 必要 | 房间号 | +| no_playurl | num | 无视频流 | 非必要 | 置`0`才有视频流 | +| mask | num | - | - | 作用未知,未观察到响应改变 默认1 | +| qn | num | 质量 | 非必要 | 3000杜比 20000 4K 10000 原画
400 蓝光 250 超清 150 高清
0 应该是默认 | +| platform | str | 平台 | - | 参考:`web` | +| protocol | num[] | 协议 | - | 参考:`0,1` | +| format | num[] | 格式 | - | 参考:`0,1,2` | +| codec | num[] | 编码 | - | 参考:`0,1,2` | +| dolby | num | 杜比 | - | 参考:`5` | +| panorama | num | 环绕音 | - | 参考:`1` | + +**json回复:** + +> 由于返回字段数过多,故在响应示例中标记 +> +> 该示例作出合理修改,以便于阅读,相关情况请自行构造请求 + +
+查看响应示例 + +```json +{ + "code": 0, // 标记是否成功 + "message": "0", // 错误信息(如果有),人类可读 + "ttl": 1, + "data": { // 主体部分,如果请求错误则为 `null` + "room_id": 132465798, // 同请求参数同名 + "short_id": 0, // 房间短id + "uid": 132465798, // 主播用户id (就是主页链接那个https://space.bilibili.com/) + "is_hidden": false, // 是否隐藏 + "is_locked": false, // 是否锁定 + "is_portrait": false, + "live_status": 1, // 直播状态:1为开播,0为下播 + "hidden_till": 0, // 隐藏直到(目前未找到相关样本) + "lock_till": 0, // 同上,锁定直到 + "encrypted": false, + "pwd_verified": true, + "live_time": 1722697729, + "room_shield": 0, + "all_special_types": [], + "playurl_info": { // 播放链接 + "conf_json": "{\"cdn_rate\":10000,\"report_interval_sec\":150}", + "playurl": { // 播放链接 + "cid": 32497242, + "g_qn_desc": [ // 清晰度描述(推测用于UI展示) + { + "qn": 30000, + "desc": "杜比", + "hdr_desc": "", + "attr_desc": null + }, + { + "qn": 20000, + "desc": "4K", + "hdr_desc": "", + "attr_desc": null + }, + { + "qn": 10000, + "desc": "原画", + "hdr_desc": "", + "attr_desc": null + }, + { + "qn": 400, + "desc": "蓝光", + "hdr_desc": "", + "attr_desc": null + } + // ... + ], + "stream": [ // 直播流信息 + { + "protocol_name": "http_stream", // 协议信息 + "format": [ + { + "format_name": "flv", // 格式信息 + "codec": [ + { + "codec_name": "avc", // 编码格式 + "current_qn": 10000, // 当前质量 + "accept_qn": [ // 应许质量 + 10000 + ], + "base_url": "/live-bvc/123465789/live_123_456.flv?", // 详细见下取流部分 + "url_info": [ + { + "host": "https://cn-cq-cm-01-30.bilivideo.com", // 详细见下取流部分 + "extra": "expires=172270...rc=puv3", // 详细见下取流部分 + "stream_ttl": 0 + } + ], + "hdr_qn": null, + "dolby_type": 0, + "attr_name": "" + } + ], + "master_url": "" + } + ] + } + // 其他部分类似,省略 + ], + "p2p_data": { // p2p 相关数据 + "p2p": true, + "p2p_type": 1, + "m_p2p": false, + "m_servers": null + }, + "dolby_qn": null + } + }, + "official_type": 0, + "official_room_id": 0, + "risk_with_delay": 0 + } +} +``` +
+ +## 视频取流 + +- 取JSON中`data.playurl_info.playurl.stream`记做`streams` +- 对于`streams`中的每一项,取`format`其中一项(一或若干项,对应不同的编码格式) +- `format[n].codec[n]`中就是链接相关信息了,取`base_url`、`url_info[n].host`和`url_info[n].extra` +- 最终链接为 `host + base_url + extra` + +示例代码(javascript): +```javascript +function get_stream_url(data) { + let result = []; + data.data.playurl_info.playurl.stream.map((stream) => + stream.format.map((format) => + format.codec.map((codec) => + codec.url_info.map((url_info) => + result.push(url_info.host + codec.base_url + url_info.extra) + ) + ), + ), + ); + return result +} +``` +最终从响应的链接随意选择一个即可,按照一般m3u8处理即可,至于编码格式之类问题,相关的下载器应该都能处理,或者自己根据需要在json回应中挑选 + +另外,有注意到部分链接可能包含客户端ip地址,在这方面(现在或者将来)可能有检测 + + +
+ +根据真实直播间号获取直播视频流 (旧) + > https://api.live.bilibili.com/room/v1/Room/playUrl -*请求方式:GET* +_请求方式:GET_ **url参数:** -| 参数名 | 类型 | 内容 | 必要性 | 备注 | -| ------ | ---- | ----------- | ------ | ---- | -| cid | num | 目标真实直播间号 | 必要 | 直播间的`room_id`(非短号) | -| platform | str | 直播流格式 | 非必要 | h5:hls方式
web:http-flv方式
默认为http-flv方式 | -| quality | num | 画质 | 非必要 | `qn`与`quality`任选其一
2:流畅
3:高清
4:原画 | -| qn | str | 画质 | 非必要 | `qn`与`quality`任选其一
80:流畅
150:高清
400:蓝光
10000:原画
20000:4K
30000:杜比 | +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | ---------------- | ------ | -------------------------------------------------------------------------------------------------------------------- | +| cid | num | 目标真实直播间号 | 必要 | 直播间的`room_id`(非短号) | +| platform | str | 直播流格式 | 非必要 | h5:hls方式
web:http-flv方式
默认为http-flv方式 | +| quality | num | 画质 | 非必要 | `qn`与`quality`任选其一
2:流畅
3:高清
4:原画 | +| qn | str | 画质 | 非必要 | `qn`与`quality`任选其一
80:流畅
150:高清
400:蓝光
10000:原画
20000:4K
30000:杜比 | **json回复:** 根对象: -| 字段 | 类型 | 内容 | 备注 | -| ------- | ---- | -------- | --------------------------- | +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------------------------------------- | | code | num | 返回值 | 0:成功
-400:参数错误
19002003:房间信息不存在 | -| message | str | 错误信息 | 默认为0 | -| ttl | str | 1 | | -| data | obj | 信息本体 | | - +| message | str | 错误信息 | 默认为0 | +| ttl | str | 1 | | +| data | obj | 信息本体 | | `data`对象: -| 字段 | 类型 | 内容 | 备注 | -| -------------- | ---- | ------------- | ------------------------ | -| current_quality | num | 当前画质代码`qn` | | -| accept_quality | array | 可选画质数参数 | | -| current_qn | num | 当前画质代码`quality` | | -| quality_description | array | 可选画质参数`quality` | | -| durl | array | 直播流url组 | | +| 字段 | 类型 | 内容 | 备注 | +| ------------------- | ----- | --------------------- | ---- | +| current_quality | num | 当前画质代码`qn` | | +| accept_quality | array | 可选画质数参数 | | +| current_qn | num | 当前画质代码`quality` | | +| quality_description | array | 可选画质参数`quality` | | +| durl | array | 直播流url组 | | `accept_quality`数组: -| 项 | 类型 | 内容 | 备注 | -| ---- | ---- | ----------------- | ---- | -| 0 | str | `qn`画质代码1 | | -| n | str | `qn`画质代码(n+1) | | -| …… | str | …… | …… | +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | ----------------- | ---- | +| 0 | str | `qn`画质代码1 | | +| n | str | `qn`画质代码(n+1) | | +| …… | str | …… | …… | `quality_description`数组: -| 项 | 类型 | 内容 | 备注 | -| ---- | ---- | ------------- | ---- | -| 0 | obj | 画质代码1 | | -| n | obj | 画质代码(n+1) | | -| …… | obj | …… | …… | +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | ------------- | ---- | +| 0 | obj | 画质代码1 | | +| n | obj | 画质代码(n+1) | | +| …… | obj | …… | …… | `quality_description`数组中的对象: @@ -62,21 +231,21 @@ `durl`数组: -| 项 | 类型 | 内容 | 备注 | -| ---- | ---- | ----------- | ---- | -| 0 | obj | 主线服务器 | | -| n | obj | 备线n服务器 | | -| …… | obj | …… | …… | +| 项 | 类型 | 内容 | 备注 | +| --- | ---- | ----------- | ---- | +| 0 | obj | 主线服务器 | | +| n | obj | 备线n服务器 | | +| …… | obj | …… | …… | `durl`数组中的对象: -| 字段 | 类型 | 内容 | 备注 | -| -------------- | ---- | ------------- | ------------------------ | -| url | str | 直播流url | flv或m3u8格式
**注:带有转义** | -| length | num | 0 | 作用尚不明确 | -| order | num | 服务器线路序号 | | -| stream_type | num | 0 | 作用尚不明确 | -| p2p_type | num | 0 | 作用尚不明确 | +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | -------------- | ----------------------------------- | +| url | str | 直播流url | flv或m3u8格式
**注:带有转义** | +| length | num | 0 | 作用尚不明确 | +| order | num | 服务器线路序号 | | +| stream_type | num | 0 | 作用尚不明确 | +| p2p_type | num | 0 | 作用尚不明确 | **示例:** @@ -99,11 +268,7 @@ curl -G 'https://api.live.bilibili.com/room/v1/Room/playUrl' \ "ttl": 1, "data": { "current_quality": 3, - "accept_quality": [ - "4", - "3", - "2" - ], + "accept_quality": ["4", "3", "2"], "current_qn": 3, "quality_description": [ { @@ -154,3 +319,4 @@ curl -G 'https://api.live.bilibili.com/room/v1/Room/playUrl' \ ```
+ From 57b2e3ea3894c16d66b0edd825b31c32207d6de3 Mon Sep 17 00:00:00 2001 From: TES286 <54404646+TES286@users.noreply.github.com> Date: Sun, 4 Aug 2024 11:10:58 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E6=B5=81=E6=96=87=E6=A1=A3=EF=BC=8C=E6=A0=BC=E5=BC=8F=E6=95=B4?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/live/live_stream.md | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/docs/live/live_stream.md b/docs/live/live_stream.md index 760b2c7..937d8e8 100644 --- a/docs/live/live_stream.md +++ b/docs/live/live_stream.md @@ -3,16 +3,6 @@ ## 根据真实直播间号获取直播视频流链接 > https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo -> ?room_id=23016450 -> &no_playurl=0 -> &mask=1 -> &qn=0 -> &platform=web -> &protocol=0,1 -> &format=0,1,2 -> &codec=0,1,2 -> &dolby=5 -> &panorama=1 _请求方式:GET_ @@ -30,6 +20,8 @@ _请求方式:GET_ | dolby | num | 杜比 | - | 参考:`5` | | panorama | num | 环绕音 | - | 参考:`1` | +> 注意:请将Referer设置为相关链接,如`https://live.bilibili.com/` + **json回复:** > 由于返回字段数过多,故在响应示例中标记 @@ -39,6 +31,22 @@ _请求方式:GET_
查看响应示例 +请求: +```bash +curl -G 'https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo' \ + --data-urlencode 'room_id=123456789' \ # 请自行替换对应房间号 + --data-urlencode 'qn=0' \ + --data-urlencode 'platform=web'\ + --data-urlencode 'protocol=0,1' \ + --data-urlencode 'format=0,1,2' \ + --data-urlencode 'codec=0,1,2' \ + --data-urlencode 'dolby=5' \ + --data-urlencode 'panorama=1' \ + --header 'Referer: https://live.bilibili.com' \ + --header 'accept: application/json' +``` + +响应: ```json { "code": 0, // 标记是否成功 From cac2d2e665e6ea765e7f3c0eda1469b82b298fb3 Mon Sep 17 00:00:00 2001 From: TES286 <54404646+TES286@users.noreply.github.com> Date: Sun, 4 Aug 2024 11:28:00 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E6=B5=81=E6=96=87=E6=A1=A3=EF=BC=8C=E5=A2=9E=E5=8A=A0python?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/live/live_stream.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/live/live_stream.md b/docs/live/live_stream.md index 937d8e8..d33f09e 100644 --- a/docs/live/live_stream.md +++ b/docs/live/live_stream.md @@ -170,7 +170,17 @@ function get_stream_url(data) { return result } ``` -最终从响应的链接随意选择一个即可,按照一般m3u8处理即可,至于编码格式之类问题,相关的下载器应该都能处理,或者自己根据需要在json回应中挑选 + +示例代码(python): +```python +def get_stream_url(data): + for stream in data['data']['playurl_info']['playurl']['stream']: + for format in stream['format']: + for codec in format['codec']: + for url_info in codec['url_info']: + yield ''.join([url_info['host'], codec['base_url'], url_info['extra']]) +``` +最终从响应的链接随意选择一个即可,按照一般视频流处理即可(目前发现有m3u8和flv两种格式),至于编码格式之类问题,相关的下载器应该都能处理,或者自己根据需要在json回应中挑选 另外,有注意到部分链接可能包含客户端ip地址,在这方面(现在或者将来)可能有检测 From 3617dd2711707c141ea8a070c933234b925aa62b Mon Sep 17 00:00:00 2001 From: TES286 <54404646+TES286@users.noreply.github.com> Date: Mon, 5 Aug 2024 00:38:41 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E6=B5=81=E6=96=87=E6=A1=A3=EF=BC=8C=E5=88=A0=E9=99=A4=E6=97=A7?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/live/live_stream.md | 156 +-------------------------------------- 1 file changed, 2 insertions(+), 154 deletions(-) diff --git a/docs/live/live_stream.md b/docs/live/live_stream.md index d33f09e..957ad54 100644 --- a/docs/live/live_stream.md +++ b/docs/live/live_stream.md @@ -29,7 +29,7 @@ _请求方式:GET_ > 该示例作出合理修改,以便于阅读,相关情况请自行构造请求
-查看响应示例 +查看响应示例及响应含义 请求: ```bash @@ -185,156 +185,4 @@ def get_stream_url(data): 另外,有注意到部分链接可能包含客户端ip地址,在这方面(现在或者将来)可能有检测 -
- -根据真实直播间号获取直播视频流 (旧) - - -> https://api.live.bilibili.com/room/v1/Room/playUrl - -_请求方式:GET_ - -**url参数:** - -| 参数名 | 类型 | 内容 | 必要性 | 备注 | -| -------- | ---- | ---------------- | ------ | -------------------------------------------------------------------------------------------------------------------- | -| cid | num | 目标真实直播间号 | 必要 | 直播间的`room_id`(非短号) | -| platform | str | 直播流格式 | 非必要 | h5:hls方式
web:http-flv方式
默认为http-flv方式 | -| quality | num | 画质 | 非必要 | `qn`与`quality`任选其一
2:流畅
3:高清
4:原画 | -| qn | str | 画质 | 非必要 | `qn`与`quality`任选其一
80:流畅
150:高清
400:蓝光
10000:原画
20000:4K
30000:杜比 | - -**json回复:** - -根对象: - -| 字段 | 类型 | 内容 | 备注 | -| ------- | ---- | -------- | --------------------------------------------------------- | -| code | num | 返回值 | 0:成功
-400:参数错误
19002003:房间信息不存在 | -| message | str | 错误信息 | 默认为0 | -| ttl | str | 1 | | -| data | obj | 信息本体 | | - -`data`对象: - -| 字段 | 类型 | 内容 | 备注 | -| ------------------- | ----- | --------------------- | ---- | -| current_quality | num | 当前画质代码`qn` | | -| accept_quality | array | 可选画质数参数 | | -| current_qn | num | 当前画质代码`quality` | | -| quality_description | array | 可选画质参数`quality` | | -| durl | array | 直播流url组 | | - -`accept_quality`数组: - -| 项 | 类型 | 内容 | 备注 | -| --- | ---- | ----------------- | ---- | -| 0 | str | `qn`画质代码1 | | -| n | str | `qn`画质代码(n+1) | | -| …… | str | …… | …… | - -`quality_description`数组: - -| 项 | 类型 | 内容 | 备注 | -| --- | ---- | ------------- | ---- | -| 0 | obj | 画质代码1 | | -| n | obj | 画质代码(n+1) | | -| …… | obj | …… | …… | - -`quality_description`数组中的对象: - -| 字段 | 类型 | 内容 | 备注 | -| ---- | ---- | -------------------- | ---- | -| qn | num | 画质代码 | | -| desc | str | 该代码对应的画质名称 | | - -`durl`数组: - -| 项 | 类型 | 内容 | 备注 | -| --- | ---- | ----------- | ---- | -| 0 | obj | 主线服务器 | | -| n | obj | 备线n服务器 | | -| …… | obj | …… | …… | - -`durl`数组中的对象: - -| 字段 | 类型 | 内容 | 备注 | -| ----------- | ---- | -------------- | ----------------------------------- | -| url | str | 直播流url | flv或m3u8格式
**注:带有转义** | -| length | num | 0 | 作用尚不明确 | -| order | num | 服务器线路序号 | | -| stream_type | num | 0 | 作用尚不明确 | -| p2p_type | num | 0 | 作用尚不明确 | - -**示例:** - -查询直播间`cid=14073662`的直播间信息 - -```shell -curl -G 'https://api.live.bilibili.com/room/v1/Room/playUrl' \ ---data-urlencode 'cid=14073662' \ ---data-urlencode 'qn=10000' \ ---data-urlencode 'platform=web' -``` - -
-查看响应示例: - -```json -{ - "code": 0, - "message": "0", - "ttl": 1, - "data": { - "current_quality": 3, - "accept_quality": ["4", "3", "2"], - "current_qn": 3, - "quality_description": [ - { - "qn": 4, - "desc": "原画" - }, - { - "qn": 3, - "desc": "高清" - }, - { - "qn": 2, - "desc": "流畅" - } - ], - "durl": [ - { - "url": "https://d1--cn-gotcha04.bilivideo.com/live-bvc/601131/live_14073662_bs_3699814_1500.flv?cdn=cn-gotcha04&expires=1602496530&len=0&oi=1939228219&pt=&qn=150&trid=e6540d81a5d04c2ea459c46ebe77472a&sigparams=cdn,expires,len,oi,pt,qn,trid&sign=20e4ac695fbdd1d11d5dac4f93caa783&ptype=0&src=9&sl=1&order=1", - "length": 0, - "order": 1, - "stream_type": 0, - "p2p_type": 0 - }, - { - "url": "https://d1--cn-gotcha01.bilivideo.com/live-bvc/757951/live_14073662_bs_3699814_1500.flv?cdn=cn-gotcha01&expires=1602496530&len=0&oi=1939228219&pt=&qn=150&trid=e6540d81a5d04c2ea459c46ebe77472a&sigparams=cdn,expires,len,oi,pt,qn,trid&sign=9deea67bb9e9c1f0fa3886a34aa09473&ptype=0&src=9&sl=1&order=2", - "length": 0, - "order": 2, - "stream_type": 0, - "p2p_type": 0 - }, - { - "url": "https://d1--cn-gotcha04.bilivideo.com/live-bvc/982058/live_14073662_bs_3699814_1500.flv?cdn=cn-gotcha04&expires=1602496530&len=0&oi=1939228219&pt=&qn=150&trid=e6540d81a5d04c2ea459c46ebe77472a&sigparams=cdn,expires,len,oi,pt,qn,trid&sign=8753b270960034660184d975d86c0161&ptype=0&src=9&sl=1&order=3", - "length": 0, - "order": 3, - "stream_type": 0, - "p2p_type": 0 - }, - { - "url": "https://d1--cn-gotcha04.bilivideo.com/live-bvc/139554/live_14073662_bs_3699814_1500.flv?cdn=cn-gotcha04&expires=1602496530&len=0&oi=1939228219&pt=&qn=150&trid=e6540d81a5d04c2ea459c46ebe77472a&sigparams=cdn,expires,len,oi,pt,qn,trid&sign=cf93474e923c9ba8288c45d954f81045&ptype=0&src=9&sl=1&order=4", - "length": 0, - "order": 4, - "stream_type": 0, - "p2p_type": 0 - } - ] - } -} -``` - -
-
+> [根据真实直播间号获取直播视频流 (旧)](https://github.com/SocialSisterYi/bilibili-API-collect/blob/f6760f4be38d5b592d396b211e48c666286524de/docs/live/live_stream.md) \ No newline at end of file From 7013b34d53fc38e97ebf3b1c4d3a62e20a8e9fb9 Mon Sep 17 00:00:00 2001 From: TES286 <54404646+TES286@users.noreply.github.com> Date: Mon, 5 Aug 2024 10:47:20 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E6=B5=81=E6=96=87=E6=A1=A3=EF=BC=8C=20=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E8=AF=AD=E6=B3=95=E9=AB=98=E4=BA=AE=E6=98=BE=E7=A4=BA=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/live/live_stream.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/live/live_stream.md b/docs/live/live_stream.md index 957ad54..39f46b1 100644 --- a/docs/live/live_stream.md +++ b/docs/live/live_stream.md @@ -47,7 +47,7 @@ curl -G 'https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo' ``` 响应: -```json +```jsonc { "code": 0, // 标记是否成功 "message": "0", // 错误信息(如果有),人类可读 From 06291bc1e4c2313e8c843d8459a28e054d1d10a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=A8=E5=8F=B6=E6=A2=A6=E6=98=A5?= <65224318+wuziqian211@users.noreply.github.com> Date: Wed, 21 May 2025 01:57:54 +0800 Subject: [PATCH 6/6] fix(live_stream): style & details MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 晨叶梦春 <65224318+wuziqian211@users.noreply.github.com> --- docs/live/live_stream.md | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/docs/live/live_stream.md b/docs/live/live_stream.md index 39f46b1..96c4d82 100644 --- a/docs/live/live_stream.md +++ b/docs/live/live_stream.md @@ -4,23 +4,22 @@ > https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo -_请求方式:GET_ +*请求方式:GET* **url参数:** + | 参数名 | 类型 | 内容 | 必要性 | 备注 | | ---------- | ----- | -------- | ------ | ---- | | room_id | num | 直播间号 | 必要 | 房间号 | | no_playurl | num | 无视频流 | 非必要 | 置`0`才有视频流 | -| mask | num | - | - | 作用未知,未观察到响应改变 默认1 | +| mask | num | (?) | 非必要 | 作用未知,未观察到响应改变 默认1 | | qn | num | 质量 | 非必要 | 3000杜比 20000 4K 10000 原画
400 蓝光 250 超清 150 高清
0 应该是默认 | -| platform | str | 平台 | - | 参考:`web` | -| protocol | num[] | 协议 | - | 参考:`0,1` | -| format | num[] | 格式 | - | 参考:`0,1,2` | -| codec | num[] | 编码 | - | 参考:`0,1,2` | -| dolby | num | 杜比 | - | 参考:`5` | -| panorama | num | 环绕音 | - | 参考:`1` | - -> 注意:请将Referer设置为相关链接,如`https://live.bilibili.com/` +| platform | str | 平台 | 非必要 | 参考:`web` | +| protocol | num[] | 协议 | 非必要 | 参考:`0,1` | +| format | num[] | 格式 | 非必要 | 参考:`0,1,2` | +| codec | num[] | 编码 | 非必要 | 参考:`0,1,2` | +| dolby | num | 杜比 | 非必要 | 参考:`5` | +| panorama | num | 环绕音 | 非必要 | 参考:`1` | **json回复:** @@ -32,6 +31,7 @@ _请求方式:GET_ 查看响应示例及响应含义 请求: + ```bash curl -G 'https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo' \ --data-urlencode 'room_id=123456789' \ # 请自行替换对应房间号 @@ -42,11 +42,11 @@ curl -G 'https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo' --data-urlencode 'codec=0,1,2' \ --data-urlencode 'dolby=5' \ --data-urlencode 'panorama=1' \ - --header 'Referer: https://live.bilibili.com' \ --header 'accept: application/json' ``` 响应: + ```jsonc { "code": 0, // 标记是否成功 @@ -59,7 +59,7 @@ curl -G 'https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo' "is_hidden": false, // 是否隐藏 "is_locked": false, // 是否锁定 "is_portrait": false, - "live_status": 1, // 直播状态:1为开播,0为下播 + "live_status": 1, // 直播状态:1为开播,2为未开播,0为下播 "hidden_till": 0, // 隐藏直到(目前未找到相关样本) "lock_till": 0, // 同上,锁定直到 "encrypted": false, @@ -145,6 +145,7 @@ curl -G 'https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo' } } ``` +
## 视频取流 @@ -155,6 +156,7 @@ curl -G 'https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo' - 最终链接为 `host + base_url + extra` 示例代码(javascript): + ```javascript function get_stream_url(data) { let result = []; @@ -172,6 +174,7 @@ function get_stream_url(data) { ``` 示例代码(python): + ```python def get_stream_url(data): for stream in data['data']['playurl_info']['playurl']['stream']: @@ -180,9 +183,7 @@ def get_stream_url(data): for url_info in codec['url_info']: yield ''.join([url_info['host'], codec['base_url'], url_info['extra']]) ``` + 最终从响应的链接随意选择一个即可,按照一般视频流处理即可(目前发现有m3u8和flv两种格式),至于编码格式之类问题,相关的下载器应该都能处理,或者自己根据需要在json回应中挑选 另外,有注意到部分链接可能包含客户端ip地址,在这方面(现在或者将来)可能有检测 - - -> [根据真实直播间号获取直播视频流 (旧)](https://github.com/SocialSisterYi/bilibili-API-collect/blob/f6760f4be38d5b592d396b211e48c666286524de/docs/live/live_stream.md) \ No newline at end of file