🚀调整项目结构

This commit is contained in:
SocialSisterYi
2023-02-22 01:00:06 +08:00
parent b85e835ce7
commit 7d89ece2ac
201 changed files with 84964 additions and 0 deletions

184
docs/broadcast/readme.md Normal file
View File

@@ -0,0 +1,184 @@
# 全站广播
可用的广播服务:
- [视频实时信息](video_room.md)√
## 获取广播服务器地址
> https://api.bilibili.com/x/web-interface/broadcast/servers
*请求方式GET*
**url参数**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| -------- | ---- | -------- | ------ | --------------------------------- |
| platform | str | 平台选择 | 必要 | 为web时输出域名<br />其他时输出ip |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | --------------------------- |
| code | num | 返回值 | 0成功<br />-400请求错误 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------------- | ------ | ------------------ | ---- |
| domain | str | 广播服务器url | |
| tcp_port | num | tcp端口 | |
| ws_port | num | websocket端口 | |
| wss_port | num | websocket ssl端口 | |
| heartbeat | num | 最大心跳包间隔时间 | |
| nodes | array | 服务节点地址列表 | |
| backoff | obj | | |
| heartbeat_max | num | | |
`data`中的`nodes`数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ------------- | ---- |
| 0 | str | 服务节点1 | |
| n | str | 服务节点(n+1) | |
| …… | str | …… | |
`data`中的`backoff`对象:
| 字段 | 类型 | 内容 | 备注 |
| ---------- | ---- | ------ | ---- |
| max_delay | num | | |
| base_delay | num | | |
| factor | num | | |
| jitter | num | | |
示例:
`platform`=`web`不显示节点ip
```shell
curl -G 'https://api.bilibili.com/x/web-interface/broadcast/servers' \
--data-urlencode 'platform=web'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"domain": "broadcast.chat.bilibili.com",
"tcp_port": 7821,
"ws_port": 7822,
"wss_port": 7823,
"heartbeat": 30,
"nodes": ["broadcast.chat.bilibili.com"],
"backoff": {
"max_delay": 300,
"base_delay": 3,
"factor": 1.8,
"jitter": 0.3
},
"heartbeat_max": 3
}
}
```
</details>
`platform`=其他时显示节点ip
```shell
curl -G 'https://api.bilibili.com/x/web-interface/broadcast/servers' \
--data-urlencode 'platform=1'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"domain": "broadcast.chat.bilibili.com",
"tcp_port": 7821,
"ws_port": 7822,
"wss_port": 7823,
"heartbeat": 30,
"nodes": ["134.175.207.130", "120.92.150.90", "120.92.150.212", "192.144.173.136", "154.8.217.108"],
"backoff": {
"max_delay": 300,
"base_delay": 3,
"factor": 1.8,
"jitter": 0.3
},
"heartbeat_max": 3
}
}
```
</details>
## 服务器数据包
连接服务器分为三种方式分别是ws wss tcp数据包分为上行和下行
单个数据包分为头部和正文
其中上行的有认证包 心跳包,下行的有认证包回复 心跳包回复 普通包
建立连接后超过30s内未发送认证包或握手后30s内未发送心跳包或发送了错误的认证包都会被强制断开连接
操作流程:
1.发送认证包,等待接收认证回复
2.确认握手成功后每30s内发送心跳包并立即接收心跳包回复
3.空闲时间接收普通包
### 数据包结构
头部通用于上行和下行数据包
头部格式:
| 偏移量 | 长度(字节) | 类型 | 含义 |
| ------ | ------------ | ------ | ---------------------------------------------------- |
| 0x00 | 4 | uint32 | 封包总大小(头部大小+正文大小) |
| 0x04 | 2 | uint16 | 头部大小一般为0x001218字节 |
| 0x06 | 2 | uint16 | 协议版本可取常数1 |
| 0x08 | 4 | uint32 | 操作码(包类型)<br />**见下表** |
| 0x0C | 4 | uint32 | sequence请求次数可取常数1<br />对于普通包恒为0 |
| 0x10 | 2 | uint16 | 保留一般为0 |
操作码:
| 代码 | 含义 |
| ---- | -------- |
| 2 | 心跳 |
| 3 | 心跳回复 |
| 7 | 认证 |
| 8 | 认证回复 |
| 1000 | 实时弹幕 |
**示例:**
以下为一个认证包示例,正文为文本`test`
```
00000000 00 00 00 16 00 12 00 01 00 00 00 07 00 00 00 01 |................|
00000010 00 00 74 65 73 74 |..test|
```

View File

@@ -0,0 +1,152 @@
# 视频实时信息
- [认证包(上行)](#认证包上行)
- [认证包回复(下行)](#认证包回复下行)
- [心跳包(上行)](#心跳包上行)
- [心跳包回复(实时观看数)(下行)](#心跳包回复实时观看数下行)
- [普通包(实时弹幕)(下行)](#普通包实时弹幕下行)
---
## 认证包(上行)
**正文内容json**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| -------- | ------ | -------- | ------------------------------ |
| room_id | str | 目标视频 | `video://{稿件avid}/{视频cid}` |
| platform | str | 平台标识 | 默认为`web` |
| accepts | array | 操作标识 | |
`array`数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ---- | ------------ |
| 0 | num | 1000 | 作用尚不明确 |
| 1 | num | 1015 | 作用尚不明确 |
**示例:**
发送视频`av706`1P的cid为` 3724723 `)的认证包
```
00000000 00 00 00 55 00 12 00 01 00 00 00 07 00 00 00 01 |...U............|
00000010 00 00 7b 22 72 6f 6f 6d 5f 69 64 22 3a 22 76 69 |..{"room_id":"vi|
00000020 64 65 6f 3a 2f 2f 37 30 36 2f 33 37 32 34 37 32 |deo://706/372472|
00000030 33 22 2c 22 70 6c 61 74 66 72 6f 6d 22 3a 22 77 |3","platfrom":"w|
00000040 65 62 22 2c 22 61 63 63 65 70 74 73 22 3a 5b 31 |eb","accepts":[1|
00000050 30 30 30 2c 31 30 31 35 5d 7d |000,1015]}|
```
## 认证包回复(下行)
**正文内容json**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | -------- |
| code | num | 返回值 | 0成功 |
| message | str | 错误信息 | 默认为OK |
| version | num | 版本号 | |
示例:
```
00000000 00 00 00 37 00 12 00 01 00 00 00 08 00 00 00 01 |...7............|
00000010 00 00 7b 22 63 6f 64 65 22 3a 30 2c 22 6d 65 73 |..{"code":0,"mes|
00000020 73 61 67 65 22 3a 22 4f 4b 22 2c 22 76 65 72 73 |sage":"OK","vers|
00000030 69 6f 6e 22 3a 31 7d |ion":1}|
```
## 心跳包(上行)
正文可为任意内容或为空
**示例:**
正文为空的示例
```
00000000 00 00 00 12 00 12 00 01 00 00 00 02 00 00 00 01 |................|
00000010 00 00 |..|
```
正文为`[object Object]`的示例
```
00000000 00 00 00 21 00 12 00 01 00 00 00 02 00 00 00 01 |...!............|
00000010 00 00 5b 6f 62 6a 65 63 74 20 4f 62 6a 65 63 74 |..[object Object|
00000020 5d |]|
```
## 心跳包回复(实时观看数)(下行)
**正文内容json**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | -------- |
| code | num | 返回值 | 0成功 |
| message | str | 错误信息 | 默认为OK |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | ---------------- | ---- |
| room | obj | 视频实时观看信息 | |
`data`中的`room`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | ------------ | ------------------------------ |
| online | num | 实时观看人数 | |
| room_id | str | 目标视频 | `video://{稿件avid}/{视频cid}` |
**示例:**
当前视频`av706`实时观看人数为13
```
00000000 00 00 00 68 00 12 00 01 00 00 00 03 00 00 00 01 |...h............|
00000010 00 00 7b 22 63 6f 64 65 22 3a 30 2c 22 6d 65 73 |..{"code":0,"mes|
00000020 73 61 67 65 22 3a 22 30 22 2c 22 64 61 74 61 22 |sage":"0","data"|
00000030 3a 7b 22 72 6f 6f 6d 22 3a 7b 22 6f 6e 6c 69 6e |:{"room":{"onlin|
00000040 65 22 3a 31 33 2c 22 72 6f 6f 6d 5f 69 64 22 3a |e":13,"room_id":|
00000050 22 76 69 64 65 6f 3a 2f 2f 37 30 36 2f 33 37 32 |"video://706/372|
00000060 34 37 32 33 22 7d 7d 7d |4723"}}}|
```
## 普通包(实时弹幕)(下行)
**正文内容json**
根数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ------------ | ------------------------------------------------------------ |
| 0 | str | 弹幕属性信息 | 详见[「弹幕」中的属性 p](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/danmaku/danmaku_xml.md) |
| 1 | str | 弹幕内容 | |
**示例:**
弹幕属性为`0.25,1,25,16777215,1588433046,1588431486568150,0,33ad5d91,32134068443807747`
弹幕内容为`此生无悔入东方,来世愿生幻想乡`
```
00000000 00 00 00 91 00 12 00 01 00 00 03 e8 00 00 00 00 |................|
00000010 00 00 5b 22 30 2e 32 35 2c 31 2c 32 35 2c 31 36 |..["0.25,1,25,16|
00000020 37 37 37 32 31 35 2c 31 35 38 38 34 33 33 30 34 |777215,158843304|
00000030 36 2c 31 35 38 38 34 33 31 34 38 36 35 36 38 31 |6,15884314865681|
00000040 35 30 2c 30 2c 33 33 61 64 35 64 39 31 2c 33 32 |50,0,33ad5d91,32|
00000050 31 33 34 30 36 38 34 34 33 38 30 37 37 34 37 22 |134068443807747"|
00000060 2c 22 e6 ad a4 e7 94 9f e6 97 a0 e6 82 94 e5 85 |,"此 生 无 悔|
00000070 a5 e4 b8 9c e6 96 b9 ef bc 8c e6 9d a5 e4 b8 96 |入 东 方 ,来 世 |
00000080 e6 84 bf e7 94 9f e5 b9 bb e6 83 b3 e4 b9 a1 22 |愿 生 幻 想 乡"|
00000090 5d |]|
```