Skip to content

Latest commit

 

History

History
 
 

broadcast

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

全站广播

可用的广播服务:

获取广播服务器地址

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 头部大小(一般为0x0012,18字节)
0x06 2 uint16 协议版本,可取常数1
0x08 4 uint32 操作码(包类型)
见下表
0x0C 4 uint32 sequence(请求次数),可取常数1
对于普通包恒为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|