bilibili-API-collect/live/message_stream.md

169 lines
4.3 KiB
Markdown
Raw Normal View History

2020-07-14 18:44:44 +08:00
# 直播间信息流
## 数据包格式
数据包为websocket格式为头部数据+正文数据
操作流程:
发送认证包->接收认证包回应->接收普通包&每30秒发送心跳包->接收心跳回应)
头部格式:
| 偏移量 | 长度 | 类型 | 含义 |
| ------ | ---- | ------ | ------------------------------------------------------------ |
| 0 | 4 | uint32 | 封包总大小(头部大小+正文大小) |
| 4 | 2 | uint16 | 头部大小一般为0x001016字节 |
| 6 | 2 | uint16 | 协议版本:<br />0普通包正文不使用压缩 <br />1心跳及认证包正文不使用压缩<br />2普通包正文使用zlib压缩 |
| 8 | 4 | uint32 | 操作码(封包类型) |
| 12 | 4 | uint32 | sequence可以取常数1 |
操作码:
| 代码 | 含义 |
| ---- | -------------------- |
| 2 | 心跳包 |
| 3 | 心跳包回复(人气值) |
| 5 | 普通包(命令) |
| 7 | 认证包 |
| 8 | 认证包回复 |
### 认证包
方式:(上行)
连接成功后5秒内发送否则强制断开连接
正文:
json格式
| 字段 | 类型 | 内容 | 备注 |
| --------- | ---- | ------------ | -------------- |
| uid | num | 用户UID | 不可为0 |
| roomid | num | 加入房间的ID | |
| protover | num | 协议版本 | 现在是2 |
| platform | str | 平台标识 | 可为"web" |
| clientver | str | 客户端版本 | 现在是"1.10.3" |
| type | num | 必须为2 | |
| key | str | 认证秘钥 | |
示例:
```
00000000 00 00 00 f0 00 10 00 01 00 00 00 07 00 00 00 01 |................|
00000010 7b 22 75 69 64 22 3a 32 39 33 37 39 33 34 33 35 |{"uid":293793435|
00000020 2c 22 72 6f 6f 6d 69 64 22 3a 32 31 36 38 36 32 |,"roomid":216862|
00000030 33 37 2c 22 70 72 6f 74 6f 76 65 72 22 3a 32 2c |37,"protover":2,|
00000040 22 70 6c 61 74 66 6f 72 6d 22 3a 22 77 65 62 22 |"platform":"web"|
00000050 2c 22 63 6c 69 65 6e 74 76 65 72 22 3a 22 31 2e |,"clientver":"1.|
00000060 31 30 2e 33 22 2c 22 74 79 70 65 22 3a 32 2c 22 |10.3","type":2,"|
00000070 6b 65 79 22 3a 22 43 6f 4b 68 5f 61 49 46 42 6c |key":"CoKh_aIFBl|
00000080 51 32 4c 57 77 64 79 4e 43 6b 2d 69 5f 42 76 72 |Q2LWwdyNCk-i_Bvr|
00000090 64 72 72 55 4d 32 78 57 6c 74 62 35 77 6b 54 50 |drrUM2xWltb5wkTP|
000000a0 4e 72 44 55 49 2d 73 46 32 41 56 56 4f 44 78 43 |NrDUI-sF2AVVODxC|
000000b0 52 42 39 69 64 76 74 34 46 32 4d 50 31 45 4a 6c |RB9idvt4F2MP1EJl|
000000c0 4d 68 49 57 6b 31 5a 69 73 67 6e 32 67 67 66 6c |MhIWk1Zisgn2ggfl|
000000d0 68 72 65 6e 4f 4b 65 39 7a 56 65 6d 78 35 7a 5f |hrenOKe9zVemx5z_|
000000e0 5a 4d 43 61 55 77 4c 31 65 70 6d 7a 5a 53 22 7d |ZMCaUwL1epmzZS"}|
```
### 认证包回复
方式:(下行)
在认证包发送成功后就会收到
json格式
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | ------ | --------- |
| code | num | 返回值 | 0认证成功 |
示例:
```
00000000 00 00 00 1a 00 10 00 01 00 00 00 08 00 00 00 01 |................|
00000010 7b 22 63 6f 64 65 22 3a 30 7d |{"code":0}|
```
### 心跳包
方式:(上行)
30秒左右发送一次否则60秒后会被强制断开连接
正文:
特定字符
[object Object]
示例:
```
00000000 00 00 00 1f 00 10 00 01 00 00 00 02 00 00 00 01 |................|
00000010 5b 6f 62 6a 65 63 74 20 4f 62 6a 65 63 74 5d |[object Object]|
```
### 心跳回应(人气值)
方式:(下行)
在心跳包发送成功后就会收到
正文:
uint32整数代表房间当前的人气值
示例:
```
00000000 00 00 00 14 00 10 00 01 00 00 00 03 00 00 00 01 |................|
00000010 00 00 14 83 |....|
```
可见房间内人气值为5251人
### 普通包
方式:(下行)
#### 弹幕
#### 送礼
#### 欢迎加入房间
#### 欢迎房管加入房间
#### 系统消息
#### 主播准备中
#### 直播开始
#### 直播状态更新