bilibili-API-collect/broadcast
2020-08-31 18:00:47 +08:00
..
readme.md 格式化 2020-08-31 16:37:38 +08:00
video_room.md 修改并补充折叠内容 2020-08-31 18:00:47 +08:00

全站广播

可用的广播服务:

获取广播服务器地址

http://api.bilibili.com/x/web-interface/broadcast/servers

请求方式GET

url参数

参数名 类型 内容 必要性 备注
platform str 平台选择 必要 为web时输出域名
其他时输出ip

json回复

根对象:

字段 类型 内容 备注
code num 返回值 0成功
-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

curl -G 'http://api.bilibili.com/x/web-interface/broadcast/servers'\
--data-urlencode 'platform=web'
查看响应示例:
{
	"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
	}
}

platform=其他时显示节点ip

curl -G 'http://api.bilibili.com/x/web-interface/broadcast/servers'\
--data-urlencode 'platform=1'
查看响应示例:
{
	"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
	}
}

服务器数据包

连接服务器分为三种方式分别是ws wss tcp数据包分为上行和下行

单个数据包分为头部和正文

其中上行的有认证包 心跳包,下行的有认证包回复 心跳包回复 普通包

建立连接后超过30s内未发送认证包或握手后30s内未发送心跳包或发送了错误的认证包都会被强制断开连接

操作流程:

1.发送认证包,等待接收认证回复

2.确认握手成功后每30s内发送心跳包并立即接收心跳包回复

3.空闲时间接收普通包

数据包结构

头部通用于上行和下行数据包

头部格式:

偏移量 长度(字节) 类型 含义
0x00 4 uint32 封包总大小(头部大小+正文大小)
0x04 2 uint16 头部大小一般为0x001218字节
0x06 2 uint16 协议版本可取常数1
0x08 4 uint32 操作码(包类型)
见下表
0x0C 4 uint32 sequence请求次数可取常数1
对于普通包恒为0
0x10 2 uint16 保留一般为0

操作码:

代码 含义
0x00000002 心跳包
0x00000003 心跳包回复
0x000003E8 普通包
0x00000007 认证包
0x00000008 认证包回复

示例:

以下为一个认证包示例,正文为文本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|