全站广播

获取广播服务器地址

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

请求方式:GET

url参数:

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

json回复:

根对象:

字段类型内容备注
codenum返回值0:成功
-400:请求错误
messagestr错误信息默认为0
ttlnum1
dataobj信息本体

data对象:

字段类型内容备注
domainstr广播服务器url
tcp_portnumtcp端口
ws_portnumwebsocket端口
wss_portnumwebsocket ssl端口
heartbeatnum最大心跳包间隔时间
nodesarray服务节点地址列表
backoffobj???
heartbeat_maxnum???

data中的nodes数组:

类型内容备注
0str服务节点1
nstr服务节点(n+1)
……str……

data中的backoff对象:

字段类型内容备注
max_delaynum???
base_delaynum???
factornum???
jitternum???

示例:

platform=web时,不显示节点ip

curl -G 'https://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 'https://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.空闲时间接收普通包

数据包结构

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

头部格式:

偏移量长度(字节)类型含义
0x004uint32封包总大小(头部大小+正文大小)
0x042uint16头部大小(一般为0x0012,18字节)
0x062uint16协议版本,可取常数1
0x084uint32操作码(包类型)
见下表
0x0C4uint32sequence(请求次数),可取常数1
对于普通包恒为0
0x102uint16保留,一般为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|